import { useEffect } from 'react' import fs from 'fs' import toc from 'markdown-toc' import matter from 'gray-matter' import { MDXRemote } from 'next-mdx-remote' import { serialize } from 'next-mdx-remote/serialize' import components from '~/components/index' import { getAllDocs, getDocsBySlug } from '~/lib/docs' import ReactMarkdown from 'react-markdown' // @ts-ignore import jsTypeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' // @ts-ignore import examples from '~/../../spec/examples/examples.yml' assert { type: 'yml' } // @ts-expect-error import jsSpec from '~/../../spec/supabase_js_v2_temp_new_shape.yml' assert { type: 'yml' } // @ts-expect-error import commonLibSpec from '~/../../spec/common-client-libs.yml' assert { type: 'yml' } import { IconDatabase, Tabs } from 'ui' import CodeBlock from '~/components/CodeBlock/CodeBlock' import { useRouter } from 'next/router' import { extractTsDocNode, generateParameters } from '~/lib/refGenerator/helpers' import Param from '~/components/Params' import Options from '~/components/Options' import RefSubLayout from '~/layouts/ref/RefSubLayout' import OldLayout from '~/layouts/Default' export default function JSReference(props) { const router = useRouter() // will be something like: auth-signout const slug = router.query.slug[0] // look in the common-libs file for that slug, return its id const commonId = commonLibSpec.functions.find((fn) => fn.slug === slug).id const requestedFunction = jsSpec.functions.find((fn) => fn.id === commonId) /* * handle old ref pages */ if (process.env.NEXT_PUBLIC_NEW_DOCS === 'false') { return ( // @ts-ignore ) } const hasTsRef = requestedFunction['$ref'] || null const tsDefinition = hasTsRef && extractTsDocNode(hasTsRef, jsTypeSpec) const parameters = hasTsRef ? generateParameters(tsDefinition) : '' //const functionMarkdownContent = props?.docs[itemIndex]?.content const shortText = hasTsRef ? tsDefinition.signatures[0].comment.shortText : '' return ( <> fn.id === requestedFunction.id)?.title ?? examples.functions.find((fn) => fn.id === requestedFunction.id)?.id ?? requestedFunction.name ?? requestedFunction.id } id={requestedFunction.id} slug={ commonLibSpec.functions.find((commonItem) => commonItem.id === requestedFunction.id) .slug } > <> {shortText && {shortText}} {requestedFunction.description && ( {requestedFunction.description} )} {/* {functionMarkdownContent && ( )} */} {requestedFunction.notes && ( {requestedFunction.notes} )} {/* // parameters */} {parameters && ( Parameters {parameters.map((param) => { // grab override params from yaml file const overrideParams = requestedFunction.overrideParams // params from the yaml file can override the params from parameters if it matches the name const overide = overrideParams?.filter((x) => { return param.name === x.name }) const paramItem = overide?.length > 0 ? overide[0] : param return ( {paramItem.subContent && ( {param.subContent.map((param) => { return })} )} ) })} )} > {requestedFunction.examples && ( <> {requestedFunction.examples && requestedFunction.examples.map((example, exampleIndex) => { const exampleString = ` import { createClient } from '@supabase/supabase-js' // Create a single supabase client for interacting with your database const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') ` const currentExampleId = example.id const staticExample = requestedFunction.examples[exampleIndex] const response = staticExample.response const sql = staticExample?.data?.sql const tables = staticExample?.data?.tables return ( {tables && tables.length > 0 && tables.map((table) => { return ( {table.name} ) })} {sql && ( {sql} )} {exampleString + (example.code && example.code .replace('```', '') .replace('js', '') .replace('```', ''))} {response && ( <> {response} > )} ) })} > )} > ) } export async function getStaticProps({ params }: { params: { slug: string[] } }) { const pages = jsSpec.functions.map((x) => x.id) /** * 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/js/${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, 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/javascript/${params.slug.join('/')}` } else { slug = `docs/reference/javascript/${params.slug[0]}` } let doc = getDocsBySlug(slug) const content = await serialize(doc.content || '') /* * handle old ref pages */ if (process.env.NEXT_PUBLIC_NEW_DOCS === 'false') { return { props: { /* * old reference docs are below */ ...doc, content, toc: toc(doc.content, { maxdepth: 1, firsth1: false }), }, } } else { return { props: { docs: allMarkdownDocs, }, } } } export function getStaticPaths() { let docs = getAllDocs() return { paths: docs.map(() => { return { params: { slug: docs.map((d) => d.slug), }, } }), fallback: 'blocking', } }
{requestedFunction.description}