diff --git a/apps/docs/components/Extensions.js b/apps/docs/components/Extensions.js new file mode 100644 index 00000000000..47753d6bfde --- /dev/null +++ b/apps/docs/components/Extensions.js @@ -0,0 +1,35 @@ +import React, { useState } from 'react' +import extensions from '../data/extensions.json' + +export default function Extensions() { + const [filter, setFilter] = useState('') + return ( + <> +
+ + setFilter(e.target.value)} + /> +
+
+ {extensions + .filter((x) => x.name.indexOf(filter) >= 0) + .map((extension) => ( +
+
+

+ {extension.name} +

+

+ {extension.comment.charAt(0).toUpperCase() + extension.comment.slice(1)} +

+
+
+ ))} +
+ + ) +} diff --git a/apps/docs/components/GuidesTableOfContents.tsx b/apps/docs/components/GuidesTableOfContents.tsx new file mode 100644 index 00000000000..eefa3b085b1 --- /dev/null +++ b/apps/docs/components/GuidesTableOfContents.tsx @@ -0,0 +1,74 @@ +import { FC } from 'react' +import { removeAnchor } from './CustomHTMLElements/CustomHTMLElements.utils' + +const formatSlug = (slug: string) => { + // [Joshen] We will still provide support for headers declared like this: + // ## REST API {#rest-api-overview} + // At least for now, this was a docusaurus thing. + if (slug.includes('#')) return slug.split('#')[1] + return slug +} + +const formatTOCHeader = (content: string) => { + let begin = false + const res = [] + for (const x of content) { + if (x === '`') { + if (!begin) { + begin = true + res.push(``) + } else { + begin = false + res.push(``) + } + } else { + res.push(x) + } + } + return res.join('') +} + +interface TOCHeader { + id: number + level: number + text: string + link: string +} + +interface Props { + list: TOCHeader[] +} + +const GuidesTableOfContents: FC = ({ list }) => { + return ( + + + // + ) +} + +export default GuidesTableOfContents diff --git a/apps/docs/components/TableOfContents.tsx b/apps/docs/components/TableOfContents.tsx index c2ddb5b96ee..7bfc8c19258 100644 --- a/apps/docs/components/TableOfContents.tsx +++ b/apps/docs/components/TableOfContents.tsx @@ -1,3 +1,7 @@ +// [Terry] +// Delete this after we've implemented GuidesTableofContents and moved all guides +// and rename GuidesTableofContents to TableOfContents + import { FC } from 'react' import { getAnchor, removeAnchor } from './CustomHTMLElements/CustomHTMLElements.utils' diff --git a/apps/docs/components/index.tsx b/apps/docs/components/index.tsx index 035b7fc610a..e356c7789d5 100644 --- a/apps/docs/components/index.tsx +++ b/apps/docs/components/index.tsx @@ -11,11 +11,13 @@ import JwtGenerator from './JwtGenerator' import Frameworks from './Frameworks' import AuthProviders from './AuthProviders' import FunctionsExamples from './FunctionsExamples' +import Extensions from './Extensions' // Other components import { Heading } from './CustomHTMLElements' import QuickstartIntro from './MDX/quickstart_intro.mdx' import ProjectSetup from './MDX/project_setup.mdx' +import { Mermaid } from 'mdx-mermaid/Mermaid' const components = { Admonition, @@ -28,6 +30,8 @@ const components = { JwtGenerator, QuickstartIntro, ProjectSetup, + Mermaid, + Extensions, Alert: (props: any) => ( {props.children} diff --git a/apps/docs/layouts/DefaultGuideLayout.tsx b/apps/docs/layouts/DefaultGuideLayout.tsx index 255370d72e4..bcf0e870b1e 100644 --- a/apps/docs/layouts/DefaultGuideLayout.tsx +++ b/apps/docs/layouts/DefaultGuideLayout.tsx @@ -4,7 +4,7 @@ import Head from 'next/head' import NavBar from '../components/Navigation/NavBar' import SideBar from '../components/Navigation/SideBar' import Footer from '../components/Footer' -import TableOfContents from '~/components/TableOfContents' +import GuidesTableOfContents from '~/components/GuidesTableOfContents' import { useRouter } from 'next/router' import { getPageType } from '../lib/helpers' import components from '~/components' @@ -17,7 +17,7 @@ interface Props { currentPage: string } -const Layout: FC = ({ meta, children, toc: pageToc, currentPage }) => { +const Layout: FC = ({ meta, children }) => { const { asPath } = useRouter() const page = getPageType(asPath) @@ -32,25 +32,25 @@ const Layout: FC = ({ meta, children, toc: pageToc, currentPage }) => { }, []) const articleRef = useRef() - const [headingsArr, setHeadingsArr] = useState([]) + const [tocList, setTocList] = useState([]) useEffect(() => { const articleEl = articleRef.current as HTMLElement if (!articleRef.current) return - const headings = Array.from(articleEl.querySelectorAll('h2, h3, h4')) - setHeadingsArr(headings) - console.log(headings) + const headings = Array.from(articleEl.querySelectorAll('h2, h3')) + const newHeadings = headings + .filter((heading) => heading.id) + .map((heading) => { + const text = heading.textContent.replace('#', '') + const link = heading.querySelector('a').getAttribute('href') + const level = heading.tagName === 'H2' ? 2 : 3 + return { text, link, level } + }) + setTocList(newHeadings) }, []) - function generateTocItem(item) { - const id = item.id - console.log(id) - } - - const hasTableOfContents = true - // pageToc !== undefined && - // pageToc.json.filter((item) => item.lvl !== 1 && item.lvl <= 3).length > 0 + const hasTableOfContents = tocList.length > 0 return ( <> @@ -83,6 +83,8 @@ const Layout: FC = ({ meta, children, toc: pageToc, currentPage }) => { meta?.hide_table_of_contents || !hasTableOfContents ? 'xl:min-w-[880px]' : '' } doc-content-container prose dark:prose-dark dark:bg-scale-200 width-full mt-8 2xl:max-w-[880px]`} > + {meta?.title &&

{meta.title}

} + {children} @@ -93,9 +95,7 @@ const Layout: FC = ({ meta, children, toc: pageToc, currentPage }) => { 'thin-scrollbar overflow-y-auto sticky hidden xl:block md:col-span-3 px-2', ].join(' ')} > - {headingsArr.length > 0 && headingsArr.map((item) => generateTocItem(item))} - - {/* */} + )} diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs index b588ce78597..baf05d49bca 100644 --- a/apps/docs/next.config.mjs +++ b/apps/docs/next.config.mjs @@ -10,7 +10,7 @@ const withMDX = nextMdx({ remarkPlugins: [remarkGfm], rehypePlugins: [rehypeSlug], // This is required for `MDXProvider` component - providerImportSource: '@mdx-js/react', + // providerImportSource: '@mdx-js/react', }, }) diff --git a/apps/docs/package.json b/apps/docs/package.json index 21ec0079b5d..0414cd56557 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -50,6 +50,7 @@ "jsrsasign": "^10.5.26", "lodash": "^4.17.21", "markdown-toc": "^1.2.0", + "mdx-mermaid": "^1.3.2", "next": "12.1.0", "next-compose-plugins": "^2.2.1", "next-mdx-remote": "^3.0.8", @@ -75,15 +76,15 @@ "config": "*", "ejs": "^3.1.8", "eslint": "8.9.0", + "globby": "^12.0.2", "minimist": "^1.2.6", "next-transpile-modules": "9.0.0", "npm-run-all": "^4.1.5", "openapi-types": "^12.0.2", + "prettier": "^2.2.1", "sass": "^1.55.0", "ts-node": "^10.9.1", "tsconfig": "*", - "typescript": "^4.5.3", - "globby": "^12.0.2", - "prettier": "^2.2.1" + "typescript": "^4.5.3" } } diff --git a/apps/docs/docs/404.mdx b/apps/docs/pages/404.mdx similarity index 100% rename from apps/docs/docs/404.mdx rename to apps/docs/pages/404.mdx diff --git a/apps/docs/pages/[...slug].tsx b/apps/docs/pages/[...slug].tsx index 0bcff406c77..1b49d414efc 100644 --- a/apps/docs/pages/[...slug].tsx +++ b/apps/docs/pages/[...slug].tsx @@ -38,7 +38,6 @@ export default function Doc({ meta, content, toc }: Props) { export async function getStaticProps({ params }: { params: { slug: string[] } }) { let slug - if (params.slug.length > 1) { slug = `docs/${params.slug.join('/')}` } else { @@ -48,6 +47,7 @@ export async function getStaticProps({ params }: { params: { slug: string[] } }) let doc = getDocsBySlug(slug) const content = await serialize(doc.content || '') + console.log(doc.content) return { props: { ...doc, diff --git a/apps/docs/docs/company/aup.md b/apps/docs/pages/company/aup.md similarity index 100% rename from apps/docs/docs/company/aup.md rename to apps/docs/pages/company/aup.md diff --git a/apps/docs/docs/company/privacy.md b/apps/docs/pages/company/privacy.md similarity index 100% rename from apps/docs/docs/company/privacy.md rename to apps/docs/pages/company/privacy.md diff --git a/apps/docs/docs/company/sla.md b/apps/docs/pages/company/sla.md similarity index 100% rename from apps/docs/docs/company/sla.md rename to apps/docs/pages/company/sla.md diff --git a/apps/docs/docs/company/terms.md b/apps/docs/pages/company/terms.md similarity index 100% rename from apps/docs/docs/company/terms.md rename to apps/docs/pages/company/terms.md diff --git a/apps/docs/docs/faq.mdx b/apps/docs/pages/faq.mdx similarity index 100% rename from apps/docs/docs/faq.mdx rename to apps/docs/pages/faq.mdx diff --git a/apps/docs/pages/guides/api.mdx b/apps/docs/pages/guides/api.mdx index 7f5d40e6b75..de637e303c9 100644 --- a/apps/docs/pages/guides/api.mdx +++ b/apps/docs/pages/guides/api.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: api -title: Serverless APIs -description: Auto-generating and Realtime APIs. -sidebar_label: Overview ---- + id: 'api', + title: 'Serverless APIs', + description: 'Auto-generating and Realtime APIs.', + sidebar_label: 'Overview', +} Supabase auto-generates three types of API directly from your database schema. @@ -375,3 +375,7 @@ The expected value for `useconfig` should be: ```sql ['session_preload_libraries=supautils, safeupdate'] ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth.mdx b/apps/docs/pages/guides/auth.mdx index f501ed694ec..93384ee69cf 100644 --- a/apps/docs/pages/guides/auth.mdx +++ b/apps/docs/pages/guides/auth.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth -title: Auth -description: Use Supabase to Authenticate and Authorize your users. -sidebar_label: Overview ---- + id: 'auth', + title: 'Auth', + description: 'Use Supabase to Authenticate and Authorize your users.', + sidebar_label: 'Overview', +} ## Overview @@ -122,3 +122,7 @@ When users sign up, Supabase assigns them a unique ID. You can reference this ID + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-apple.mdx b/apps/docs/pages/guides/auth/auth-apple.mdx index 5db9ddceccc..d5bf22f9205 100644 --- a/apps/docs/pages/guides/auth/auth-apple.mdx +++ b/apps/docs/pages/guides/auth/auth-apple.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-apple -title: 'Login with Apple' -description: Add Apple OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-apple', + title: 'Login with Apple', + description: 'Add Apple OAuth to your Supabase project', +} To enable Apple Auth for your project, you need to set up an Apple OAuth application and add the application credentials to your Supabase Dashboard. @@ -204,3 +201,7 @@ async function signout() { - [Ruby](https://www.ruby-lang.org/en/) Docs. - [ruby-jwt](https://github.com/jwt/ruby-jwt) library. - Thanks to [Janak Amarasena](https://medium.com/@janakda) who did all the heavy lifting in [How to configure Sign In with Apple](https://medium.com/identity-beyond-borders/how-to-configure-sign-in-with-apple-77c61e336003). + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-azure.mdx b/apps/docs/pages/guides/auth/auth-azure.mdx index ffb36a40f14..d75a365b1d5 100644 --- a/apps/docs/pages/guides/auth/auth-azure.mdx +++ b/apps/docs/pages/guides/auth/auth-azure.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-azure -title: 'Login with Azure' -description: Add Azure OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-azure', + title: 'Login with Azure', + description: 'Add Azure OAuth to your Supabase project', +} To enable Azure Auth for your project, you need to set up an Azure OAuth application and add the application credentials to your Supabase Dashboard. @@ -100,3 +97,7 @@ async function signout() { - [Azure Developer Account](https://portal.azure.com) - [GitHub Discussion](https://github.com/supabase/gotrue/pull/54#issuecomment-757043573) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-bitbucket.mdx b/apps/docs/pages/guides/auth/auth-bitbucket.mdx index d106616d2c2..626b1ef3cf7 100644 --- a/apps/docs/pages/guides/auth/auth-bitbucket.mdx +++ b/apps/docs/pages/guides/auth/auth-bitbucket.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-bitbucket -title: 'Login with Bitbucket' -description: Add Bitbucket OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-bitbucket', + title: 'Login with Bitbucket', + description: 'Add Bitbucket OAuth to your Supabase project', +} To enable Bitbucket Auth for your project, you need to set up a BitBucket OAuth application and add the application credentials to your Supabase Dashboard. @@ -92,3 +89,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Bitbucket Account](https://bitbucket.org) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-captcha.mdx b/apps/docs/pages/guides/auth/auth-captcha.mdx index 12e8abee498..389032261ea 100644 --- a/apps/docs/pages/guides/auth/auth-captcha.mdx +++ b/apps/docs/pages/guides/auth/auth-captcha.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-captcha -title: 'Enable Captcha Protection' -description: Add Captcha Protection to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-captcha', + title: 'Enable Captcha Protection', + description: 'Add Captcha Protection to your Supabase project', +} Supabase provides you with the option of adding captcha to your sign-in, sign-up, and password reset forms. This keeps your website safe from bots and malicious scripts. Supabase authentication has support for [hCaptcha](https://www.hcaptcha.com/). @@ -111,3 +108,7 @@ captcha.current.resetCaptcha() In order to test that this works locally we will need to use something like [ngrok](https://ngrok.com/) or add an entry to your hosts file. You can read more about this in the [hCaptcha docs](https://docs.hcaptcha.com/#local-development). Run the application and you should now be provided with a captcha challenge. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-discord.mdx b/apps/docs/pages/guides/auth/auth-discord.mdx index 0495b116622..dc599979d0e 100644 --- a/apps/docs/pages/guides/auth/auth-discord.mdx +++ b/apps/docs/pages/guides/auth/auth-discord.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-discord -title: 'Login with Discord' -description: Add Discord OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-discord', + title: 'Login with Discord', + description: 'Add Discord OAuth to your Supabase project', +} To enable Discord Auth for your project, you need to set up a Discord Application and add the Application OAuth credentials to your Supabase Dashboard. @@ -94,3 +91,7 @@ async function signout() { - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Discord Account](https://discord.com) - [Discord Developer Portal](https://discord.com/developers) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-email.mdx b/apps/docs/pages/guides/auth/auth-email.mdx index 4ccbf3d03c4..0f833876253 100644 --- a/apps/docs/pages/guides/auth/auth-email.mdx +++ b/apps/docs/pages/guides/auth/auth-email.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-email -title: 'Login With Email' -description: Use Supabase to Authenticate and Authorize your users using email. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-email', + title: 'Login With Email', + description: 'Use Supabase to Authenticate and Authorize your users using email.', +} ## Overview @@ -101,3 +98,7 @@ Future signOut() async { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Supabase Flutter Client](https://github.com/supabase/supabase-flutter) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-facebook.mdx b/apps/docs/pages/guides/auth/auth-facebook.mdx index 30c4f023d11..43658f38b00 100644 --- a/apps/docs/pages/guides/auth/auth-facebook.mdx +++ b/apps/docs/pages/guides/auth/auth-facebook.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-facebook -title: 'Login with Facebook' -description: Add Facebook OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-facebook', + title: 'Login with Facebook', + description: 'Add Facebook OAuth to your Supabase project', +} To enable Facebook Auth for your project, you need to set up a Facebook OAuth application and add the application credentials to your Supabase Dashboard. @@ -109,3 +106,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Facebook Developers Dashboard](https://developers.facebook.com/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-github.mdx b/apps/docs/pages/guides/auth/auth-github.mdx index f3ba6a9748a..6ddcdac1ede 100644 --- a/apps/docs/pages/guides/auth/auth-github.mdx +++ b/apps/docs/pages/guides/auth/auth-github.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-github -title: 'Login with GitHub' -description: Add GitHub OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-github', + title: 'Login with GitHub', + description: 'Add GitHub OAuth to your Supabase project', +} To enable GitHub Auth for your project, you need to set up a GitHub OAuth application and add the application credentials to your Supabase Dashboard. @@ -102,3 +99,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [GitHub Developer Settings](https://github.com/settings/developers) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-gitlab.mdx b/apps/docs/pages/guides/auth/auth-gitlab.mdx index 94ddfa35096..870c292a0b8 100644 --- a/apps/docs/pages/guides/auth/auth-gitlab.mdx +++ b/apps/docs/pages/guides/auth/auth-gitlab.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-gitlab -title: 'Login with GitLab' -description: Add GitLab OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-gitlab', + title: 'Login with GitLab', + description: 'Add GitLab OAuth to your Supabase project', +} To enable GitLab Auth for your project, you need to set up a GitLab OAuth application and add the application credentials to your Supabase Dashboard. @@ -89,3 +86,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [GitLab Account](https://gitlab.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-google.mdx b/apps/docs/pages/guides/auth/auth-google.mdx index 2bb4bd84588..4a8a2c3b222 100644 --- a/apps/docs/pages/guides/auth/auth-google.mdx +++ b/apps/docs/pages/guides/auth/auth-google.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-google -title: 'Login with Google' -description: Add Google OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-google', + title: 'Login with Google', + description: 'Add Google OAuth to your Supabase project', +} To enable Google Auth for your project, you need to set up a Google OAuth application and add the application credentials to your Supabase Dashboard. @@ -117,3 +114,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Google Cloud Platform Console](https://console.cloud.google.com/home/dashboard) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers.mdx b/apps/docs/pages/guides/auth/auth-helpers.mdx index cab69abcc74..56115933b9a 100644 --- a/apps/docs/pages/guides/auth/auth-helpers.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: index -title: Auth Helpers -description: A collection of framework-specific Auth utilities for working with Supabase. -sidebar_label: Overview ---- + id: 'index', + title: 'Auth Helpers', + description: 'A collection of framework-specific Auth utilities for working with Supabase.', + sidebar_label: 'Overview', +} A collection of framework-specific Auth utilities for working with Supabase. @@ -54,3 +54,7 @@ The Auth Helpers are in `beta`. They are usable in their current state, but it's - [Source code](https://github.com/supabase/auth-helpers) - [Known bugs and issues](https://github.com/supabase/auth-helpers/issues) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx b/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx index 7c0801dae49..2b4eff8c77a 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/auth-ui.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-ui -title: Auth UI -description: A prebuilt, customizable React component for authenticating users. ---- + id: 'auth-ui', + title: 'Auth UI', + description: 'A prebuilt, customizable React component for authenticating users.', +} Auth UI is a pre-built React component for authenticating users. It supports custom themes and extensible styles to match your brand and aesthetic. @@ -275,3 +275,7 @@ const App = () => ( /> ) ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx index 4583957caa7..e6acf1da031 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx @@ -1,14 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: nextjs -title: Supabase Auth with Next.js -description: Authentication helpers for Next.js API routes, middleware, and SSR. -sidebar_label: 'Next.js' ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'nextjs', + title: 'Supabase Auth with Next.js', + description: 'Authentication helpers for Next.js API routes, middleware, and SSR.', + sidebar_label: 'Next.js', +} This submodule provides convenience helpers for implementing user authentication in Next.js applications. @@ -840,3 +837,7 @@ import { Database } from '../database.types' const supabaseClient = useSupabaseClient() ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/remix.mdx b/apps/docs/pages/guides/auth/auth-helpers/remix.mdx index f4f282d2e53..6df649ea7b1 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/remix.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/remix.mdx @@ -1,14 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: remix -title: Supabase Auth with Remix -description: Authentication helpers for loaders and actions in Remix. -sidebar_label: 'Remix' ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'remix', + title: 'Supabase Auth with Remix', + description: 'Authentication helpers for loaders and actions in Remix.', + sidebar_label: 'Remix', +} This submodule provides convenience helpers for implementing user authentication in Remix applications. @@ -879,3 +876,7 @@ export default function ProtectedPage() { return
{JSON.stringify({ user, allRepos }, null, 2)}
; } ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx b/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx index 2fbbdf49a7d..ed7fb35f055 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx @@ -1,14 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: sveltekit -title: Supabase Auth with SvelteKit -description: Convenience helpers for implementing user authentication in SvelteKit. -sidebar_label: SvelteKit ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'sveltekit', + title: 'Supabase Auth with SvelteKit', + description: 'Convenience helpers for implementing user authentication in SvelteKit.', + sidebar_label: 'SvelteKit', +} This submodule provides convenience helpers for implementing user authentication in [SvelteKit](https://kit.svelte.dev/) applications. @@ -1119,3 +1116,7 @@ export const GET: RequestHandler = withAuth(async ({ session, getSupabaseClient - [SvelteKit example](https://github.com/supabase/auth-helpers/tree/main/examples/sveltekit) - [SvelteKit Email/Password example](https://github.com/supabase/auth-helpers/tree/main/examples/sveltekit-email-password) - [SvelteKit Magiclink example](https://github.com/supabase/auth-helpers/tree/main/examples/sveltekit-magic-link) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-keycloak.mdx b/apps/docs/pages/guides/auth/auth-keycloak.mdx index 53e36b7c78e..73998bc3dcb 100644 --- a/apps/docs/pages/guides/auth/auth-keycloak.mdx +++ b/apps/docs/pages/guides/auth/auth-keycloak.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-keycloak -title: 'Login with Keycloak' -description: Add Keycloak OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-keycloak', + title: 'Login with Keycloak', + description: 'Add Keycloak OAuth to your Supabase project', +} To enable Keycloak Auth for your project, you need to set up an Keycloak OAuth application and add the application credentials to your Supabase Dashboard. @@ -86,3 +83,7 @@ async function signout() { - You can find the keycloak openid endpoint configuration under the realm settings. ![Keycloak OpenID Endpoint Configuration](/docs/img/guides/auth-keycloak/keycloak-openid-endpoint-config.png) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-linkedin.mdx b/apps/docs/pages/guides/auth/auth-linkedin.mdx index fe64077804e..22fb6f1f05e 100644 --- a/apps/docs/pages/guides/auth/auth-linkedin.mdx +++ b/apps/docs/pages/guides/auth/auth-linkedin.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-linkedin -title: 'Login with LinkedIn' -description: Add LinkedIn OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-linkedin', + title: 'Login with LinkedIn', + description: 'Add LinkedIn OAuth to your Supabase project', +} To enable LinkedIn Auth for your project, you need to set up a LinkedIn OAuth application and add the application credentials to your Supabase Dashboard. @@ -88,3 +85,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [LinkedIn Developer Dashboard](https://api.LinkedIn.com/apps) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-magic-link.mdx b/apps/docs/pages/guides/auth/auth-magic-link.mdx index 0c49f2d5775..181954436ae 100644 --- a/apps/docs/pages/guides/auth/auth-magic-link.mdx +++ b/apps/docs/pages/guides/auth/auth-magic-link.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-magic-link -title: 'Login With Magic Link' -description: Use Supabase to authenticate and authorize your users using magic links. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-magic-link', + title: 'Login With Magic Link', + description: 'Use Supabase to authenticate and authorize your users using magic links.', +} Magic links are a form of passwordless logins where users click on a link sent to their email address to log in to their accounts. Magic links only work with email addresses. By default, a user can only request a magic link once every 60 seconds. @@ -93,3 +90,7 @@ Future signOut() async { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Supabase Flutter Client](https://github.com/supabase/supabase-flutter) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-messagebird.mdx b/apps/docs/pages/guides/auth/auth-messagebird.mdx index 5c6fa361f7f..acfc4d0cbe2 100644 --- a/apps/docs/pages/guides/auth/auth-messagebird.mdx +++ b/apps/docs/pages/guides/auth/auth-messagebird.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-messagebird -title: Phone Auth with MessageBird -description: How to set up and use Mobile OTP with MessageBird and Supabase. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-messagebird', + title: 'Phone Auth with MessageBird', + description: 'How to set up and use Mobile OTP with MessageBird and Supabase.', +} ## Overview @@ -283,3 +280,7 @@ The user does not have a password therefore will need to sign in via this method - [MessageBird Signup](https://dashboard.messagebird.com/en/sign-up) - [Supabase Dashboard](https://app.supabase.com) - [Supabase Row Level Security](/docs/guides/auth#row-level-security) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-mfa.mdx b/apps/docs/pages/guides/auth/auth-mfa.mdx index fd7995e8da2..286916d29de 100644 --- a/apps/docs/pages/guides/auth/auth-mfa.mdx +++ b/apps/docs/pages/guides/auth/auth-mfa.mdx @@ -1,12 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-mfa -title: 'Multi-Factor Authentication' -description: Add an additional layer of security to your apps with Supabase Auth multi-factor authentication. ---- - -import { Mermaid } from 'mdx-mermaid/Mermaid' + id: 'auth-mfa', + title: 'Multi-Factor Authentication', + description: + 'Add an additional layer of security to your apps with Supabase Auth multi-factor authentication.', +} @@ -629,3 +628,7 @@ Currently recognized methods are: - `mfa/totp` - a TOTP additional factor. This list will expand in the future. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-notion.mdx b/apps/docs/pages/guides/auth/auth-notion.mdx index e70dfa3df35..1f1d74e465a 100644 --- a/apps/docs/pages/guides/auth/auth-notion.mdx +++ b/apps/docs/pages/guides/auth/auth-notion.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-notion -title: 'Login with Notion' -description: Add Notion OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-notion', + title: 'Login with Notion', + description: 'Add Notion OAuth to your Supabase project', +} To enable Notion Auth for your project, you need to set up a Notion Application and add the Application OAuth credentials to your Supabase Dashboard. @@ -92,3 +89,7 @@ async function signout() { - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Notion Account](https://notion.so) - [Notion Developer Portal](https://www.notion.so/my-integrations) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-slack.mdx b/apps/docs/pages/guides/auth/auth-slack.mdx index 9f465c345f1..6d700e6f961 100644 --- a/apps/docs/pages/guides/auth/auth-slack.mdx +++ b/apps/docs/pages/guides/auth/auth-slack.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-slack -title: 'Login with Slack' -description: Add Slack OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-slack', + title: 'Login with Slack', + description: 'Add Slack OAuth to your Supabase project', +} To enable Slack Auth for your project, you need to set up a Slack OAuth application and add the application credentials to your Supabase Dashboard. @@ -101,3 +98,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Slack Developer Dashboard](https://api.slack.com/apps) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-spotify.mdx b/apps/docs/pages/guides/auth/auth-spotify.mdx index 5d97ce9bb4d..c5f3a0872f2 100644 --- a/apps/docs/pages/guides/auth/auth-spotify.mdx +++ b/apps/docs/pages/guides/auth/auth-spotify.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-spotify -title: 'Login with Spotify' -description: Add Spotify OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-spotify', + title: 'Login with Spotify', + description: 'Add Spotify OAuth to your Supabase project', +} To enable Spotify Auth for your project, you need to set up a Spotify OAuth application and add the application credentials to your Supabase Dashboard. @@ -96,3 +93,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-twilio.mdx b/apps/docs/pages/guides/auth/auth-twilio.mdx index b2cb6ce7b65..fa45a547970 100644 --- a/apps/docs/pages/guides/auth/auth-twilio.mdx +++ b/apps/docs/pages/guides/auth/auth-twilio.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-twilio -title: Phone Auth with Twilio -description: How to set up and use Mobile OTP with Twilio and Supabase. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-twilio', + title: 'Phone Auth with Twilio', + description: 'How to set up and use Mobile OTP with Twilio and Supabase.', +} ## Overview @@ -302,3 +299,7 @@ The user does not have a password therefore will need to sign in via this method - [Twilio Signup](https://www.twilio.com/try-twilio) - [Supabase Dashboard](https://app.supabase.com) - [Supabase Row Level Security](/docs/guides/auth#row-level-security) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-twitch.mdx b/apps/docs/pages/guides/auth/auth-twitch.mdx index 0dcd5eacb77..fab1f8e42e3 100644 --- a/apps/docs/pages/guides/auth/auth-twitch.mdx +++ b/apps/docs/pages/guides/auth/auth-twitch.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-twitch -title: 'Login with Twitch' -description: Add Twitch OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-twitch', + title: 'Login with Twitch', + description: 'Add Twitch OAuth to your Supabase project', +} To enable Twitch Auth for your project, you need to set up a Twitch Application and add the Application OAuth credentials to your Supabase Dashboard. @@ -108,3 +105,7 @@ async function signout() { - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Twitch Account](https://twitch.tv) - [Twitch Developer Console](https://dev.twitch.tv/console) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-twitter.mdx b/apps/docs/pages/guides/auth/auth-twitter.mdx index a8619e21494..40cf31af0da 100644 --- a/apps/docs/pages/guides/auth/auth-twitter.mdx +++ b/apps/docs/pages/guides/auth/auth-twitter.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-twitter -title: 'Login with Twitter' -description: Add Twitter OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-twitter', + title: 'Login with Twitter', + description: 'Add Twitter OAuth to your Supabase project', +} To enable Twitter Auth for your project, you need to set up a Twitter OAuth application and add the application credentials to your Supabase Dashboard. @@ -97,3 +94,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Twitter Developer Dashboard](https://developer.twitter.com/en/portal/dashboard) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-vonage.mdx b/apps/docs/pages/guides/auth/auth-vonage.mdx index 99975f0696d..5ebe1de41d0 100644 --- a/apps/docs/pages/guides/auth/auth-vonage.mdx +++ b/apps/docs/pages/guides/auth/auth-vonage.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-vonage -title: Phone Auth with Vonage -description: How to set up and use Mobile OTP with Vonage and Supabase. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-vonage', + title: 'Phone Auth with Vonage', + description: 'How to set up and use Mobile OTP with Vonage and Supabase.', +} ## Overview @@ -274,3 +271,7 @@ The user does not have a password therefore will need to sign in via this method - [Vonage Signup](https://dashboard.nexmo.com/sign-up) - [Supabase Dashboard](https://app.supabase.com) - [Supabase Row Level Security](/docs/guides/auth#row-level-security) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-workos.mdx b/apps/docs/pages/guides/auth/auth-workos.mdx index f92db6d708f..806a838207a 100644 --- a/apps/docs/pages/guides/auth/auth-workos.mdx +++ b/apps/docs/pages/guides/auth/auth-workos.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-workos -title: 'Login with WorkOS' -description: Add WorkOS OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-workos', + title: 'Login with WorkOS', + description: 'Add WorkOS OAuth to your Supabase project', +} To enable WorkOS Auth for your project, you need to set up WorkOS OAuth application and add the application credentials to your Supabase Dashboard. @@ -90,3 +87,7 @@ async function signout() { ## Resources - [WorkOS Documentation](https://workos.com/docs/sso/guide) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/auth-zoom.mdx b/apps/docs/pages/guides/auth/auth-zoom.mdx index f76d206fe76..13d9de860c5 100644 --- a/apps/docs/pages/guides/auth/auth-zoom.mdx +++ b/apps/docs/pages/guides/auth/auth-zoom.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-zoom -title: 'Login with Zoom' -description: Add Zoom OAuth to your Supabase project ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'auth-zoom', + title: 'Login with Zoom', + description: 'Add Zoom OAuth to your Supabase project', +} To enable Zoom Auth for your project, you need to set up a Zoom OAuth application and add the application credentials to your Supabase Dashboard. @@ -97,3 +94,7 @@ async function signout() { - [Supabase Account - Free Tier OK](https://supabase.com) - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Zoom App Marketplace](https://marketplace.zoom.us/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/managing-user-data.mdx b/apps/docs/pages/guides/auth/managing-user-data.mdx index 51106df49ae..da30e0bb329 100644 --- a/apps/docs/pages/guides/auth/managing-user-data.mdx +++ b/apps/docs/pages/guides/auth/managing-user-data.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: managing-user-data -title: Managing User Data -description: Securing your user data with Row Level Security. ---- + id: 'managing-user-data', + title: 'Managing User Data', + description: 'Securing your user data with Row Level Security.', +} For security purposes, the `auth` schema is not exposed on the auto-generated API. @@ -105,3 +105,7 @@ create trigger on_auth_user_created after insert on auth.users for each row execute procedure public.handle_new_user(); ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/row-level-security.mdx b/apps/docs/pages/guides/auth/row-level-security.mdx index e54fd669a64..eca412cd214 100644 --- a/apps/docs/pages/guides/auth/row-level-security.mdx +++ b/apps/docs/pages/guides/auth/row-level-security.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: row-level-security -title: Row Level Security -description: Secure your data using Postgres Row Level Security. ---- + id: 'row-level-security', + title: 'Row Level Security', + description: 'Secure your data using Postgres Row Level Security.', +} When you need granular authorization rules, nothing beats PostgreSQL's [Row Level Security (RLS)](https://www.postgresql.org/docs/current/ddl-rowsecurity.html). @@ -365,3 +365,7 @@ Deprecated. Use `auth.jwt() ->> 'email'` instead. Returns the email of the user making the request. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/auth/server-side-rendering.mdx b/apps/docs/pages/guides/auth/server-side-rendering.mdx index e154309bf5c..e11d61cafc8 100644 --- a/apps/docs/pages/guides/auth/server-side-rendering.mdx +++ b/apps/docs/pages/guides/auth/server-side-rendering.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: server-side-rendering -title: Server-Side Rendering -description: Render pages with user information on the server. ---- + id: 'server-side-rendering', + title: 'Server-Side Rendering', + description: 'Render pages with user information on the server.', +} Single-page apps with server-side rendering (SSR) is a popular way to optimize rendering performance and leverage advanced caching strategies. @@ -207,3 +207,7 @@ data belonging to different users! Also be sure you set proper cache control headers. We recommend invalidating cache keys every hour or less. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/cli.mdx b/apps/docs/pages/guides/cli.mdx index db50c4e50fe..ef861654950 100644 --- a/apps/docs/pages/guides/cli.mdx +++ b/apps/docs/pages/guides/cli.mdx @@ -1,12 +1,13 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: cli -title: Supabase CLI -description: The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform. -sidebar_label: Overview -toc_max_heading_level: 2 ---- + id: 'cli', + title: 'Supabase CLI', + description: + 'The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform.', + sidebar_label: 'Overview', + toc_max_heading_level: 2, +} The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform. You can also use the CLI to manage your Supabase projects, handle database migrations and CI/CD workflows, and generate types directly from your database schema. @@ -115,3 +116,7 @@ brew upgrade supabase - [Supabase CLI Reference](/docs/reference/cli/usage) - [Local Development](/docs/guides/cli/local-development) - [Managing Environments](/docs/guides/cli/managing-environments) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/cli/local-development.mdx b/apps/docs/pages/guides/cli/local-development.mdx index 23ebadee78f..d14f5eb58ff 100644 --- a/apps/docs/pages/guides/cli/local-development.mdx +++ b/apps/docs/pages/guides/cli/local-development.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: local-development -title: Local Development -description: How to use Supabase on your local development machine. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'local-development', + title: 'Local Development', + description: 'How to use Supabase on your local development machine.', +} Learn how to use the Supabase CLI to develop your project locally and deploy to the Supabase Platform. @@ -240,3 +237,7 @@ The local development environment is not as feature-complete as the Supabase Pla ``` ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/cli/managing-environments.mdx b/apps/docs/pages/guides/cli/managing-environments.mdx index e5f078d50b2..238cc17609c 100644 --- a/apps/docs/pages/guides/cli/managing-environments.mdx +++ b/apps/docs/pages/guides/cli/managing-environments.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: managing-environments -title: Managing Environments -description: How to deploy Supabase schema changes with a CI / CD pipeline. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'managing-environments', + title: 'Managing Environments', + description: 'How to deploy Supabase schema changes with a CI / CD pipeline.', +} ## Overview @@ -417,3 +414,7 @@ supabase db reset In case [`reset`](/docs/reference/cli/usage#supabase-db-reset) fails, you can manually resolve conflicts by editing `_dev_A.sql` file. Once validated locally, commit your changes to Git and push to GitHub. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database.mdx b/apps/docs/pages/guides/database.mdx index 1ef69fc9bc9..d557ac7a79e 100644 --- a/apps/docs/pages/guides/database.mdx +++ b/apps/docs/pages/guides/database.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: database -title: Database -description: Use Supabase to manage your data. -sidebar_label: Overview ---- + id: 'database', + title: 'Database', + description: 'Use Supabase to manage your data.', + sidebar_label: 'Overview', +} Every Supabase project comes with a full [Postgres](https://www.postgresql.org/) database, a free and open source database which is considered one of the world's most stable and advanced databases. @@ -87,3 +87,7 @@ Read about resetting your database password [here](/docs/guides/database/managin - Read more about [Postgres](/docs/postgres/server/about) - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/arrays.mdx b/apps/docs/pages/guides/database/arrays.mdx index 7f5db6a7ab1..17595464aee 100644 --- a/apps/docs/pages/guides/database/arrays.mdx +++ b/apps/docs/pages/guides/database/arrays.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: arrays -title: 'Working With Arrays' -description: How to use arrays in PostgreSQL and the Supabase API. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'arrays', + title: 'Working With Arrays', + description: 'How to use arrays in PostgreSQL and the Supabase API.', +} PostgreSQL supports flexible [array types](https://www.postgresql.org/docs/12/arrays.html). These arrays are also supported in the Supabase Dashboard and in the JavaScript API. @@ -162,3 +159,7 @@ returns: - [Supabase JS Client](https://github.com/supabase/supabase-js) - [Supabase Account - Free Tier OK](https://supabase.com) - [PostgreSQL Arrays](https://www.postgresql.org/docs/12/arrays.html) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/connecting-to-postgres.mdx b/apps/docs/pages/guides/database/connecting-to-postgres.mdx index bcccabd6a33..13bade73e20 100644 --- a/apps/docs/pages/guides/database/connecting-to-postgres.mdx +++ b/apps/docs/pages/guides/database/connecting-to-postgres.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: connecting-to-postgres -title: 'Database Connections' -description: There are various ways to connect to your Postgres database. ---- + id: 'connecting-to-postgres', + title: 'Database Connections', + description: 'There are various ways to connect to your Postgres database.', +} Supabase provides several options for programmatically connecting to your Postgres database: @@ -135,3 +135,7 @@ psql "sslmode=verify-full sslrootcert=$HOME/Downloads/prod-ca-2021.cer host=db.a file-picker modal. Select the certificate you downloaded from your Supabase dashboard and save the server details. PgAdmin should now be able to connect to your Postgres via SSL. ![Add Connection Info.](/docs/img/guides/database/add-ssl-config.png) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/extensions.mdx b/apps/docs/pages/guides/database/extensions.mdx index b3dd9fc3646..a09ca6ca56e 100644 --- a/apps/docs/pages/guides/database/extensions.mdx +++ b/apps/docs/pages/guides/database/extensions.mdx @@ -1,14 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: extensions -title: Overview -description: Using Postgres extensions. ---- - -import ExtensionsComponent from '@site/src/components/Extensions' -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'extensions', + title: 'Overview', + description: 'Using Postgres extensions.', +} Extensions are exactly as they sound - they "extend" the database with functionality which isn't part of the Postgres core. Supabase has pre-installed some of the most useful open source extensions. @@ -58,4 +54,8 @@ Enabling some extensions with `create extension with schema ext Supabase is pre-configured with over 50 extensions. You can also install your own SQL extensions directly in the database through our SQL editor. - + + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/extensions/http.mdx b/apps/docs/pages/guides/database/extensions/http.mdx index bdcc83f2a2c..39d11b19c14 100644 --- a/apps/docs/pages/guides/database/extensions/http.mdx +++ b/apps/docs/pages/guides/database/extensions/http.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: http -title: 'http: RESTful Client' -description: An HTTP Client for PostgreSQL Functions. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'http', + title: 'http: RESTful Client', + description: 'An HTTP Client for PostgreSQL Functions.', +} The `http` extension allows you to call RESTful endpoints within Postgres. @@ -116,3 +113,7 @@ from ## Resources - Official [`http` GitHub Repository](https://github.com/pramsey/pgsql-http) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/extensions/pgcron.mdx b/apps/docs/pages/guides/database/extensions/pgcron.mdx index 6a182215bc6..57a704e444a 100644 --- a/apps/docs/pages/guides/database/extensions/pgcron.mdx +++ b/apps/docs/pages/guides/database/extensions/pgcron.mdx @@ -1,13 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: pgcron -title: 'pg_cron: Job Scheduling' -description: 'pgnet: a simple cron-based job scheduler for PostgreSQL that runs inside the database.' ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'pgcron', + title: 'pg_cron: Job Scheduling', + description: + 'pgnet: a simple cron-based job scheduler for PostgreSQL that runs inside the database.', +} The `pg_cron` extension is a simple cron-based job scheduler for PostgreSQL that runs inside the database. @@ -98,3 +96,7 @@ SELECT cron.unschedule('nightly-vacuum'); ## Resources - [pg_cron GitHub Repository](https://github.com/citusdata/pg_cron) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/extensions/pgnet.mdx b/apps/docs/pages/guides/database/extensions/pgnet.mdx index 8d478ba976b..e8290f6fa0a 100644 --- a/apps/docs/pages/guides/database/extensions/pgnet.mdx +++ b/apps/docs/pages/guides/database/extensions/pgnet.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: pgnet -title: 'pg_net: Async Networking' -description: 'pg_net: an async networking extension for PostgreSQL.' ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'pgnet', + title: 'pg_net: Async Networking', + description: 'pg_net: an async networking extension for PostgreSQL.', +} @@ -253,3 +250,7 @@ Possible values for `net.http_response_result.status` are `('PENDING', 'SUCCESS' - Source code: [github.com/supabase/pg_net](https://github.com/supabase/pg_net/) - Official Docs: [supabase.github.io/pg_net](https://supabase.github.io/pg_net/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/extensions/pgtap.mdx b/apps/docs/pages/guides/database/extensions/pgtap.mdx index cb86df169c2..fc642b522ab 100644 --- a/apps/docs/pages/guides/database/extensions/pgtap.mdx +++ b/apps/docs/pages/guides/database/extensions/pgtap.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: pgtap -title: 'pgTAP: Unit Testing' -description: Unit testing in PostgreSQL. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'pgtap', + title: 'pgTAP: Unit Testing', + description: 'Unit testing in PostgreSQL.', +} `pgTAP` is a unit testing extension for PostgreSQL. @@ -158,3 +155,7 @@ API: ## Resources - Official [`pgTAP` documentation](https://pgtap.org/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/extensions/plv8.mdx b/apps/docs/pages/guides/database/extensions/plv8.mdx index 1d6f3fdbfd2..eb408b2c30f 100644 --- a/apps/docs/pages/guides/database/extensions/plv8.mdx +++ b/apps/docs/pages/guides/database/extensions/plv8.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: plv8 -title: 'plv8: JavaScript Language' -description: JavaScript language for PostgreSQL. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'plv8', + title: 'plv8: JavaScript Language', + description: 'JavaScript language for PostgreSQL.', +} The `plv8` extension allows you use JavaScript within Postgres. @@ -144,3 +141,7 @@ $$ language plv8; - Official [`plv8` documentation](https://plv8.github.io/) - [plv8 GitHub Repository](https://github.com/plv8/plv8) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/extensions/uuid-ossp.mdx b/apps/docs/pages/guides/database/extensions/uuid-ossp.mdx index 766fd284b53..2731ae221a2 100644 --- a/apps/docs/pages/guides/database/extensions/uuid-ossp.mdx +++ b/apps/docs/pages/guides/database/extensions/uuid-ossp.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: uuid-ossp -title: 'uuid-ossp: Unique Identifiers' -description: A UUID generator for PostgreSQL. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'uuid-ossp', + title: 'uuid-ossp: Unique Identifiers', + description: 'A UUID generator for PostgreSQL.', +} The `uuid-ossp` extension can be used to generate a `UUID`. @@ -65,9 +62,10 @@ Once the extension is enabled, you now have access to a `uuid` type. Creates a UUID value based on the combination of computer’s MAC address, current timestamp, and a random value. -:::note -UUIDv1 leaks identifiable details, which might make it unsuitable for certain security-sensitive applications. -::: + + UUIDv1 leaks identifiable details, which might make it unsuitable for certain security-sensitive + applications. + ### `uuid_generate_v4()` @@ -99,3 +97,7 @@ create table contacts ( - [Choosing a Postgres Primary Key](https://supabase.com/blog/choosing-a-postgres-primary-key) - [The Basics Of PostgreSQL `UUID` Data Type](https://www.postgresqltutorial.com/postgresql-uuid/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/full-text-search.mdx b/apps/docs/pages/guides/database/full-text-search.mdx index c2347436985..bf25e78a453 100644 --- a/apps/docs/pages/guides/database/full-text-search.mdx +++ b/apps/docs/pages/guides/database/full-text-search.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: full-text-search -title: 'Full Text Search' -description: How to use full text search in PostgreSQL. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'full-text-search', + title: 'Full Text Search', + description: 'How to use full text search in PostgreSQL.', +} Postgres has built-in functions to handle `Full Text Search` queries. This is like a "search engine" within Postgres. @@ -590,3 +587,7 @@ final result = await client ## Resources - [PostgreSQL: Text Search Functions and Operators](https://www.postgresql.org/docs/12/functions-textsearch.html) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/functions.mdx b/apps/docs/pages/guides/database/functions.mdx index 467d653b535..0204ef78eac 100644 --- a/apps/docs/pages/guides/database/functions.mdx +++ b/apps/docs/pages/guides/database/functions.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: functions -title: Database Functions -description: Creating and using Postgres functions. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'functions', + title: 'Database Functions', + description: 'Creating and using Postgres functions.', +} Postgres has built-in support for [SQL functions](https://www.postgresql.org/docs/current/sql-createfunction.html). These functions live inside your database, and they can be [used with the API](../../reference/javascript/rpc). @@ -346,3 +343,7 @@ GRANT EXECUTE ON FUNCTION hello_world TO service_role; allowFullScreen > + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/json.mdx b/apps/docs/pages/guides/database/json.mdx index e5615c92d62..c78fbb8475b 100644 --- a/apps/docs/pages/guides/database/json.mdx +++ b/apps/docs/pages/guides/database/json.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: json -title: 'JSON' -description: Using the JSON data type in PostgreSQL. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'json', + title: 'JSON', + description: 'Using the JSON data type in PostgreSQL.', +} PostgreSQL supports [JSON functions and operators](https://www.postgresql.org/docs/current/functions-json.html) which gives flexibility when storing data inside a database column. @@ -268,3 +265,7 @@ Note that the `->` operator returns JSONB data. If you want TEXT/STRING data ret - [Supabase JS Client](https://github.com/supabase/supabase-js) - [PostgreSQL: JSON Functions and Operators](https://www.postgresql.org/docs/12/functions-json.html) - [PostgreSQL JSON types](https://www.postgresql.org/docs/12/datatype-json.html) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/managing-passwords.mdx b/apps/docs/pages/guides/database/managing-passwords.mdx index b87e2e274ee..79e51176195 100644 --- a/apps/docs/pages/guides/database/managing-passwords.mdx +++ b/apps/docs/pages/guides/database/managing-passwords.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: managing-passwords -title: 'Passwords' -description: How to change your PostgreSQL database password. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'managing-passwords', + title: 'Passwords', + description: 'How to change your PostgreSQL database password.', +} Your PostgreSQL database is the core of your Supabase project, so it's important that it has a strong, secure password at all times. @@ -30,3 +27,7 @@ It's absolutely critical that you store your customers' data safely. Here are so ## Resources - [PostgreSQL `ALTER USER` Documentation](https://www.postgresql.org/docs/12/sql-alteruser.html) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/managing-timezones.mdx b/apps/docs/pages/guides/database/managing-timezones.mdx index 96a9d5be05a..fdafda70537 100644 --- a/apps/docs/pages/guides/database/managing-timezones.mdx +++ b/apps/docs/pages/guides/database/managing-timezones.mdx @@ -1,14 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: managing-timezones -title: 'Timezones' -slug: managing-timezones -description: How to change your database timezone. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'managing-timezones', + title: 'Timezones', + slug: 'managing-timezones', + description: 'How to change your database timezone.', +} Every Supabase database is set to UTC timezone by default. We strongly recommend keeping it this way, even if your users are in a different location. This is because it makes it much easier to calculate differences between timezones if you adopt the mental model that "everything in my database is in UTC time". @@ -77,3 +74,7 @@ where name ilike '%york%'; + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/replication.mdx b/apps/docs/pages/guides/database/replication.mdx index d2c442c36a8..e7c349ca91f 100644 --- a/apps/docs/pages/guides/database/replication.mdx +++ b/apps/docs/pages/guides/database/replication.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: replication -title: 'Replication' -slug: replication ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'replication', + title: 'Replication', + slug: 'replication', +} Replication is a technique for copying the data from one database to another. Supabase uses replication functionality to provide a real-time API. Replication is useful for: @@ -93,3 +90,7 @@ begin; create publication publication_name; commit; ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/sql-to-api.mdx b/apps/docs/pages/guides/database/sql-to-api.mdx index 35e2db2059e..e26756c7b44 100644 --- a/apps/docs/pages/guides/database/sql-to-api.mdx +++ b/apps/docs/pages/guides/database/sql-to-api.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: sql-to-api -title: 'Converting SQL to JavaScript API' -description: Implementing common SQL patterns in the JavaScript API ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'sql-to-api', + title: 'Converting SQL to JavaScript API', + description: 'Implementing common SQL patterns in the JavaScript API', +} @@ -83,3 +80,7 @@ const { data, error } = await supabase - [Supabase API: JavaScript select](/docs/reference/javascript/select) - [Supabase API: JavaScript modifiers](/docs/reference/javascript/using-modifiers) - [Supabase API: JavaScript filters](/docs/reference/javascript/using-filters) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/tables.mdx b/apps/docs/pages/guides/database/tables.mdx index 5f69c8e3feb..010b104a2a4 100644 --- a/apps/docs/pages/guides/database/tables.mdx +++ b/apps/docs/pages/guides/database/tables.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: tables -title: Tables and Data -description: Creating and using Postgres tables. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'tables', + title: 'Tables and Data', + description: 'Creating and using Postgres tables.', +} Tables are where you store your data. @@ -506,3 +503,7 @@ Creating a materialized view is not a solution to inefficient queries. You shoul - [PostgreSQL Tutorial: Create tables](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-create-table/) - [PostgreSQL Tutorial: Add column](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-add-column/) - [PostgreSQL Tutorial: Views](https://www.postgresqltutorial.com/postgresql-views/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/testing.mdx b/apps/docs/pages/guides/database/testing.mdx index bcd7a55852e..1ff2d912d66 100644 --- a/apps/docs/pages/guides/database/testing.mdx +++ b/apps/docs/pages/guides/database/testing.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: testing -title: Testing Your Database -description: Test your database schema, tables, functions, and policies. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'testing', + title: 'Testing Your Database', + description: 'Test your database schema, tables, functions, and policies.', +} You can use the Supabase CLI to test your database. The minimum required version of the CLI is [v1.11.4](https://github.com/supabase/cli/releases). To get started: @@ -70,3 +67,7 @@ Result: PASS - [pgTAP extension](/docs/guides/database/extensions/pgtap) - Official [pgTAP documentation](https://pgtap.org/) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/timeouts.mdx b/apps/docs/pages/guides/database/timeouts.mdx index f3bef4791d5..3afd0fe513a 100644 --- a/apps/docs/pages/guides/database/timeouts.mdx +++ b/apps/docs/pages/guides/database/timeouts.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: timeouts -title: Timeouts -description: Timeouts and optimization ---- + id: 'timeouts', + title: 'Timeouts', + description: 'Timeouts and optimization', +} By default, Supabase limits the maximum statement execution time to _3 seconds_ for users accessing the API using the anon key, and _8 seconds_ for authenticated users. Additionally, all users are subject to a global limit of _2 minutes_. This serves as a backstop against resource exhaustion due to either poorly written queries, or abusive usage. @@ -27,3 +27,7 @@ set statement_timeout to 60000; -- 1 minute in milliseconds All Supabase projects come with the [`pg_stat_statements`](https://www.postgresql.org/docs/current/pgstatstatements.html) extension installed, which tracks planning and execution statistics for all statements executed against it. These statistics can be used in order to diagnose the performance of your project. This data can further be used in conjunction with the [`explain`](https://www.postgresql.org/docs/current/using-explain.html) functionality of Postgres to optimize your usage. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/database/webhooks.mdx b/apps/docs/pages/guides/database/webhooks.mdx index b7219ba761e..ebbe58ade3d 100644 --- a/apps/docs/pages/guides/database/webhooks.mdx +++ b/apps/docs/pages/guides/database/webhooks.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: webhooks -title: 'Database Webhooks' -description: Trigger external payloads on database events. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'webhooks', + title: 'Database Webhooks', + description: 'Trigger external payloads on database events.', +} Database Webhooks allow you to send real-time data from your database to another system whenever a table event occurs. @@ -73,3 +70,7 @@ type DeletePayload = { ## Resources - [pg_net](/docs/guides/database/extensions/pgnet): an async networking extension for PostgreSQL + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/examples.mdx b/apps/docs/pages/guides/examples.mdx index 7d496926120..16d7c3416e6 100644 --- a/apps/docs/pages/guides/examples.mdx +++ b/apps/docs/pages/guides/examples.mdx @@ -155,3 +155,7 @@ Build a basic Todo List with Supabase and your favorite frontend framework: - [Heavy Bit](https://www.heavybit.com/library/podcasts/jamstack-radio/ep-71-open-source-firebase-alternative-with-paul-copplestone-of-supabase/) - [Log Rocket](https://podrocket.logrocket.com/9) - [FS Jam](https://fsjam.org/episodes/episode-33-supabase-with-paul-copplestone) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/functions.mdx b/apps/docs/pages/guides/functions.mdx index 2c24c690a38..dc9d680ec67 100644 --- a/apps/docs/pages/guides/functions.mdx +++ b/apps/docs/pages/guides/functions.mdx @@ -1,14 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: functions -title: Edge Functions -description: 'Globally distributed TypeScript functions.' -sidebar_label: Overview ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'functions', + title: 'Edge Functions', + description: 'Globally distributed TypeScript functions.', + sidebar_label: 'Overview', +} Edge Functions are server-side TypeScript functions, distributed globally at the edge—close to your users. They can be used for listening to webhooks or integrating your Supabase project with third-parties [like Stripe](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/stripe-webhooks). @@ -277,3 +274,7 @@ Edge Functions supports `GET`, `POST`, `PUT`, `PATCH`, `DELETE`, and `OPTIONS`. - Edge Functions - Local development - only one function at a time - Serving of HTML content is not supported (`GET` requests that return `text/html` will be rewritten to `text/plain`). + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/functions/auth.mdx b/apps/docs/pages/guides/functions/auth.mdx index 515dfbf7b7a..2a611f8c3b9 100644 --- a/apps/docs/pages/guides/functions/auth.mdx +++ b/apps/docs/pages/guides/functions/auth.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth -title: Auth -description: Supabase Edge Functions and Auth. ---- + id: 'auth', + title: 'Auth', + description: 'Supabase Edge Functions and Auth.', +} Edge Functions work seamlessly with [Supabase Auth](/docs/guides/auth), allowing you to identify which user called your function. @@ -58,3 +58,7 @@ serve(async (req: Request) => { ``` See the [example on GitHub](https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts). + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/functions/cicd-workflow.mdx b/apps/docs/pages/guides/functions/cicd-workflow.mdx index 8c6934133a7..e902f140370 100644 --- a/apps/docs/pages/guides/functions/cicd-workflow.mdx +++ b/apps/docs/pages/guides/functions/cicd-workflow.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: cicd-workflow -title: CI / CD Workflow -description: How to deploy Supabase Edge Functions with a CI / CD pipeline. ---- + id: 'cicd-workflow', + title: 'CI / CD Workflow', + description: 'How to deploy Supabase Edge Functions with a CI / CD pipeline.', +} As described in the Supabase CLI [Environments Guide](/docs/guides/cli/managing-environments), you can use the [`setup-cli` GitHub Action](https://github.com/marketplace/actions/supabase-cli-action) to run Supabase CLI commands in your GitHub Actions, for example to deploy a Supabase Edge Function: @@ -36,3 +36,7 @@ jobs: ``` See the [example on GitHub](https://github.com/supabase/supabase/blob/master/examples/edge-functions/.github/workflows/deploy.yaml). + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/functions/examples.mdx b/apps/docs/pages/guides/functions/examples.mdx index a6170398115..66e499356a3 100644 --- a/apps/docs/pages/guides/functions/examples.mdx +++ b/apps/docs/pages/guides/functions/examples.mdx @@ -1,13 +1,17 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: examples -title: Examples -description: Useful Supabase Edge Functions Examples ---- + id: 'examples', + title: 'Examples', + description: 'Useful Supabase Edge Functions Examples', +} You can find a list of useful [Edge Function Examples](https://github.com/supabase/supabase/tree/master/examples/edge-functions) in our GitHub repository.
+ +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/hosting/platform.mdx b/apps/docs/pages/guides/hosting/platform.mdx index 0a46248499a..a713064e779 100644 --- a/apps/docs/pages/guides/hosting/platform.mdx +++ b/apps/docs/pages/guides/hosting/platform.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: platform -title: Supabase Platform -description: Getting started with the Supabase Platform. -sidebar_label: Overview ---- + id: 'platform', + title: 'Supabase Platform', + description: 'Getting started with the Supabase Platform.', + sidebar_label: 'Overview', +} Supabase is a hosted platform which makes it very simple to get started without needing to manage any infrastructure. @@ -80,3 +80,7 @@ If Supabase experiences outages, we keep you as informed as possible, as early a - Slack Alerts: You can receive updates via the RSS feed, using Slack's [built-in RSS functionality](https://slack.com/help/articles/218688467-Add-RSS-feeds-to-Slack)
`/feed subscribe https://status.supabase.com/history.atom` Make sure to review our [SLA](/docs/company/sla) for details on our commitment to Platform Stability. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/migrations/firebase-auth.mdx b/apps/docs/pages/guides/migrations/firebase-auth.mdx index 0e17ae782ae..b6ca07e215d 100644 --- a/apps/docs/pages/guides/migrations/firebase-auth.mdx +++ b/apps/docs/pages/guides/migrations/firebase-auth.mdx @@ -7,9 +7,6 @@ description: 'Migrate Firebase auth users to a Supabase project.' sidebar_label: Firebase Auth --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - Supabase provides several [tools](https://github.com/supabase-community/firebase-to-supabase/tree/main/auth) to help migrate auth users from a Firebase project to a Supabase project. There are two parts to the migration process: - `firestoreusers2json` ([TypeScript](https://github.com/supabase-community/firebase-to-supabase/blob/main/auth/firestoreusers2json.ts), [JavaScript](https://github.com/supabase-community/firebase-to-supabase/blob/main/auth/firestoreusers2json.js)) exports users from an existing Firebase project to a `.json` file on your local system. diff --git a/apps/docs/pages/guides/platform/custom-domains.mdx b/apps/docs/pages/guides/platform/custom-domains.mdx index 60f1b607acd..36565487f59 100644 --- a/apps/docs/pages/guides/platform/custom-domains.mdx +++ b/apps/docs/pages/guides/platform/custom-domains.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: custom-domains -title: Custom Domains -description: Configuring a Custom Domain for your Supabase project. ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'custom-domains', + title: 'Custom Domains', + description: 'Configuring a Custom Domain for your Supabase project.', +} @@ -28,7 +25,7 @@ To get started: This example assumes your Supabase project is `foobar` with a corresponding API URL `foobarbaz.supabase.co` and configures a custom domain at `api.example.com`. -###
Configure a CNAME +### Configure a CNAME Set up a CNAME record for `api.example.com`, resolving to `foobarbaz.supabase.co.`, with as low a TTL as possible. @@ -91,3 +88,7 @@ As with the final activation stage of the process for setting up a custom domain ## Limitations Edge functions do not honor the custom domain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 318918e8d62..2a4f1def28e 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: database-usage -title: Database usage -description: Understanding how database usage applies to your subscription. ---- + id: 'database-usage', + title: 'Database usage', + description: 'Understanding how database usage applies to your subscription.', +} Database storage refers to the _monthly average storage usage_, as reported by Postgres. This metric is reported in your project's [billing usage](https://app.supabase.com/project/_/settings/billing/usage) and is updated daily. @@ -57,3 +57,7 @@ However, it can be necessary to either [fine-tune](https://www.percona.com/blog/ the [autovacuum parameters](https://www.enterprisedb.com/blog/postgresql-vacuum-and-analyze-best-practice-tips), or [manually initiate](https://www.postgresql.org/docs/current/sql-vacuum.html) vacuum operations. For example, running a manual vacuum after deleting large amounts of data from your DB could help reduce the reported disk usage by Postgres. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/platform/going-into-prod.mdx b/apps/docs/pages/guides/platform/going-into-prod.mdx index ff4b1cc62fd..cfb579ce518 100644 --- a/apps/docs/pages/guides/platform/going-into-prod.mdx +++ b/apps/docs/pages/guides/platform/going-into-prod.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: going-into-prod -title: 'Production Readiness' -description: 'Things to do before making your app publicly available' ---- + id: 'going-into-prod', + title: 'Production Readiness', + description: 'Things to do before making your app publicly available', +} After developing your project and deciding it's Production Ready, you should run through this checklist to ensure that your project: @@ -57,3 +57,7 @@ After developing your project and deciding it's Production Ready, you should run ## Next steps This checklist is always growing so be sure to check back frequently, and also feel free to suggest additions and amendments by making a PR on [GitHub](https://github.com/supabase/supabase). + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/platform/logs.mdx b/apps/docs/pages/guides/platform/logs.mdx index da1778a6315..268f78240c8 100644 --- a/apps/docs/pages/guides/platform/logs.mdx +++ b/apps/docs/pages/guides/platform/logs.mdx @@ -1,14 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: logs -title: Logging -description: Getting started with Supabase Platform Log Browser ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' -import ThemedImage from '@theme/ThemedImage' + id: 'logs', + title: 'Logging', + description: 'Getting started with Supabase Platform Log Browser', +} The Supabase Platform includes a Logs Explorer that allows log tracing and debugging. Log retention is based on your [project's pricing plan](https://supabase.com/pricing). @@ -162,14 +158,7 @@ The resulting `metadata` key is rendered as an array of objects in the Logs Expl - +![Without Unnesting](/docs/img/unnesting-none.png) Perform a `cross join unnest()` to work with the keys nested in the `metadata` key. @@ -184,15 +173,7 @@ cross join unnest(request.headers) as header ``` This surfaces the following columns available for selection: - - +![With Two Level Unnesting](/docs/img/unnesting-2.png) This allows you to select the `method` and `cf_ipcountry` columns. In JS dot notation, the full paths for each selected column are: @@ -246,3 +227,7 @@ from edge_logs cross join unnest(r.headers) AS h where h.x_real_ip is not null and r.method = "GET" ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/platform/metrics.mdx b/apps/docs/pages/guides/platform/metrics.mdx index d8d64974adc..5f5bb6e1e90 100644 --- a/apps/docs/pages/guides/platform/metrics.mdx +++ b/apps/docs/pages/guides/platform/metrics.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: metrics -title: Metrics -description: Observability for your Supabase project ---- + id: 'metrics', + title: 'Metrics', + description: 'Observability for your Supabase project', +} In addition to the reports and charts built in to the Supabase dashboard, each project hosted on the Supabase platform comes with a [Prometheus](https://prometheus.io/)-compatible metrics endpoint, which can be used to gather insight into the health and status of your project. @@ -31,3 +31,7 @@ Your project's metrics endpoint is accessible at `https://.supabase ``` Additionally, we [maintain a guide](https://github.com/supabase/grafana-agent-fly-example/) on quickly setting up a scraping agent to work with Grafana Cloud. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx b/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx index ca2e3313e1a..a82793c9559 100644 --- a/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx +++ b/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: migrating-and-upgrading-projects -title: 'Migrating and Upgrading Projects' -description: Upgrade your project to the latest version of Supabase. -sidebar_label: 'Migrating and upgrading' ---- + id: 'migrating-and-upgrading-projects', + title: 'Migrating and Upgrading Projects', + description: 'Upgrade your project to the latest version of Supabase.', + sidebar_label: 'Migrating and upgrading', +} Supabase ships fast and we endeavor to add all new features to existing projects wherever possible. In some cases, access to new features require upgrading or migrating your Supabase project. @@ -118,3 +118,7 @@ const NEW_PROJECT_SERVICE_KEY = 'new-project-service-key-yyy' } })() ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index 3108e23c253..8d7ae48e422 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: performance -title: Performance Tuning -description: Getting the best results out of your Supabase project ---- + id: 'performance', + title: 'Performance Tuning', + description: 'Getting the best results out of your Supabase project', +} The Supabase platform automatically optimizes your Postgres database to take advantage of the compute resources of the tier your project is on. However, these optimizations are based on assumptions about the type of workflow the project is being utilized for, and it is likely that better results can be obtained by tuning the database for your particular workflow. @@ -90,3 +90,7 @@ Using the query plan analyzer to optimize your queries is a large topic, with a - [Enterprise DB.](https://www.enterprisedb.com/blog/postgresql-query-optimization-performance-tuning-with-explain-analyze) You can pair the information available from `pg_stat_statements` with the detailed system metrics available [via your metrics endpoint](../platform/metrics) to better understand the behavior of your DB and the queries you're executing against it. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/platform/permissions.mdx b/apps/docs/pages/guides/platform/permissions.mdx index fbc390817fe..1efb9f3228c 100644 --- a/apps/docs/pages/guides/platform/permissions.mdx +++ b/apps/docs/pages/guides/platform/permissions.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: permissions -title: Permissions -description: Permissions requirements for the Supabase Cloud hosting environment ---- + id: 'permissions', + title: 'Permissions', + description: 'Permissions requirements for the Supabase Cloud hosting environment', +} The Supabase platform offers additional services (e.g. Storage) on top of the Postgres database that comes with each project. These services default to storing their operational data within your database, to ensure that you retain complete control over it. @@ -14,3 +14,7 @@ However, these services assume a base level of access to their data, in order to - all entitites under the `auth` schema are owned by `supabase_auth_admin` It is possible for violations of these assumptions to not cause an immediate outage, but take effect at a later time when a newer migration becomes available. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/realtime.mdx b/apps/docs/pages/guides/realtime.mdx index 1bcf72eae99..f2142bc69dd 100644 --- a/apps/docs/pages/guides/realtime.mdx +++ b/apps/docs/pages/guides/realtime.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: realtime -title: Realtime -description: Supabase Realtime with Broadcast, Presence, and Postgres CDC. -sidebar_label: Overview ---- + id: 'realtime', + title: 'Realtime', + description: 'Supabase Realtime with Broadcast, Presence, and Postgres CDC.', + sidebar_label: 'Overview', +} Supabase provides a globally distributed cluster of [Realtime](https://github.com/supabase/realtime) servers that enable the following functionality: @@ -51,3 +51,7 @@ We strongly encourage you to enable RLS on your database tables and have RLS pol - [Realtime quickstart](/docs/guides/realtime/quickstart) - [Realtime: Multiplayer Edition](https://supabase.com/blog/supabase-realtime-multiplayer-general-availability) blog post + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/realtime/postgres-cdc.mdx b/apps/docs/pages/guides/realtime/postgres-cdc.mdx index 520463923f7..c8d20133f3a 100644 --- a/apps/docs/pages/guides/realtime/postgres-cdc.mdx +++ b/apps/docs/pages/guides/realtime/postgres-cdc.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: postgres-cdc -title: Postgres CDC -description: Getting started with Realtime's Postgres CDC feature ---- + id: 'postgres-cdc', + title: 'Postgres CDC', + description: "Getting started with Realtime's Postgres CDC feature", +} Realtime's Postgres Change Data Capture (CDC) feature listens for database changes and sends them to clients. Clients are required to subscribe with a JWT dictating which changes they are allowed to receive based on the database's [Row Level Security](/docs/guides/auth/row-level-security). @@ -117,3 +117,7 @@ const channel = supabase ) .subscribe() ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/realtime/quickstart.mdx b/apps/docs/pages/guides/realtime/quickstart.mdx index 4c833c74b4c..02bc5b9177b 100644 --- a/apps/docs/pages/guides/realtime/quickstart.mdx +++ b/apps/docs/pages/guides/realtime/quickstart.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: quickstart -title: Realtime Quickstart -description: Getting started with Realtime's Features -sidebar_label: Quickstart ---- + id: 'quickstart', + title: 'Realtime Quickstart', + description: "Getting started with Realtime's Features", + sidebar_label: 'Quickstart', +} Learn how to build [multiplayer.dev](https://multiplayer.dev), a collaborative app that demonstrates Broadcast, Presence, and Postgres CDC using [Realtime](/docs/guides/realtime). @@ -258,3 +258,7 @@ channel.subscribe(async (status) => { } }) ``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/realtime/rate-limits.mdx b/apps/docs/pages/guides/realtime/rate-limits.mdx index 3c4fdf2aaa8..f1673752944 100644 --- a/apps/docs/pages/guides/realtime/rate-limits.mdx +++ b/apps/docs/pages/guides/realtime/rate-limits.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: rate-limits -title: Realtime Rate Limits -description: Understanding Realtime rate limiting -sidebar_label: Rate Limits ---- + id: 'rate-limits', + title: 'Realtime Rate Limits', + description: 'Understanding Realtime rate limiting', + sidebar_label: 'Rate Limits', +} Supabase Realtime is a global cluster. We've implemented some rate limits to help ensure high availability for all customers. @@ -78,3 +78,7 @@ The following limits apply to Presence messages: - 10 keys per object - Message rate limit is 10% of your Realtime message rate limit + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/storage-cdn.mdx b/apps/docs/pages/guides/storage-cdn.mdx index b09d8cd97bb..4c11ca8fe64 100644 --- a/apps/docs/pages/guides/storage-cdn.mdx +++ b/apps/docs/pages/guides/storage-cdn.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: storage-cdn -title: Storage CDN -description: How Supabase Storage caches objects with a CDN -sidebar_label: CDN ---- + id: 'storage-cdn', + title: 'Storage CDN', + description: 'How Supabase Storage caches objects with a CDN', + sidebar_label: 'CDN', +} ## CDN basics @@ -34,3 +34,7 @@ The cache status of a particular request is sent in the `cf-cache-status` header ## Public vs Private Buckets Objects in public buckets do not require any Authorization to access objects. This leads to a better cache hit rate compared to private buckets. For private buckets, permissions for accessing each object is checked on a per user level. For example, if two different users access the same object in a private bucket from the same region, it results in a cache miss for both the users since they might have different security policies attached to them. On the other hand, if two different users access the same object in a public bucket from the same region, it results in a cache hit for the second user. + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/storage.mdx b/apps/docs/pages/guides/storage.mdx index 5a98f2ac539..92d1cf93cf5 100644 --- a/apps/docs/pages/guides/storage.mdx +++ b/apps/docs/pages/guides/storage.mdx @@ -1,14 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: storage -title: Storage -description: Use Supabase to store and serve files. -sidebar_label: Overview ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'storage', + title: 'Storage', + description: 'Use Supabase to store and serve files.', + sidebar_label: 'Overview', +} Supabase Storage makes it simple to store and serve large files. @@ -371,3 +368,7 @@ using ( auth.uid() = owner ); - [Swagger API documentation](https://supabase.github.io/storage-api) - Official [JavaScript](/docs/reference/javascript/storage-createbucket) and [Dart](/docs/reference/dart/storage-createbucket) documentation - [Community libraries](https://github.com/supabase-community) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/storage/storage-sample.mdx b/apps/docs/pages/guides/storage/storage-sample.mdx index 3f6ca0ca10f..0c0e277b3fc 100644 --- a/apps/docs/pages/guides/storage/storage-sample.mdx +++ b/apps/docs/pages/guides/storage/storage-sample.mdx @@ -1,13 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: storage-sample -title: 'Storage Sample Doc' -description: Storage Sample Doc ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'storage-sample', + title: 'Storage Sample Doc', + description: 'Storage Sample Doc', +} ## Description diff --git a/apps/docs/pages/guides/with-flutter.mdx b/apps/docs/pages/guides/with-flutter.mdx index 5e6ce06749c..dab40d95197 100644 --- a/apps/docs/pages/guides/with-flutter.mdx +++ b/apps/docs/pages/guides/with-flutter.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-flutter -title: 'Quickstart: Flutter' -description: Learn how to use Supabase in your Flutter App. -sidebar_label: Flutter ---- + id: 'with-flutter', + title: 'Quickstart: Flutter', + description: 'Learn how to use Supabase in your Flutter App.', + sidebar_label: 'Flutter', +} @@ -794,3 +794,7 @@ Congratulations, that is it! You have now built a fully functional user manageme ## See also - [Flutter Tutorial: building a Flutter chat app](https://supabase.com/blog/flutter-tutorial-building-a-chat-app) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-ionic-angular.mdx b/apps/docs/pages/guides/with-ionic-angular.mdx index 7e212e26b1b..88c1d9e6433 100644 --- a/apps/docs/pages/guides/with-ionic-angular.mdx +++ b/apps/docs/pages/guides/with-ionic-angular.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-ionic-angular -title: 'Quickstart: Ionic Angular' -description: Learn how to use Supabase in your Ionic Angular App. -sidebar_label: Ionic Angular ---- + id: 'with-ionic-angular', + title: 'Quickstart: Ionic Angular', + description: 'Learn how to use Supabase in your Ionic Angular App.', + sidebar_label: 'Ionic Angular', +} @@ -532,3 +532,7 @@ At this stage you have a fully functional application! ## Resources - [Authentication in Ionic Angular with Supabase](https://supabase.com/blog/authentication-in-ionic-angular) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-ionic-react.mdx b/apps/docs/pages/guides/with-ionic-react.mdx index 3ea0eafc24b..c14bb343ed3 100644 --- a/apps/docs/pages/guides/with-ionic-react.mdx +++ b/apps/docs/pages/guides/with-ionic-react.mdx @@ -1,11 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-ionic-react -title: 'Quickstart: Ionic React' -description: Learn how to use Supabase in your Ionic React App. -sidebar_label: Ionic React ---- + id: 'with-ionic-react', + title: 'Quickstart: Ionic React', + description: 'Learn how to use Supabase in your Ionic React App.', + sidebar_label: 'Ionic React', +} @@ -501,3 +501,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-ionic-vue.mdx b/apps/docs/pages/guides/with-ionic-vue.mdx index 2152d710b7b..2d641caf862 100644 --- a/apps/docs/pages/guides/with-ionic-vue.mdx +++ b/apps/docs/pages/guides/with-ionic-vue.mdx @@ -1,14 +1,12 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-ionic-vue -title: 'Quickstart: Ionic Vue' -description: Learn how to use Supabase in your Ionic Vue App. -sidebar_label: Ionic Vue ---- + id: 'with-ionic-vue', + title: 'Quickstart: Ionic Vue', + description: 'Learn how to use Supabase in your Ionic Vue App.', + sidebar_label: 'Ionic Vue', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -566,3 +564,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-nextjs.mdx b/apps/docs/pages/guides/with-nextjs.mdx index 102e00d0d1b..b637a338f98 100644 --- a/apps/docs/pages/guides/with-nextjs.mdx +++ b/apps/docs/pages/guides/with-nextjs.mdx @@ -1,14 +1,13 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-nextjs -title: 'Quickstart: Next.js' -description: Learn how to use Supabase in your Next App. -sidebar_label: 'Next.js' ---- + id: 'with-nextjs', + title: 'Quickstart: Next.js', + description: 'Learn how to use Supabase in your Next App.', + sidebar_label: 'Next.js', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' +import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -736,3 +735,7 @@ At this stage you have a fully functional application! - See the [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments) template on GitHub. - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-nuxt-3.mdx b/apps/docs/pages/guides/with-nuxt-3.mdx index fdd94f60609..e48e70a1d07 100644 --- a/apps/docs/pages/guides/with-nuxt-3.mdx +++ b/apps/docs/pages/guides/with-nuxt-3.mdx @@ -1,14 +1,12 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-nuxt-3 -title: 'Quickstart: Nuxt 3' -description: Learn how to use Supabase in your Nuxt 3 App. -sidebar_label: Nuxt 3 ---- + id: 'with-nuxt-3', + title: 'Quickstart: Nuxt 3', + description: 'Learn how to use Supabase in your Nuxt 3 App.', + sidebar_label: 'Nuxt 3', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -431,3 +429,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/docs/guides/with-react.mdx b/apps/docs/pages/guides/with-react.mdx similarity index 96% rename from apps/docs/docs/guides/with-react.mdx rename to apps/docs/pages/guides/with-react.mdx index b9e29955093..fec5bedd3f0 100644 --- a/apps/docs/docs/guides/with-react.mdx +++ b/apps/docs/pages/guides/with-react.mdx @@ -1,12 +1,12 @@ ---- -id: with-react -title: 'Quickstart: React' -description: Learn how to use Supabase in your React App. -sidebar_label: React ---- +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'with-react', + title: 'Quickstart: React', + description: 'Learn how to use Supabase in your React App.', + sidebar_label: 'React', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -14,7 +14,7 @@ import ProjectSetup from '/components/MDX/project_setup.mdx' ![Supabase User Management example](/docs/img/user-management-demo.png) -### GitHub in old docs/guides dir +### GitHub Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/react-user-management). @@ -400,3 +400,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-react.mdx-----------rename b/apps/docs/pages/guides/with-react.mdx-----------rename deleted file mode 100644 index d7156570e9c..00000000000 --- a/apps/docs/pages/guides/with-react.mdx-----------rename +++ /dev/null @@ -1,404 +0,0 @@ -import Layout from '~/layouts/DefaultGuideLayout' - -export const meta = { -id: with-react -title: 'Quickstart: React' -description: Learn how to use Supabase in your React App. -sidebar_label: React ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' -import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' -import ProjectSetup from '/components/MDX/project_setup.mdx' - - - -![Supabase User Management example](/docs/img/user-management-demo.png) - -### GitHub - -Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/react-user-management). - - - -## Building the App - -Let's start building the React app from scratch. - -### Initialize a React app - -We can use [Create React App](https://create-react-app.dev/docs/getting-started/) to initialize -an app called `supabase-react`: - -```bash -npx create-react-app supabase-react -cd supabase-react -``` - -Then let's install the only additional dependency: [supabase-js](https://github.com/supabase/supabase-js). - -```bash -npm install @supabase/supabase-js -``` - -And finally we want to save the environment variables in a `.env`. -All we need are the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). - -```bash title=.env -REACT_APP_SUPABASE_URL=YOUR_SUPABASE_URL -REACT_APP_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY -``` - -Now that we have the API credentials in place, let's create a helper file to initialize the Supabase client. These variables will be exposed -on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. - -```js title=src/supabaseClient.js -import { createClient } from '@supabase/supabase-js' - -const supabaseUrl = process.env.REACT_APP_SUPABASE_URL -const supabaseAnonKey = process.env.REACT_APP_SUPABASE_ANON_KEY - -export const supabase = createClient(supabaseUrl, supabaseAnonKey) -``` - -And one optional step is to update the CSS file `src/index.css` to make the app look nice. -You can find the full contents of this file [here](https://raw.githubusercontent.com/supabase/supabase/master/examples/user-management/react-user-management/src/index.css). - -### Set up a Login component - -Let's set up a React component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords. - -```jsx title=src/Auth.js -import { useState } from 'react' -import { supabase } from './supabaseClient' - -export default function Auth() { - const [loading, setLoading] = useState(false) - const [email, setEmail] = useState('') - - const handleLogin = async (e) => { - e.preventDefault() - - try { - setLoading(true) - const { error } = await supabase.auth.signInWithOtp({ email }) - if (error) throw error - alert('Check your email for the login link!') - } catch (error) { - alert(error.error_description || error.message) - } finally { - setLoading(false) - } - } - - return ( -
-
-

Supabase + React

-

Sign in via magic link with your email below

- {loading ? ( - 'Sending magic link...' - ) : ( -
- - setEmail(e.target.value)} - /> - -
- )} -
-
- ) -} -``` - -### Account page - -After a user is signed in we can allow them to edit their profile details and manage their account. - -Let's create a new component for that called `Account.js`. - -```jsx title=src/Account.js -import { useState, useEffect } from 'react' -import { supabase } from './supabaseClient' - -const Account = ({ session }) => { - const [loading, setLoading] = useState(true) - const [username, setUsername] = useState(null) - const [website, setWebsite] = useState(null) - const [avatar_url, setAvatarUrl] = useState(null) - - useEffect(() => { - getProfile() - }, [session]) - - const getProfile = async () => { - try { - setLoading(true) - const { user } = session - - let { data, error, status } = await supabase - .from('profiles') - .select(`username, website, avatar_url`) - .eq('id', user.id) - .single() - - if (error && status !== 406) { - throw error - } - - if (data) { - setUsername(data.username) - setWebsite(data.website) - setAvatarUrl(data.avatar_url) - } - } catch (error) { - alert(error.message) - } finally { - setLoading(false) - } - } - - const updateProfile = async (e) => { - e.preventDefault() - - try { - setLoading(true) - const { user } = session - - const updates = { - id: user.id, - username, - website, - avatar_url, - updated_at: new Date(), - } - - let { error } = await supabase.from('profiles').upsert(updates) - - if (error) { - throw error - } - } catch (error) { - alert(error.message) - } finally { - setLoading(false) - } - } - - return ( -
- {loading ? ( - 'Saving ...' - ) : ( -
-
Email: {session.user.email}
-
- - setUsername(e.target.value)} - /> -
-
- - setWebsite(e.target.value)} - /> -
-
- -
-
- )} - -
- ) -} - -export default Account -``` - -### Launch! - -Now that we have all the components in place, let's update `App.js`: - -```jsx title=src/App.js -import './index.css' -import { useState, useEffect } from 'react' -import { supabase } from './supabaseClient' -import Auth from './Auth' -import Account from './Account' - -export default function App() { - const [session, setSession] = useState(null) - - useEffect(() => { - supabase.auth.getSession().then(({ data: { session } }) => { - setSession(session) - }) - - supabase.auth.onAuthStateChange((_event, session) => { - setSession(session) - }) - }, []) - - return ( -
- {!session ? : } -
- ) -} -``` - -Once that's done, run this in a terminal window: - -```bash -npm start -``` - -And then open the browser to [localhost:3000](http://localhost:3000) and you should see the completed app. - -![Supabase React](/docs/img/supabase-react-demo.png) - -## Bonus: Profile photos - -Every Supabase project is configured with [Storage](/docs/guides/storage) for managing large files like photos and videos. - -### Create an upload widget - -Let's create an avatar for the user so that they can upload a profile photo. We can start by creating a new component: - -```jsx title=src/Avatar.js -import { useEffect, useState } from 'react' -import { supabase } from './supabaseClient' - -export default function Avatar({ url, size, onUpload }) { - const [avatarUrl, setAvatarUrl] = useState(null) - const [uploading, setUploading] = useState(false) - - useEffect(() => { - if (url) downloadImage(url) - }, [url]) - - const downloadImage = async (path) => { - try { - const { data, error } = await supabase.storage.from('avatars').download(path) - if (error) { - throw error - } - const url = URL.createObjectURL(data) - setAvatarUrl(url) - } catch (error) { - console.log('Error downloading image: ', error.message) - } - } - - const uploadAvatar = async (event) => { - try { - setUploading(true) - - if (!event.target.files || event.target.files.length === 0) { - throw new Error('You must select an image to upload.') - } - - const file = event.target.files[0] - const fileExt = file.name.split('.').pop() - const fileName = `${Math.random()}.${fileExt}` - const filePath = `${fileName}` - - let { error: uploadError } = await supabase.storage.from('avatars').upload(filePath, file) - - if (uploadError) { - throw uploadError - } - - onUpload(filePath) - } catch (error) { - alert(error.message) - } finally { - setUploading(false) - } - } - - return ( -
- {avatarUrl - {uploading ? ( - 'Uploading...' - ) : ( - <> - -
- -
- - )} -
- ) -} -``` - -### Add the new widget - -And then we can add the widget to the Account page: - -```jsx title=src/Account.js -// Import the new component -import Avatar from './Avatar' - -// ... - -return ( -
- {/* Add to the body */} - { - setAvatarUrl(url) - updateProfile({ username, website, avatar_url: url }) - }} - /> - {/* ... */} -
-) -``` - -## Next steps - -At this stage you have a fully functional application! - -- Got a question? [Ask here](https://github.com/supabase/supabase/discussions). -- Sign in: [app.supabase.com](https://app.supabase.com) diff --git a/apps/docs/pages/guides/with-redwoodjs.mdx b/apps/docs/pages/guides/with-redwoodjs.mdx index d9ff177fe1b..b173ad9338b 100644 --- a/apps/docs/pages/guides/with-redwoodjs.mdx +++ b/apps/docs/pages/guides/with-redwoodjs.mdx @@ -1,14 +1,11 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-redwoodjs -title: 'Quickstart: RedwoodJS' -description: Learn how to use Supabase in your RedwoodJS App. -sidebar_label: RedwoodJS ---- - -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' + id: 'with-redwoodjs', + title: 'Quickstart: RedwoodJS', + description: 'Learn how to use Supabase in your RedwoodJS App.', + sidebar_label: 'RedwoodJS', +} ## Intro @@ -782,3 +779,7 @@ At this stage you have a fully functional application! - Sign in: [app.supabase.com](https://app.supabase.com) - Learn more about [RedwoodJS](https://redwoodjs.com) - Visit the [RedwoodJS Discourse Community](https://community.redwoodjs.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-solidjs.mdx b/apps/docs/pages/guides/with-solidjs.mdx index 8c34e3b272a..fa662a75c80 100644 --- a/apps/docs/pages/guides/with-solidjs.mdx +++ b/apps/docs/pages/guides/with-solidjs.mdx @@ -1,14 +1,12 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-solidjs -title: 'Quickstart: SolidJS' -description: Learn how to use Supabase in your SolidJS App. -sidebar_label: SolidJS ---- + id: 'with-solidjs', + title: 'Quickstart: SolidJS', + description: 'Learn how to use Supabase in your SolidJS App.', + sidebar_label: 'SolidJS', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -426,3 +424,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-svelte.mdx b/apps/docs/pages/guides/with-svelte.mdx index 6109fc717d1..8507c5516e5 100644 --- a/apps/docs/pages/guides/with-svelte.mdx +++ b/apps/docs/pages/guides/with-svelte.mdx @@ -1,14 +1,12 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-svelte -title: 'Quickstart: Svelte' -description: Learn how to use Supabase in your Svelte App. -sidebar_label: Svelte ---- + id: 'with-svelte', + title: 'Quickstart: Svelte', + description: 'Learn how to use Supabase in your Svelte App.', + sidebar_label: 'Svelte', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -379,3 +377,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-sveltekit.mdx b/apps/docs/pages/guides/with-sveltekit.mdx index b081a2d05b1..317d0a4d329 100644 --- a/apps/docs/pages/guides/with-sveltekit.mdx +++ b/apps/docs/pages/guides/with-sveltekit.mdx @@ -1,14 +1,12 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-sveltekit -title: 'Quickstart: SvelteKit' -description: Learn how to use Supabase in your SvelteKit App. -sidebar_label: SvelteKit ---- + id: 'with-sveltekit', + title: 'Quickstart: SvelteKit', + description: 'Learn how to use Supabase in your SvelteKit App.', + sidebar_label: 'SvelteKit', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -445,3 +443,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/with-vue-3.mdx b/apps/docs/pages/guides/with-vue-3.mdx index ebc31e20bd6..ca27d7ad50d 100644 --- a/apps/docs/pages/guides/with-vue-3.mdx +++ b/apps/docs/pages/guides/with-vue-3.mdx @@ -1,14 +1,12 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: with-vue-3 -title: 'Quickstart: Vue 3' -description: Learn how to use Supabase in your Vue 3 App. -sidebar_label: 'Vue 3' ---- + id: 'with-vue-3', + title: 'Quickstart: Vue 3', + description: 'Learn how to use Supabase in your Vue 3 App.', + sidebar_label: 'Vue 3', +} -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' import QuickstartIntro from '/components/MDX/quickstart_intro.mdx' import ProjectSetup from '/components/MDX/project_setup.mdx' @@ -390,3 +388,7 @@ At this stage you have a fully functional application! - Got a question? [Ask here](https://github.com/supabase/supabase/discussions). - Sign in: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/docs/handbook/contributing.mdx b/apps/docs/pages/handbook/contributing.mdx similarity index 100% rename from apps/docs/docs/handbook/contributing.mdx rename to apps/docs/pages/handbook/contributing.mdx diff --git a/apps/docs/docs/handbook/introduction.mdx b/apps/docs/pages/handbook/introduction.mdx similarity index 100% rename from apps/docs/docs/handbook/introduction.mdx rename to apps/docs/pages/handbook/introduction.mdx diff --git a/apps/docs/docs/handbook/supasquad.mdx b/apps/docs/pages/handbook/supasquad.mdx similarity index 100% rename from apps/docs/docs/handbook/supasquad.mdx rename to apps/docs/pages/handbook/supasquad.mdx diff --git a/apps/docs/docs/introduction.mdx b/apps/docs/pages/introduction.mdx similarity index 100% rename from apps/docs/docs/introduction.mdx rename to apps/docs/pages/introduction.mdx diff --git a/apps/docs/docs/learn/auth-deep-dive/auth-deep-dive-jwts.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx similarity index 97% rename from apps/docs/docs/learn/auth-deep-dive/auth-deep-dive-jwts.mdx rename to apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx index d3a5afbf549..942fe23e7bb 100644 --- a/apps/docs/docs/learn/auth-deep-dive/auth-deep-dive-jwts.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-deep-dive-jwts.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-deep-dive-jwts -title: 'Part One: JWTs' -description: Supabase Auth Deep Dive Part 1 - JWTs ---- + id: 'auth-deep-dive-jwts', + title: 'Part One: JWTs', + description: 'Supabase Auth Deep Dive Part 1 - JWTs', +} ### About @@ -191,3 +191,7 @@ Now that you understand what JWTs are and where they're used in Supabase, you ca - [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/docs/learn/auth-deep-dive/auth-google-oauth.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx similarity index 95% rename from apps/docs/docs/learn/auth-deep-dive/auth-google-oauth.mdx rename to apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx index fae11eb71a6..f53759eea9d 100644 --- a/apps/docs/docs/learn/auth-deep-dive/auth-google-oauth.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-google-oauth.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-google-oauth -title: 'Part Five: Google Oauth' -description: 'Supabase Deep Dive Part 5: Google OAuth Provider' ---- + id: 'auth-google-oauth', + title: 'Part Five: Google Oauth', + description: 'Supabase Deep Dive Part 5: Google OAuth Provider', +} ### About @@ -97,3 +97,7 @@ For any support please get in touch at beta at [supabase.com](https://supabase.c - Watch [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/docs/learn/auth-deep-dive/auth-gotrue.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx similarity index 94% rename from apps/docs/docs/learn/auth-deep-dive/auth-gotrue.mdx rename to apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx index e8d1ef35a55..22c50cc66c3 100644 --- a/apps/docs/docs/learn/auth-deep-dive/auth-gotrue.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-gotrue.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-gotrue -title: 'Part Four: GoTrue' -description: 'Supabase Deep Dive Part 4: Gotrue Overview' ---- + id: 'auth-gotrue', + title: 'Part Four: GoTrue', + description: 'Supabase Deep Dive Part 4: Gotrue Overview', +} ### About @@ -79,3 +79,7 @@ In the next guide we'll be looking at how to setup external OAuth providers: Wat - Watch [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/docs/learn/auth-deep-dive/auth-policies.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx similarity index 96% rename from apps/docs/docs/learn/auth-deep-dive/auth-policies.mdx rename to apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx index 5ca998ea214..34a749de16d 100644 --- a/apps/docs/docs/learn/auth-deep-dive/auth-policies.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-policies.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-policies -title: 'Part Three: Policies' -description: 'Supabase Auth Deep Dive Part 3: User Based Access Policies' ---- + id: 'auth-policies', + title: 'Part Three: Policies', + description: 'Supabase Auth Deep Dive Part 3: User Based Access Policies', +} ### About @@ -172,3 +172,7 @@ You can get as creative as you like with these policies. - Watch [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - Watch [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/docs/learn/auth-deep-dive/auth-row-level-security.mdx b/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx similarity index 95% rename from apps/docs/docs/learn/auth-deep-dive/auth-row-level-security.mdx rename to apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx index 69085ac5983..53fd711ce06 100644 --- a/apps/docs/docs/learn/auth-deep-dive/auth-row-level-security.mdx +++ b/apps/docs/pages/learn/auth-deep-dive/auth-row-level-security.mdx @@ -1,10 +1,10 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { -id: auth-row-level-security -title: 'Part Two: Row Level Security' -description: Supabase Auth Deep Dive Part Two - Row Level Security ---- + id: 'auth-row-level-security', + title: 'Part Two: Row Level Security', + description: 'Supabase Auth Deep Dive Part Two - Row Level Security', +} ### About @@ -124,3 +124,7 @@ In the next guide we will look at using Policies in combination with User Accoun - Watch [Part Four: GoTrue](../../learn/auth-deep-dive/auth-gotrue) - Watch [Part Five: Google Oauth](../../learn/auth-deep-dive/auth-google-oauth) - Sign up for Supabase: [app.supabase.com](https://app.supabase.com) + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/docs/reference.mdx b/apps/docs/pages/reference.mdx similarity index 100% rename from apps/docs/docs/reference.mdx rename to apps/docs/pages/reference.mdx diff --git a/apps/docs/docs/reference/api.mdx b/apps/docs/pages/reference/api.mdx similarity index 100% rename from apps/docs/docs/reference/api.mdx rename to apps/docs/pages/reference/api.mdx diff --git a/apps/docs/docs/reference/api/generated/.gitkeep b/apps/docs/pages/reference/api/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/api/generated/.gitkeep rename to apps/docs/pages/reference/api/generated/.gitkeep diff --git a/apps/docs/docs/reference/api/release-notes.mdx b/apps/docs/pages/reference/api/release-notes.mdx similarity index 100% rename from apps/docs/docs/reference/api/release-notes.mdx rename to apps/docs/pages/reference/api/release-notes.mdx diff --git a/apps/docs/docs/reference/auth.mdx b/apps/docs/pages/reference/auth.mdx similarity index 100% rename from apps/docs/docs/reference/auth.mdx rename to apps/docs/pages/reference/auth.mdx diff --git a/apps/docs/docs/reference/auth/generated/.gitkeep b/apps/docs/pages/reference/auth/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/auth/generated/.gitkeep rename to apps/docs/pages/reference/auth/generated/.gitkeep diff --git a/apps/docs/docs/reference/auth/release-notes.mdx b/apps/docs/pages/reference/auth/release-notes.mdx similarity index 100% rename from apps/docs/docs/reference/auth/release-notes.mdx rename to apps/docs/pages/reference/auth/release-notes.mdx diff --git a/apps/docs/docs/reference/cli.mdx b/apps/docs/pages/reference/cli.mdx similarity index 100% rename from apps/docs/docs/reference/cli.mdx rename to apps/docs/pages/reference/cli.mdx diff --git a/apps/docs/docs/reference/cli/generated/.gitkeep b/apps/docs/pages/reference/cli/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/cli/generated/.gitkeep rename to apps/docs/pages/reference/cli/generated/.gitkeep diff --git a/apps/docs/docs/reference/cli/release-notes.mdx b/apps/docs/pages/reference/cli/release-notes.mdx similarity index 100% rename from apps/docs/docs/reference/cli/release-notes.mdx rename to apps/docs/pages/reference/cli/release-notes.mdx diff --git a/apps/docs/docs/reference/dart.mdx b/apps/docs/pages/reference/dart.mdx similarity index 100% rename from apps/docs/docs/reference/dart.mdx rename to apps/docs/pages/reference/dart.mdx diff --git a/apps/docs/docs/reference/dart/generated/.gitkeep b/apps/docs/pages/reference/dart/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/dart/generated/.gitkeep rename to apps/docs/pages/reference/dart/generated/.gitkeep diff --git a/apps/docs/docs/reference/dart/initializing.mdx b/apps/docs/pages/reference/dart/initializing.mdx similarity index 93% rename from apps/docs/docs/reference/dart/initializing.mdx rename to apps/docs/pages/reference/dart/initializing.mdx index be7552e45fa..a6780269c32 100644 --- a/apps/docs/docs/reference/dart/initializing.mdx +++ b/apps/docs/pages/reference/dart/initializing.mdx @@ -6,9 +6,6 @@ title: 'Initializing' slug: initializing --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - ## Flutter For `supabase-flutter`, you will be using the static `initialize()` method on `Supabase` class. diff --git a/apps/docs/docs/reference/dart/installing.mdx b/apps/docs/pages/reference/dart/installing.mdx similarity index 87% rename from apps/docs/docs/reference/dart/installing.mdx rename to apps/docs/pages/reference/dart/installing.mdx index d3edc0a2a6d..0c6c3893e44 100644 --- a/apps/docs/docs/reference/dart/installing.mdx +++ b/apps/docs/pages/reference/dart/installing.mdx @@ -6,9 +6,6 @@ title: 'Installing' slug: installing --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - ## Flutter For Flutter project, you can use [supabase_flutter](https://pub.dev/packages/supabase_flutter) package. diff --git a/apps/docs/docs/reference/dart/upgrade-guide.mdx b/apps/docs/pages/reference/dart/upgrade-guide.mdx similarity index 99% rename from apps/docs/docs/reference/dart/upgrade-guide.mdx rename to apps/docs/pages/reference/dart/upgrade-guide.mdx index 47fdc45e4c7..8022ddb679b 100644 --- a/apps/docs/docs/reference/dart/upgrade-guide.mdx +++ b/apps/docs/pages/reference/dart/upgrade-guide.mdx @@ -6,9 +6,6 @@ title: Upgrade to supabase-flutter v1 description: 'Learn how to upgrade to supabase-flutter v1.' --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - supabase-flutter focuses on improving the developer experience and making it easier to use. This guide will help you upgrade from supabase-flutter v0 to v1. ## Upgrade the client library diff --git a/apps/docs/docs/reference/dart/v0.mdx b/apps/docs/pages/reference/dart/v0.mdx similarity index 100% rename from apps/docs/docs/reference/dart/v0.mdx rename to apps/docs/pages/reference/dart/v0.mdx diff --git a/apps/docs/docs/reference/dart/v0/generated/.gitkeep b/apps/docs/pages/reference/dart/v0/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/dart/v0/generated/.gitkeep rename to apps/docs/pages/reference/dart/v0/generated/.gitkeep diff --git a/apps/docs/docs/reference/javascript.mdx b/apps/docs/pages/reference/javascript.mdx similarity index 100% rename from apps/docs/docs/reference/javascript.mdx rename to apps/docs/pages/reference/javascript.mdx diff --git a/apps/docs/docs/reference/javascript/generated/.gitkeep b/apps/docs/pages/reference/javascript/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/javascript/generated/.gitkeep rename to apps/docs/pages/reference/javascript/generated/.gitkeep diff --git a/apps/docs/docs/reference/javascript/installing.mdx b/apps/docs/pages/reference/javascript/installing.mdx similarity index 91% rename from apps/docs/docs/reference/javascript/installing.mdx rename to apps/docs/pages/reference/javascript/installing.mdx index dd5e6ec19e3..5e0db6645eb 100644 --- a/apps/docs/docs/reference/javascript/installing.mdx +++ b/apps/docs/pages/reference/javascript/installing.mdx @@ -7,9 +7,6 @@ slug: installing custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - All JavaScript libraries are built directly by the Supabase team. this is in reference/js/installing Other languages are built by the community and supported by Supabase. diff --git a/apps/docs/docs/reference/javascript/release-notes.mdx b/apps/docs/pages/reference/javascript/release-notes.mdx similarity index 100% rename from apps/docs/docs/reference/javascript/release-notes.mdx rename to apps/docs/pages/reference/javascript/release-notes.mdx diff --git a/apps/docs/docs/reference/javascript/typescript-support.mdx b/apps/docs/pages/reference/javascript/typescript-support.mdx similarity index 100% rename from apps/docs/docs/reference/javascript/typescript-support.mdx rename to apps/docs/pages/reference/javascript/typescript-support.mdx diff --git a/apps/docs/docs/reference/javascript/upgrade-guide.mdx b/apps/docs/pages/reference/javascript/upgrade-guide.mdx similarity index 99% rename from apps/docs/docs/reference/javascript/upgrade-guide.mdx rename to apps/docs/pages/reference/javascript/upgrade-guide.mdx index 79b7cdae01d..a02c345010b 100644 --- a/apps/docs/docs/reference/javascript/upgrade-guide.mdx +++ b/apps/docs/pages/reference/javascript/upgrade-guide.mdx @@ -6,9 +6,6 @@ title: Upgrade to supabase-js v2 description: 'Learn how to upgrade to supabase-js v2.' --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - supabase-js v2 focuses on "quality-of-life" improvements for developers and addresses some of the largest pain points in v1. v2 includes type support, a rebuilt Auth library with async methods, improved errors, and more. No new features will be added to supabase-js v1 , but we'll continuing merging security fixes to v1, with maintenance patches for the next 3 months. diff --git a/apps/docs/docs/reference/javascript/v1.mdx b/apps/docs/pages/reference/javascript/v1.mdx similarity index 100% rename from apps/docs/docs/reference/javascript/v1.mdx rename to apps/docs/pages/reference/javascript/v1.mdx diff --git a/apps/docs/docs/reference/javascript/v1/generated/.gitkeep b/apps/docs/pages/reference/javascript/v1/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/javascript/v1/generated/.gitkeep rename to apps/docs/pages/reference/javascript/v1/generated/.gitkeep diff --git a/apps/docs/docs/reference/javascript/v1/generating-types.mdx b/apps/docs/pages/reference/javascript/v1/generating-types.mdx similarity index 95% rename from apps/docs/docs/reference/javascript/v1/generating-types.mdx rename to apps/docs/pages/reference/javascript/v1/generating-types.mdx index 9b7a2f0c669..f14e35036d9 100644 --- a/apps/docs/docs/reference/javascript/v1/generating-types.mdx +++ b/apps/docs/pages/reference/javascript/v1/generating-types.mdx @@ -7,9 +7,6 @@ slug: generating-types custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - Supabase will soon release native type generators that dump your database types for various languages. For now, we support TypeScript [through third-party tools](/docs/guides/api/generating-types). ## Usage with TypeScript diff --git a/apps/docs/docs/reference/javascript/v1/initializing.mdx b/apps/docs/pages/reference/javascript/v1/initializing.mdx similarity index 98% rename from apps/docs/docs/reference/javascript/v1/initializing.mdx rename to apps/docs/pages/reference/javascript/v1/initializing.mdx index 6227689efcb..06aa24bc8a9 100644 --- a/apps/docs/docs/reference/javascript/v1/initializing.mdx +++ b/apps/docs/pages/reference/javascript/v1/initializing.mdx @@ -7,9 +7,6 @@ slug: initializing custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - You can initialize a new Supabase client using the `createClient()` method. The Supabase client is your entrypoint to the rest of the Supabase functionality diff --git a/apps/docs/docs/reference/javascript/v1/installing.mdx b/apps/docs/pages/reference/javascript/v1/installing.mdx similarity index 91% rename from apps/docs/docs/reference/javascript/v1/installing.mdx rename to apps/docs/pages/reference/javascript/v1/installing.mdx index 9f9644c014f..1e31fc21692 100644 --- a/apps/docs/docs/reference/javascript/v1/installing.mdx +++ b/apps/docs/pages/reference/javascript/v1/installing.mdx @@ -7,9 +7,6 @@ slug: installing custom_edit_url: https://github.com/supabase/supabase/edit/master/spec/supabase_js_v1.yml --- -import Tabs from '@theme/Tabs' -import TabItem from '@theme/TabItem' - All JavaScript libraries are built directly by the Supabase team. Other languages are built by the community and supported by Supabase. diff --git a/apps/docs/docs/reference/postgres/changing-timezones.mdx b/apps/docs/pages/reference/postgres/changing-timezones.mdx similarity index 98% rename from apps/docs/docs/reference/postgres/changing-timezones.mdx rename to apps/docs/pages/reference/postgres/changing-timezones.mdx index 2cac895ca8e..73d9b92d2d7 100644 --- a/apps/docs/docs/reference/postgres/changing-timezones.mdx +++ b/apps/docs/pages/reference/postgres/changing-timezones.mdx @@ -7,7 +7,7 @@ slug: changing-timezones custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; Data types. diff --git a/apps/docs/docs/reference/postgres/columns.mdx b/apps/docs/pages/reference/postgres/columns.mdx similarity index 97% rename from apps/docs/docs/reference/postgres/columns.mdx rename to apps/docs/pages/reference/postgres/columns.mdx index 18d6f0b0691..f65ec4f7126 100644 --- a/apps/docs/docs/reference/postgres/columns.mdx +++ b/apps/docs/pages/reference/postgres/columns.mdx @@ -7,7 +7,7 @@ slug: columns custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; Creating columns. diff --git a/apps/docs/docs/reference/postgres/connection-strings.mdx b/apps/docs/pages/reference/postgres/connection-strings.mdx similarity index 98% rename from apps/docs/docs/reference/postgres/connection-strings.mdx rename to apps/docs/pages/reference/postgres/connection-strings.mdx index 9cae96eeb87..1ce4cbed499 100644 --- a/apps/docs/docs/reference/postgres/connection-strings.mdx +++ b/apps/docs/pages/reference/postgres/connection-strings.mdx @@ -7,7 +7,7 @@ slug: connection-strings custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; There are various ways to connect to your database, depending on the configuration of your Postgres instance and the tool which you are connecting with. diff --git a/apps/docs/docs/reference/postgres/database-passwords.mdx b/apps/docs/pages/reference/postgres/database-passwords.mdx similarity index 95% rename from apps/docs/docs/reference/postgres/database-passwords.mdx rename to apps/docs/pages/reference/postgres/database-passwords.mdx index 6a4e46c8f67..c6693a6637c 100644 --- a/apps/docs/docs/reference/postgres/database-passwords.mdx +++ b/apps/docs/pages/reference/postgres/database-passwords.mdx @@ -7,7 +7,7 @@ slug: database-passwords custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; Manage the passwords of your database users using any super user. diff --git a/apps/docs/docs/reference/postgres/database-users.mdx b/apps/docs/pages/reference/postgres/database-users.mdx similarity index 94% rename from apps/docs/docs/reference/postgres/database-users.mdx rename to apps/docs/pages/reference/postgres/database-users.mdx index 753a5f3a819..65ce86d6643 100644 --- a/apps/docs/docs/reference/postgres/database-users.mdx +++ b/apps/docs/pages/reference/postgres/database-users.mdx @@ -7,7 +7,7 @@ slug: database-users custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; Users and Roles are almost interchangeable. diff --git a/apps/docs/docs/reference/postgres/index.mdx b/apps/docs/pages/reference/postgres/index.mdx similarity index 94% rename from apps/docs/docs/reference/postgres/index.mdx rename to apps/docs/pages/reference/postgres/index.mdx index 9271322bb56..5efb8681c35 100644 --- a/apps/docs/docs/reference/postgres/index.mdx +++ b/apps/docs/pages/reference/postgres/index.mdx @@ -7,7 +7,7 @@ slug: getting-started custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; PostgreSQL, also known as Postgres, is a free and open-source relational diff --git a/apps/docs/docs/reference/postgres/publications.mdx b/apps/docs/pages/reference/postgres/publications.mdx similarity index 98% rename from apps/docs/docs/reference/postgres/publications.mdx rename to apps/docs/pages/reference/postgres/publications.mdx index 373721de5b4..1b7785985ca 100644 --- a/apps/docs/docs/reference/postgres/publications.mdx +++ b/apps/docs/pages/reference/postgres/publications.mdx @@ -7,7 +7,7 @@ slug: publications custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; Publications are a way of grouping changes generated from a table or a group of tables. diff --git a/apps/docs/docs/reference/postgres/schemas.mdx b/apps/docs/pages/reference/postgres/schemas.mdx similarity index 98% rename from apps/docs/docs/reference/postgres/schemas.mdx rename to apps/docs/pages/reference/postgres/schemas.mdx index d0bab179952..8beddbef2d4 100644 --- a/apps/docs/docs/reference/postgres/schemas.mdx +++ b/apps/docs/pages/reference/postgres/schemas.mdx @@ -7,7 +7,7 @@ slug: schemas custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; Schemas are like "folders". They help to keep your database organized. diff --git a/apps/docs/docs/reference/postgres/tables.mdx b/apps/docs/pages/reference/postgres/tables.mdx similarity index 98% rename from apps/docs/docs/reference/postgres/tables.mdx rename to apps/docs/pages/reference/postgres/tables.mdx index 74d7fe841bf..c8a9d2ac65c 100644 --- a/apps/docs/docs/reference/postgres/tables.mdx +++ b/apps/docs/pages/reference/postgres/tables.mdx @@ -7,7 +7,7 @@ slug: tables custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/postgres.yml --- -import Tabs from '@theme/Tabs'; +; import TabsPanel from '@theme/TabsPanel'; Tables are similar to excel spreadsheets. They contain columns & rows of data. There are a few key differences from a spreadsheet however: diff --git a/apps/docs/docs/reference/realtime.mdx b/apps/docs/pages/reference/realtime.mdx similarity index 100% rename from apps/docs/docs/reference/realtime.mdx rename to apps/docs/pages/reference/realtime.mdx diff --git a/apps/docs/docs/reference/realtime/generated/.gitkeep b/apps/docs/pages/reference/realtime/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/realtime/generated/.gitkeep rename to apps/docs/pages/reference/realtime/generated/.gitkeep diff --git a/apps/docs/docs/reference/realtime/release-notes.mdx b/apps/docs/pages/reference/realtime/release-notes.mdx similarity index 100% rename from apps/docs/docs/reference/realtime/release-notes.mdx rename to apps/docs/pages/reference/realtime/release-notes.mdx diff --git a/apps/docs/docs/reference/storage.mdx b/apps/docs/pages/reference/storage.mdx similarity index 100% rename from apps/docs/docs/reference/storage.mdx rename to apps/docs/pages/reference/storage.mdx diff --git a/apps/docs/docs/reference/storage/generated/.gitkeep b/apps/docs/pages/reference/storage/generated/.gitkeep similarity index 100% rename from apps/docs/docs/reference/storage/generated/.gitkeep rename to apps/docs/pages/reference/storage/generated/.gitkeep diff --git a/apps/docs/docs/reference/storage/release-notes.mdx b/apps/docs/pages/reference/storage/release-notes.mdx similarity index 100% rename from apps/docs/docs/reference/storage/release-notes.mdx rename to apps/docs/pages/reference/storage/release-notes.mdx diff --git a/apps/docs/docs/support.mdx b/apps/docs/pages/support.mdx similarity index 100% rename from apps/docs/docs/support.mdx rename to apps/docs/pages/support.mdx diff --git a/apps/docs/public/img/logs-api.png b/apps/docs/public/img/logs-api.png new file mode 100644 index 00000000000..798abee5f73 Binary files /dev/null and b/apps/docs/public/img/logs-api.png differ diff --git a/apps/docs/public/img/logs-auth.png b/apps/docs/public/img/logs-auth.png new file mode 100644 index 00000000000..a020bb86430 Binary files /dev/null and b/apps/docs/public/img/logs-auth.png differ diff --git a/apps/docs/public/img/logs-database.png b/apps/docs/public/img/logs-database.png new file mode 100644 index 00000000000..78f9036eeaa Binary files /dev/null and b/apps/docs/public/img/logs-database.png differ diff --git a/apps/docs/public/img/logs-explorer.png b/apps/docs/public/img/logs-explorer.png new file mode 100644 index 00000000000..3d21fb0569c Binary files /dev/null and b/apps/docs/public/img/logs-explorer.png differ diff --git a/apps/docs/public/img/logs-functions-edge.png b/apps/docs/public/img/logs-functions-edge.png new file mode 100644 index 00000000000..2d0d699cac1 Binary files /dev/null and b/apps/docs/public/img/logs-functions-edge.png differ diff --git a/apps/docs/public/img/logs-functions.png b/apps/docs/public/img/logs-functions.png new file mode 100644 index 00000000000..efd455955c9 Binary files /dev/null and b/apps/docs/public/img/logs-functions.png differ diff --git a/apps/docs/public/img/logs-realtime.png b/apps/docs/public/img/logs-realtime.png new file mode 100644 index 00000000000..4b93e87e990 Binary files /dev/null and b/apps/docs/public/img/logs-realtime.png differ diff --git a/apps/docs/public/img/logs-storage.png b/apps/docs/public/img/logs-storage.png new file mode 100644 index 00000000000..d0f98ea43cc Binary files /dev/null and b/apps/docs/public/img/logs-storage.png differ diff --git a/apps/docs/public/img/unnesting-2.png b/apps/docs/public/img/unnesting-2.png new file mode 100644 index 00000000000..ba51f56f0fe Binary files /dev/null and b/apps/docs/public/img/unnesting-2.png differ diff --git a/apps/docs/public/img/unnesting-none-dark.png b/apps/docs/public/img/unnesting-none-dark.png new file mode 100644 index 00000000000..3d2b0ccc1d7 Binary files /dev/null and b/apps/docs/public/img/unnesting-none-dark.png differ diff --git a/apps/docs/public/img/unnesting-none.png b/apps/docs/public/img/unnesting-none.png new file mode 100644 index 00000000000..d7dc3d77add Binary files /dev/null and b/apps/docs/public/img/unnesting-none.png differ diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json index 53c59dc60b8..ce8de4c02e1 100644 --- a/apps/docs/tsconfig.json +++ b/apps/docs/tsconfig.json @@ -20,6 +20,6 @@ "jsx": "preserve", "module": "esnext" }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "pages/guides/append-test.js"], "exclude": ["node_modules"] } diff --git a/package-lock.json b/package-lock.json index 660de16dba7..df680f310d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,6 +55,7 @@ "jsrsasign": "^10.5.26", "lodash": "^4.17.21", "markdown-toc": "^1.2.0", + "mdx-mermaid": "^1.3.2", "next": "12.1.0", "next-compose-plugins": "^2.2.1", "next-mdx-remote": "^3.0.8", @@ -646,6 +647,16 @@ "dev": true, "license": "MIT" }, + "apps/docs/node_modules/mdx-mermaid": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz", + "integrity": "sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==", + "peerDependencies": { + "mermaid": ">=8.11.0", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0", + "unist-util-visit": "^2.0.0" + } + }, "apps/docs/node_modules/next-mdx-remote": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-3.0.8.tgz", @@ -693,6 +704,35 @@ "node": ">=8" } }, + "apps/docs/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "peer": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "apps/docs/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "peer": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "apps/www": { "version": "0.0.3", "license": "MIT", @@ -3326,6 +3366,12 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==", + "peer": true + }, "node_modules/@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -14817,6 +14863,47 @@ "type": "^1.0.1" } }, + "node_modules/d3": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", + "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", + "peer": true, + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-array": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", @@ -14825,16 +14912,219 @@ "internmap": "^1.0.0" } }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "peer": true, + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "peer": true + }, "node_modules/d3-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" }, + "node_modules/d3-contour": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", + "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", + "peer": true, + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour/node_modules/d3-array": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", + "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", + "peer": true, + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "peer": true, + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/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==", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "peer": true, + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-format": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" }, + "node_modules/d3-geo": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", + "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", + "peer": true, + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-interpolate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", @@ -14848,6 +15138,33 @@ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-2.0.0.tgz", "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==" }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-scale": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", @@ -14860,6 +15177,28 @@ "d3-time-format": "2 - 3" } }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "peer": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-shape": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-2.1.0.tgz", @@ -14884,6 +15223,482 @@ "d3-time": "1 - 2" } }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "peer": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", + "peer": true + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-array": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "peer": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", + "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "peer": true, + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-shape": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", + "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", + "peer": true, + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", + "peer": true, + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "peer": true, + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "peer": true, + "dependencies": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, + "node_modules/dagre-d3": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", + "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", + "peer": true, + "dependencies": { + "d3": "^5.14", + "dagre": "^0.8.5", + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, + "node_modules/dagre-d3/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==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", + "peer": true, + "dependencies": { + "d3-array": "1", + "d3-axis": "1", + "d3-brush": "1", + "d3-chord": "1", + "d3-collection": "1", + "d3-color": "1", + "d3-contour": "1", + "d3-dispatch": "1", + "d3-drag": "1", + "d3-dsv": "1", + "d3-ease": "1", + "d3-fetch": "1", + "d3-force": "1", + "d3-format": "1", + "d3-geo": "1", + "d3-hierarchy": "1", + "d3-interpolate": "1", + "d3-path": "1", + "d3-polygon": "1", + "d3-quadtree": "1", + "d3-random": "1", + "d3-scale": "2", + "d3-scale-chromatic": "1", + "d3-selection": "1", + "d3-shape": "1", + "d3-time": "1", + "d3-time-format": "2", + "d3-timer": "1", + "d3-transition": "1", + "d3-voronoi": "1", + "d3-zoom": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-axis": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-brush": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", + "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", + "peer": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-chord": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "peer": true, + "dependencies": { + "d3-array": "1", + "d3-path": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-contour": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "peer": true, + "dependencies": { + "d3-array": "^1.1.1" + } + }, + "node_modules/dagre-d3/node_modules/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "peer": true, + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-dsv": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "peer": true, + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/dagre-d3/node_modules/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-fetch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", + "peer": true, + "dependencies": { + "d3-dsv": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "peer": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "peer": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "peer": true, + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-polygon": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-random": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "peer": true, + "dependencies": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "node_modules/dagre-d3/node_modules/d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "peer": true, + "dependencies": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "peer": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "peer": true, + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "peer": true + }, + "node_modules/dagre-d3/node_modules/d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", + "peer": true, + "dependencies": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "node_modules/dagre-d3/node_modules/d3-zoom": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", + "peer": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -15087,6 +15902,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "peer": true, + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -15412,6 +16236,12 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==", + "peer": true + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -17060,6 +17890,12 @@ "node": ">=0.10.0" } }, + "node_modules/fast-clone": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", + "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==", + "peer": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -18211,6 +19047,15 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "peer": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, "node_modules/graphql": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", @@ -23614,6 +24459,12 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==", + "peer": true + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -24875,6 +25726,36 @@ "node": ">= 8" } }, + "node_modules/mermaid": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", + "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", + "peer": true, + "dependencies": { + "@braintree/sanitize-url": "^6.0.0", + "d3": "^7.0.0", + "dagre": "^0.8.5", + "dagre-d3": "^0.6.4", + "dompurify": "2.4.0", + "fast-clone": "^1.5.13", + "graphlib": "^2.1.8", + "khroma": "^2.0.0", + "lodash": "^4.17.21", + "moment-mini": "^2.24.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "uuid": "^9.0.0" + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -25873,6 +26754,12 @@ } } }, + "node_modules/moment-mini": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", + "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==", + "peer": true + }, "node_modules/moo-color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", @@ -26268,6 +27155,12 @@ "node": ">=6.0.0" } }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "peer": true + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -31600,6 +32493,12 @@ "inherits": "^2.0.1" } }, + "node_modules/robust-predicates": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", + "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==", + "peer": true + }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -31640,6 +32539,12 @@ "aproba": "^1.1.1" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "peer": true + }, "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -33249,6 +34154,12 @@ } } }, + "node_modules/stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", + "peer": true + }, "node_modules/supabase-tests": { "resolved": "tests", "link": true @@ -39388,6 +40299,12 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==", + "peer": true + }, "@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", @@ -48252,6 +49169,122 @@ "type": "^1.0.1" } }, + "d3": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", + "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", + "peer": true, + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "dependencies": { + "d3-array": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", + "peer": true, + "requires": { + "internmap": "1 - 2" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "peer": true + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "peer": true + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "peer": true, + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", + "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", + "peer": true + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "peer": true, + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-shape": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", + "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", + "peer": true, + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", + "peer": true, + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "peer": true, + "requires": { + "d3-time": "1 - 3" + } + } + } + }, "d3-array": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", @@ -48260,16 +49293,164 @@ "internmap": "^1.0.0" } }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "peer": true + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "peer": true, + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "peer": true + }, "d3-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" }, + "d3-contour": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", + "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", + "peer": true, + "requires": { + "d3-array": "^3.2.0" + }, + "dependencies": { + "d3-array": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", + "peer": true, + "requires": { + "internmap": "1 - 2" + } + } + } + }, + "d3-delaunay": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", + "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", + "peer": true, + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "peer": true + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "peer": true, + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "peer": true + }, + "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==", + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "peer": true + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "peer": true, + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, "d3-format": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" }, + "d3-geo": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", + "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", + "peer": true, + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "peer": true + }, "d3-interpolate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", @@ -48283,6 +49464,24 @@ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-2.0.0.tgz", "integrity": "sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA==" }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "peer": true + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "peer": true + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "peer": true + }, "d3-scale": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", @@ -48295,6 +49494,22 @@ "d3-time-format": "2 - 3" } }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "peer": true, + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "peer": true + }, "d3-shape": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-2.1.0.tgz", @@ -48319,6 +49534,358 @@ "d3-time": "1 - 2" } }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "peer": true + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "peer": true, + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", + "peer": true + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "peer": true, + "requires": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, + "dagre-d3": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", + "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", + "peer": true, + "requires": { + "d3": "^5.14", + "dagre": "^0.8.5", + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + }, + "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==", + "peer": true + }, + "d3": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", + "peer": true, + "requires": { + "d3-array": "1", + "d3-axis": "1", + "d3-brush": "1", + "d3-chord": "1", + "d3-collection": "1", + "d3-color": "1", + "d3-contour": "1", + "d3-dispatch": "1", + "d3-drag": "1", + "d3-dsv": "1", + "d3-ease": "1", + "d3-fetch": "1", + "d3-force": "1", + "d3-format": "1", + "d3-geo": "1", + "d3-hierarchy": "1", + "d3-interpolate": "1", + "d3-path": "1", + "d3-polygon": "1", + "d3-quadtree": "1", + "d3-random": "1", + "d3-scale": "2", + "d3-scale-chromatic": "1", + "d3-selection": "1", + "d3-shape": "1", + "d3-time": "1", + "d3-time-format": "2", + "d3-timer": "1", + "d3-transition": "1", + "d3-voronoi": "1", + "d3-zoom": "1" + } + }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "peer": true + }, + "d3-axis": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", + "peer": true + }, + "d3-brush": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", + "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", + "peer": true, + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "d3-chord": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "peer": true, + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", + "peer": true + }, + "d3-contour": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "peer": true, + "requires": { + "d3-array": "^1.1.1" + } + }, + "d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", + "peer": true + }, + "d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "peer": true, + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-dsv": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "peer": true, + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", + "peer": true + }, + "d3-fetch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", + "peer": true, + "requires": { + "d3-dsv": "1" + } + }, + "d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "peer": true, + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "peer": true + }, + "d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "peer": true, + "requires": { + "d3-array": "1" + } + }, + "d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", + "peer": true + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "peer": true, + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "peer": true + }, + "d3-polygon": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", + "peer": true + }, + "d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", + "peer": true + }, + "d3-random": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", + "peer": true + }, + "d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "peer": true, + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "peer": true, + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", + "peer": true + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "peer": true, + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "peer": true + }, + "d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "peer": true, + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "peer": true + }, + "d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", + "peer": true, + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "d3-zoom": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", + "peer": true, + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + } + } + }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -48476,6 +50043,15 @@ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "peer": true, + "requires": { + "robust-predicates": "^3.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -48662,6 +50238,7 @@ "jsrsasign": "^10.5.26", "lodash": "^4.17.21", "markdown-toc": "^1.2.0", + "mdx-mermaid": "*", "minimist": "^1.2.6", "next": "12.1.0", "next-compose-plugins": "^2.2.1", @@ -49078,6 +50655,12 @@ "version": "0.4.1", "dev": true }, + "mdx-mermaid": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz", + "integrity": "sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==", + "requires": {} + }, "next-mdx-remote": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-3.0.8.tgz", @@ -49111,6 +50694,27 @@ "requires": { "has-flag": "^4.0.0" } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "peer": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "peer": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } } } }, @@ -49207,6 +50811,12 @@ "domelementtype": "^2.2.0" } }, + "dompurify": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", + "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==", + "peer": true + }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -50509,6 +52119,12 @@ } } }, + "fast-clone": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", + "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==", + "peer": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -51372,6 +52988,15 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "peer": true, + "requires": { + "lodash": "^4.17.15" + } + }, "graphql": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", @@ -55430,6 +57055,12 @@ "safe-buffer": "^5.0.1" } }, + "khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==", + "peer": true + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -56418,6 +58049,35 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, + "mermaid": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", + "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", + "peer": true, + "requires": { + "@braintree/sanitize-url": "^6.0.0", + "d3": "^7.0.0", + "dagre": "^0.8.5", + "dagre-d3": "^0.6.4", + "dompurify": "2.4.0", + "fast-clone": "^1.5.13", + "graphlib": "^2.1.8", + "khroma": "^2.0.0", + "lodash": "^4.17.21", + "moment-mini": "^2.24.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "uuid": "^9.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "peer": true + } + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -57048,6 +58708,12 @@ "integrity": "sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==", "requires": {} }, + "moment-mini": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", + "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==", + "peer": true + }, "moo-color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", @@ -57365,6 +59031,12 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz", "integrity": "sha512-EjYvSmHzekz6VNkNd12aUqAco+bOkRe3Of5jVhltqKhEsjw/y0PYPJfp83+s9Wzh1dspYAkUW/YNQ350NATbSQ==" }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "peer": true + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -61341,6 +63013,12 @@ "inherits": "^2.0.1" } }, + "robust-predicates": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", + "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==", + "peer": true + }, "rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -61364,6 +63042,12 @@ "aproba": "^1.1.1" } }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "peer": true + }, "sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -62898,6 +64582,12 @@ "integrity": "sha512-qUqsWoBquEdERe10EW8vLp3jT25s/ssG1/qX5gZ4wu15OZpmSMFI2v+fWlRhLfykA5rFtlJ1ME8A8pm/peV4WA==", "requires": {} }, + "stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", + "peer": true + }, "supabase-tests": { "version": "file:tests", "requires": {