diff --git a/apps/docs/components/reference/CLICommandSection.tsx b/apps/docs/components/reference/CLICommandSection.tsx new file mode 100644 index 00000000000..5fed86e034d --- /dev/null +++ b/apps/docs/components/reference/CLICommandSection.tsx @@ -0,0 +1,129 @@ +import CodeBlock from '~/components/CodeBlock/CodeBlock' +import Options from '~/components/Options' +import Param from '~/components/Params' +import RefSubLayout from '~/layouts/ref/RefSubLayout' + +interface ICommonFunc { + id: string + title: string + slug: string + product: string + libs: string + items: ICommonFunc[] +} + +interface IRefFunctionSection { + funcData: any + commonFuncData: ICommonFunc + spec: any +} + +export type Flag = { + id: string + name: string + description: string + default_value: string + accepted_values: AcceptedValue[] +} + +export type AcceptedValue = { + id: string + name: string + type: 'string' | 'boolean' | 'object' + description?: string +} + +export type Command = { + id: string + title: string + description: string + flags?: Flag[] + summary: string + tags?: [] + links?: [] + subcommands?: [] + usage?: string +} + +const CliCommandSection = (props) => { + const command = props.spec.commands.find((x: any) => x.id === props.funcData.id) + + return ( + + +
+
+
+

+ {command.summary} +

+
+ + {/* {command.usage && ( + + {command.usage} + + )} */} + + {command.subcommands.length > 0 && ( +
+

Available Commands

+ +
+ )} + {command.flags.length > 0 && ( + <> +

Flags

+
    + {command.flags.map((flag: Flag) => ( + <> +
  • + + {flag?.accepted_values && ( + + {flag?.accepted_values.map((value) => { + return + })} + + )} + +
  • + + ))} +
+ + )} +
+
+
+ + {command.usage && ( + + {command.usage} + + )} + +
+ ) +} + +export default CliCommandSection diff --git a/apps/docs/components/reference/RefSectionHandler.tsx b/apps/docs/components/reference/RefSectionHandler.tsx index 4898f6433b1..e477984ebfe 100644 --- a/apps/docs/components/reference/RefSectionHandler.tsx +++ b/apps/docs/components/reference/RefSectionHandler.tsx @@ -6,12 +6,16 @@ import components from '~/components' import RefEducationSection from '~/components/reference/RefEducationSection' import RefFunctionSection from '~/components/reference/RefFunctionSection' import OldLayout from '~/layouts/Default' +import RefSubLayout from '~/layouts/ref/RefSubLayout' +import CliCommandSection from './CLICommandSection' interface Props { sections: any[] // to do spec: any // to do typeSpec: any // to do pageProps: any // to do, from staticProps + + type: 'client-lib' | 'cli' | 'api' } const RefSectionHandler = (props) => { @@ -41,27 +45,35 @@ const RefSectionHandler = (props) => { ) } - return props.sections.map((x) => { - switch (x.isFunc) { - case false: - const markdownData = props.pageProps.docs.find((doc) => doc.id === x.id) - console.log(markdownData) + return ( + + {props.sections.map((x) => { + switch (x.isFunc) { + case false: + const markdownData = props.pageProps.docs.find((doc) => doc.id === x.id) + console.log(markdownData) - return - break + return + break - default: - return ( - - ) - break - } - }) + default: + if (props.type === 'cli') { + return + } else { + return ( + + ) + } + break + } + })} + + ) } export default RefSectionHandler diff --git a/apps/docs/docs/ref/cli/cli.mdx b/apps/docs/docs/ref/cli/cli.mdx deleted file mode 100644 index 5bfbe7e543a..00000000000 --- a/apps/docs/docs/ref/cli/cli.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -id: intro -slug: / -sidebar_position: 1 -sidebar_label: Supabase CLI -title: Supabase CLI -hide_table_of_contents: true ---- - -The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform. -The CLI is still under development, but it contains all the functionality for working with your Supabase projects and the Supabase Platform. - -- Run Supabase locally: [`supabase start`](/docs/reference/cli/usage#supabase-start) -- Manage database migrations: [`supabase migration`](/docs/reference/cli/usage#supabase-migration) -- CI/CD for releasing to production: [`supabase db push`](/docs/reference/cli/usage#supabase-db-push) -- Manage your Supabase projects: [`supabase projects`](/docs/reference/cli/usage#supabase-projects) -- Generate types directly from your database schema: [`supabase gen types`](/docs/reference/cli/usage#supabase-gen) - - A [community-supported GitHub Action](https://github.com/lyqht/generate-supabase-db-types-github-action) to generate TypeScript types -- Shell autocomplete: [`supabase completion`](/docs/reference/cli/usage#supabase-completion) - - A [community-supported Fig autocomplete spec](https://fig.io/manual/supabase) for macOS terminal - -## Additional Links - -- [Install the Supabase CLI](/docs/guides/cli) -- [Source code](https://github.com/supabase/cli) -- [Known bugs and issues](https://github.com/supabase/cli/issues) -- [Supabase CLI v1 and Management API Beta](https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta) -- [The CLI team announcing CLI V1 and Management API Beta - Video](https://www.youtube.com/watch?v=OpPOaJI_Z28) diff --git a/apps/docs/docs/ref/cli/introduction.mdx b/apps/docs/docs/ref/cli/introduction.mdx new file mode 100644 index 00000000000..31ed416a896 --- /dev/null +++ b/apps/docs/docs/ref/cli/introduction.mdx @@ -0,0 +1,40 @@ +--- +id: intro +slug: / +sidebar_position: 1 +sidebar_label: Supabase CLI +title: Supabase CLI +hide_table_of_contents: true +--- + + + + + The Supabase CLI provides tools to develop your project locally and deploy to the Supabase Platform. + The CLI is still under development, but it contains all the functionality for working with your Supabase projects and the Supabase Platform. + + - Run Supabase locally: [`supabase start`](/docs/reference/cli/usage#supabase-start) + - Manage database migrations: [`supabase migration`](/docs/reference/cli/usage#supabase-migration) + - CI/CD for releasing to production: [`supabase db push`](/docs/reference/cli/usage#supabase-db-push) + - Manage your Supabase projects: [`supabase projects`](/docs/reference/cli/usage#supabase-projects) + - Generate types directly from your database schema: [`supabase gen types`](/docs/reference/cli/usage#supabase-gen) + - A [community-supported GitHub Action](https://github.com/lyqht/generate-supabase-db-types-github-action) to generate TypeScript types + - Shell autocomplete: [`supabase completion`](/docs/reference/cli/usage#supabase-completion) + + - A [community-supported Fig autocomplete spec](https://fig.io/manual/supabase) for macOS terminal + + + + + + Additional Links + + - [Install the Supabase CLI](/docs/guides/cli) + - [Source code](https://github.com/supabase/cli) + - [Known bugs and issues](https://github.com/supabase/cli/issues) + - [Supabase CLI v1 and Management API Beta](https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta) + - [The CLI team announcing CLI V1 and Management API Beta - Video](https://www.youtube.com/watch?v=OpPOaJI_Z28) + + + + diff --git a/apps/docs/layouts/guides/archived.tsx b/apps/docs/layouts/guides/archived.tsx index 3d8b900c887..7ec09aaebfc 100644 --- a/apps/docs/layouts/guides/archived.tsx +++ b/apps/docs/layouts/guides/archived.tsx @@ -14,7 +14,7 @@ interface Props { meta: { title: string; description?: string; hide_table_of_contents?: boolean } children: any toc?: any - currentPage: string + currentPage?: string } const Layout: FC = ({ meta, children }) => { diff --git a/apps/docs/layouts/guides/current.tsx b/apps/docs/layouts/guides/current.tsx index 48c1f4f90fa..00a1a45a09f 100644 --- a/apps/docs/layouts/guides/current.tsx +++ b/apps/docs/layouts/guides/current.tsx @@ -18,7 +18,7 @@ interface Props { } children: any toc?: any - currentPage: string + currentPage?: string } const Layout: FC = (props) => { diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx index 9e551480ebc..59a33376068 100644 --- a/apps/docs/layouts/guides/index.tsx +++ b/apps/docs/layouts/guides/index.tsx @@ -6,7 +6,7 @@ interface Props { meta: { title: string; description?: string; hide_table_of_contents?: boolean; video?: string } children: any toc?: any - currentPage: string + currentPage?: string } const Layout: FC = (props) => { diff --git a/apps/docs/layouts/ref/RefSubLayout.tsx b/apps/docs/layouts/ref/RefSubLayout.tsx index 39f080d7a29..2a216fed366 100644 --- a/apps/docs/layouts/ref/RefSubLayout.tsx +++ b/apps/docs/layouts/ref/RefSubLayout.tsx @@ -55,7 +55,7 @@ const Section: FC = (props) => {
diff --git a/apps/docs/pages/reference/cli/[...slug].tsx b/apps/docs/pages/reference/cli/[...slug].tsx index 084f4af25ae..9e28eab2c06 100644 --- a/apps/docs/pages/reference/cli/[...slug].tsx +++ b/apps/docs/pages/reference/cli/[...slug].tsx @@ -1,7 +1,7 @@ import fs from 'fs' import matter from 'gray-matter' // @ts-expect-error -import cliSpec from '~/../../spec/cli_v1_commands_new_shape.yaml' assert { type: 'yml' } +import spec from '~/../../spec/cli_v1_commands_new_shape.yaml' assert { type: 'yml' } import CodeBlock from '~/components/CodeBlock/CodeBlock' import Options from '~/components/Options' import Param from '~/components/Params' @@ -14,6 +14,15 @@ import { serialize } from 'next-mdx-remote/serialize' import components from '~/components/index' import { MDXRemote } from 'next-mdx-remote' import OldLayout from '~/layouts/Default' +import { flattenSections } from '~/lib/helpers' + +import cliCommonSections from '~/../../spec/common-cli-sections.json' assert { type: 'json' } +import CliCommandSection from '~/components/reference/CLICommandSection' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import RefSectionHandler from '~/components/reference/RefSectionHandler' + +const sections = flattenSections(cliCommonSections) export type AcceptedValue = { id: string @@ -44,6 +53,18 @@ export type Command = { export default function Config(props) { console.log(props.docs) + + console.log( + spec.commands.map((x) => { + return { + id: x.id, + title: x.title, + slug: x.id, + isFunc: true, + } + }) + ) + /* * handle old ref pages */ @@ -56,214 +77,13 @@ export default function Config(props) { ) } - return ( - <> - {console.log(props.docs.filter((doc) => doc.introPage))} - - {props.docs - .filter((doc) => doc.introPage) - .map((item) => ( - - - - ))} - - -
- -
-
-
-

{cliSpec.info.title}

-

{cliSpec.info.description}

-
- -
- {cliSpec.commands.map((command: Command, commandIndex) => { - return ( - - -
-
-
-

- {command.summary} -

-
- - {/* {command.usage && ( - - {command.usage} - - )} */} - - {command.subcommands.length > 0 && ( -
-

- Available Commands -

- -
- )} - {command.flags.length > 0 && ( - <> -

Flags

-
    - {command.flags.map((flag: Flag) => ( - <> -
  • - - {flag?.accepted_values && ( - - {flag?.accepted_values.map((value) => { - return - })} - - )} - -
  • - - ))} -
- - )} -
-
-
- - {command.usage && ( - - {command.usage} - - )} - -
- ) - })} -
-
-
-
- - ) + return } export async function getStaticProps({ params }: { params: { slug: string[] } }) { - // an array of ids of the intro sections for this library - const introPages = ['cli'] - const specPpages = cliSpec.commands - - const pages = [...introPages, ...specPpages] - - /** - * Read all the markdown files that might have - * - custom text - * - call outs - * - important notes regarding implementation - */ - const allMarkdownDocs = await Promise.all( - pages.map(async (x, i) => { - const pathName = `docs/ref/cli/${x}.mdx` - - function checkFileExists(x) { - // console.log('checking this ', x) - if (fs.existsSync(x)) { - return true - } else { - return false - } - } - - const markdownExists = checkFileExists(pathName) - - const fileContents = markdownExists ? fs.readFileSync(pathName, 'utf8') : '' - const { data, content } = matter(fileContents) - - return { - id: x, - title: x, - // ...content, - meta: data, - introPage: introPages.includes(x), - content: content ? await serialize(content || '') : null, - } - }) - ) - - /* - * old content generation - * this is for grabbing to old markdown files - */ - - let slug - if (params.slug.length > 1) { - slug = `docs/reference/cli/${params.slug.join('/')}` - } else { - slug = `docs/reference/cli/${params.slug[0]}` - } - - /* - * handle old ref pages - */ - if (process.env.NEXT_PUBLIC_NEW_DOCS === 'false') { - let doc = getDocsBySlug(slug) - const content = await serialize(doc.content || '') - return { - props: { - /* - * old reference docs are below - */ - ...doc, - content, - toc: toc(doc.content, { maxdepth: 1, firsth1: false }), - }, - } - } else { - return { - props: { - docs: allMarkdownDocs, - }, - } - } + return handleRefStaticProps(sections, params, '/cli', '/cli') } export function getStaticPaths() { - let docs = getAllDocs() - - return { - paths: docs.map(() => { - return { - params: { - slug: docs.map((d) => d.slug), - }, - } - }), - fallback: 'blocking', - } + return handleRefGetStaticPaths() } diff --git a/apps/docs/public/sitemap.xml b/apps/docs/public/sitemap.xml index d7435f9475a..73d015d9034 100644 --- a/apps/docs/public/sitemap.xml +++ b/apps/docs/public/sitemap.xml @@ -12,6 +12,12 @@ 0.5 + + https://supabase.com/docs/404 + weekly + 0.5 + + https://supabase.com/docs/architecture weekly @@ -114,18 +120,6 @@ 0.5 - - https://supabase.com/docs/reference/index - weekly - 0.5 - - - - https://supabase.com/docs/tutorials/nextjs - weekly - 0.5 - - https://supabase.com/docs/guides/api weekly @@ -270,6 +264,18 @@ 0.5 + + https://supabase.com/docs/reference/index + weekly + 0.5 + + + + https://supabase.com/docs/tutorials/nextjs + weekly + 0.5 + + https://supabase.com/docs/getting-started/quickstarts/nextjs weekly @@ -336,18 +342,6 @@ 0.5 - - https://supabase.com/docs/guides/cli/local-development - weekly - 0.5 - - - - https://supabase.com/docs/guides/cli/managing-environments - weekly - 0.5 - - https://supabase.com/docs/guides/auth/auth-apple weekly @@ -534,6 +528,18 @@ 0.5 + + https://supabase.com/docs/guides/cli/local-development + weekly + 0.5 + + + + https://supabase.com/docs/guides/cli/managing-environments + weekly + 0.5 + + https://supabase.com/docs/guides/database/arrays weekly @@ -666,6 +672,30 @@ 0.5 + + https://supabase.com/docs/guides/migrations/firebase-auth + weekly + 0.5 + + + + https://supabase.com/docs/guides/migrations/firebase-storage + weekly + 0.5 + + + + https://supabase.com/docs/guides/migrations/firestore-data + weekly + 0.5 + + + + https://supabase.com/docs/guides/migrations/heroku + weekly + 0.5 + + https://supabase.com/docs/guides/integrations/appsmith weekly @@ -804,30 +834,6 @@ 0.5 - - https://supabase.com/docs/guides/migrations/firebase-auth - weekly - 0.5 - - - - https://supabase.com/docs/guides/migrations/firebase-storage - weekly - 0.5 - - - - https://supabase.com/docs/guides/migrations/firestore-data - weekly - 0.5 - - - - https://supabase.com/docs/guides/migrations/heroku - weekly - 0.5 - - https://supabase.com/docs/guides/realtime/postgres-changes weekly @@ -846,60 +852,6 @@ 0.5 - - https://supabase.com/docs/guides/storage/access-control - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/cdn - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/quickstart - weekly - 0.5 - - - - https://supabase.com/docs/guides/storage/storage-sample - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/examples - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/glossary - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/migrating-to-supabase - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/self-hosting - weekly - 0.5 - - - - https://supabase.com/docs/guides/resources/supabase-cli - weekly - 0.5 - - https://supabase.com/docs/guides/platform/compute-add-ons weekly @@ -954,6 +906,60 @@ 0.5 + + https://supabase.com/docs/guides/resources/examples + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/glossary + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/migrating-to-supabase + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/self-hosting + weekly + 0.5 + + + + https://supabase.com/docs/guides/resources/supabase-cli + weekly + 0.5 + + + + https://supabase.com/docs/guides/storage/access-control + weekly + 0.5 + + + + https://supabase.com/docs/guides/storage/cdn + weekly + 0.5 + + + + https://supabase.com/docs/guides/storage/quickstart + weekly + 0.5 + + + + https://supabase.com/docs/guides/storage/storage-sample + weekly + 0.5 + + https://supabase.com/docs/guides/tutorials/with-angular weekly @@ -1068,30 +1074,6 @@ 0.5 - - https://supabase.com/docs/guides/auth/passwordless-login/email-otp-magic-link - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-messagebird - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-twilio - weekly - 0.5 - - - - https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-vonage - weekly - 0.5 - - https://supabase.com/docs/guides/database/extensions/http weekly @@ -1128,6 +1110,30 @@ 0.5 + + https://supabase.com/docs/guides/auth/passwordless-login/email-otp-magic-link + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-messagebird + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-twilio + weekly + 0.5 + + + + https://supabase.com/docs/guides/auth/passwordless-login/phone-sms-otp-vonage + weekly + 0.5 + + https://supabase.com/docs/guides/functions/examples/index weekly @@ -1248,6 +1254,12 @@ 0.5 + + https://supabase.com/docs/guides/resources/self-hosting/docker + weekly + 0.5 + + https://supabase.com/docs/guides/resources/migrating-to-supabase/firebase-auth weekly @@ -1272,12 +1284,6 @@ 0.5 - - https://supabase.com/docs/guides/resources/self-hosting/docker - weekly - 0.5 - - https://supabase.com/docs/guides/resources/supabase-cli/local-development weekly diff --git a/spec/common-cli-sections.json b/spec/common-cli-sections.json new file mode 100644 index 00000000000..73698c45b5e --- /dev/null +++ b/spec/common-cli-sections.json @@ -0,0 +1,330 @@ +[ + { + "title": "introduction", + "id": "introduction", + "slug": "introduction", + "isFunc": false + }, + { + "title": "general", + "items": [ + { + "id": "supabase-test", + "title": "supabase test", + "slug": "supabase-test", + "isFunc": true + }, + { + "id": "supabase-test-db", + "title": "supabase test db", + "slug": "supabase-test-db", + "isFunc": true + }, + { + "id": "supabase-stop", + "title": "supabase stop", + "slug": "supabase-stop", + "isFunc": true + }, + { + "id": "supabase-status", + "title": "supabase status", + "slug": "supabase-status", + "isFunc": true + }, + { + "id": "supabase-start", + "title": "supabase start", + "slug": "supabase-start", + "isFunc": true + }, + { + "id": "supabase-login", + "title": "supabase login", + "slug": "supabase-login", + "isFunc": true + }, + { + "id": "supabase-link", + "title": "supabase link", + "slug": "supabase-link", + "isFunc": true + }, + { + "id": "supabase-init", + "title": "supabase init", + "slug": "supabase-init", + "isFunc": true + }, + { + "id": "supabase-gen", + "title": "supabase gen", + "slug": "supabase-gen", + "isFunc": true + }, + { + "id": "supabase-gen-types", + "title": "supabase gen types", + "slug": "supabase-gen-types", + "isFunc": true + }, + { + "id": "supabase-gen-types-typescript", + "title": "supabase gen types typescript", + "slug": "supabase-gen-types-typescript", + "isFunc": true + } + ] + }, + { + "title": "secrets", + "items": [ + { + "id": "supabase-secrets", + "title": "supabase secrets", + "slug": "supabase-secrets", + "isFunc": true + }, + { + "id": "supabase-secrets-unset", + "title": "supabase secrets unset", + "slug": "supabase-secrets-unset", + "isFunc": true + }, + { + "id": "supabase-secrets-set", + "title": "supabase secrets set", + "slug": "supabase-secrets-set", + "isFunc": true + }, + { + "id": "supabase-secrets-list", + "title": "supabase secrets list", + "slug": "supabase-secrets-list", + "isFunc": true + } + ] + }, + { + "title": "projects", + "items": [ + { + "id": "supabase-projects", + "title": "supabase projects", + "slug": "supabase-projects", + "isFunc": true + }, + { + "id": "supabase-projects-list", + "title": "supabase projects list", + "slug": "supabase-projects-list", + "isFunc": true + }, + { + "id": "supabase-projects-create", + "title": "supabase projects create", + "slug": "supabase-projects-create", + "isFunc": true + } + ] + }, + { + "title": "organizations", + "items": [ + { + "id": "supabase-orgs", + "title": "supabase orgs", + "slug": "supabase-orgs", + "isFunc": true + }, + { + "id": "supabase-orgs-list", + "title": "supabase orgs list", + "slug": "supabase-orgs-list", + "isFunc": true + } + ] + }, + { + "title": "migrations", + "items": [ + { + "id": "supabase-migration", + "title": "supabase migration", + "slug": "supabase-migration", + "isFunc": true + }, + { + "id": "supabase-migration-new", + "title": "supabase migration new", + "slug": "supabase-migration-new", + "isFunc": true + }, + { + "id": "supabase-migration-list", + "title": "supabase migration list", + "slug": "supabase-migration-list", + "isFunc": true + } + ] + }, + { + "title": "Edge Functions", + "items": [ + { + "id": "supabase-functions", + "title": "supabase functions", + "slug": "supabase-functions", + "isFunc": true + }, + { + "id": "supabase-functions-serve", + "title": "supabase functions serve", + "slug": "supabase-functions-serve", + "isFunc": true + }, + { + "id": "supabase-functions-new", + "title": "supabase functions new", + "slug": "supabase-functions-new", + "isFunc": true + }, + { + "id": "supabase-functions-deploy", + "title": "supabase functions deploy", + "slug": "supabase-functions-deploy", + "isFunc": true + }, + { + "id": "supabase-functions-delete", + "title": "supabase functions delete", + "slug": "supabase-functions-delete", + "isFunc": true + } + ] + }, + { + "title": "Domains", + "Items": [ + { + "id": "supabase-domains", + "title": "supabase domains", + "slug": "supabase-domains", + "isFunc": true + }, + { + "id": "supabase-domains-reverify", + "title": "supabase domains reverify", + "slug": "supabase-domains-reverify", + "isFunc": true + }, + { + "id": "supabase-domains-get", + "title": "supabase domains get", + "slug": "supabase-domains-get", + "isFunc": true + }, + { + "id": "supabase-domains-delete", + "title": "supabase domains delete", + "slug": "supabase-domains-delete", + "isFunc": true + }, + { + "id": "supabase-domains-create", + "title": "supabase domains create", + "slug": "supabase-domains-create", + "isFunc": true + }, + { + "id": "supabase-domains-activate", + "title": "supabase domains activate", + "slug": "supabase-domains-activate", + "isFunc": true + } + ] + }, + { + "title": "Database", + "items": [ + { "id": "supabase-db", "title": "supabase db", "slug": "supabase-db", "isFunc": true }, + { + "id": "supabase-db-reset", + "title": "supabase db reset", + "slug": "supabase-db-reset", + "isFunc": true + }, + { + "id": "supabase-db-remote", + "title": "supabase db remote", + "slug": "supabase-db-remote", + "isFunc": true + }, + { + "id": "supabase-db-remote-commit", + "title": "supabase db remote commit", + "slug": "supabase-db-remote-commit", + "isFunc": true + }, + { + "id": "supabase-db-remote-changes", + "title": "supabase db remote changes", + "slug": "supabase-db-remote-changes", + "isFunc": true + }, + { + "id": "supabase-db-push", + "title": "supabase db push", + "slug": "supabase-db-push", + "isFunc": true + }, + { + "id": "supabase-db-lint", + "title": "supabase db lint", + "slug": "supabase-db-lint", + "isFunc": true + }, + { + "id": "supabase-db-diff", + "title": "supabase db diff", + "slug": "supabase-db-diff", + "isFunc": true + } + ] + }, + { + "title": "Completion", + "items": [ + { + "id": "supabase-completion", + "title": "supabase completion", + "slug": "supabase-completion", + "isFunc": true + }, + { + "id": "supabase-completion-zsh", + "title": "supabase completion zsh", + "slug": "supabase-completion-zsh", + "isFunc": true + }, + { + "id": "supabase-completion-powershell", + "title": "supabase completion powershell", + "slug": "supabase-completion-powershell", + "isFunc": true + }, + { + "id": "supabase-completion-fish", + "title": "supabase completion fish", + "slug": "supabase-completion-fish", + "isFunc": true + }, + { + "id": "supabase-completion-bash", + "title": "supabase completion bash", + "slug": "supabase-completion-bash", + "isFunc": true + } + ] + } +]