import { type GuideModel } from '../../../resources/guide/guideModel.js' import { GuideModelLoader } from '../../../resources/guide/guideModelLoader.js' import { LintWarningsGuideLoader, type LintWarningsGuideSource } from './lint-warnings-guide.js' import { MarkdownLoader, type MarkdownSource } from './markdown.js' import { fetchPartners, IntegrationLoader, type IntegrationSource } from './partner-integrations.js' import { ClientLibReferenceLoader, CliReferenceLoader, loadClientLibReferenceFromNewPipeline, OpenApiReferenceLoader, type ClientLibReferenceSource, type CliReferenceSource, type OpenApiReferenceSource, } from './reference-doc.js' import { fetchTroubleshootingSources, type TroubleshootingSource } from './troubleshooting.js' export type SearchSource = | MarkdownSource | OpenApiReferenceSource | ClientLibReferenceSource | CliReferenceSource | TroubleshootingSource | IntegrationSource | LintWarningsGuideSource export async function fetchGuideSources() { const guides = (await GuideModelLoader.allFromFs()).unwrapLeft() return guides.map((guide: GuideModel) => MarkdownLoader.fromGuideModel('guide', guide)) } export async function fetchOpenApiReferenceSource() { return new OpenApiReferenceLoader( 'api', '/reference/api', { title: 'Management API Reference' }, 'spec/transforms/api_v1_openapi_deparsed.json', 'spec/common-api-sections.json' ).load() } export async function fetchJsLibReferenceSource() { // JS v2 is driven by the new reference pipeline. Ingest search sources from // the generated `content/reference/javascript/v2/` outputs so embeddings // never drift from what the renderer shows. return loadClientLibReferenceFromNewPipeline({ source: 'js-lib', path: '/reference/javascript', meta: { title: 'JavaScript Reference', language: 'JavaScript' }, contentDir: 'content/reference/javascript/v2', }) } export async function fetchServerLibReferenceSource() { // Server SDK is driven by the new reference pipeline. Ingest search sources // from the generated `content/reference/server/v1/` outputs so embeddings // never drift from what the renderer shows. return loadClientLibReferenceFromNewPipeline({ source: 'server-lib', path: '/reference/server', meta: { title: 'Server Reference', language: 'TypeScript' }, contentDir: 'content/reference/server/v1', }) } export async function fetchMiddlewareLibReferenceSource() { // Middleware SDK is driven by the new reference pipeline. Ingest search // sources from the generated `content/reference/middleware/v1/` outputs so // embeddings never drift from what the renderer shows. return loadClientLibReferenceFromNewPipeline({ source: 'middleware-lib', path: '/reference/middleware', meta: { title: 'Middleware Reference', language: 'TypeScript' }, contentDir: 'content/reference/middleware/v1', }) } export async function fetchDartLibReferenceSource() { // Dart v2 is driven by the new reference pipeline. Ingest search sources from // the generated `content/reference/dart/v2/` outputs so embeddings never // drift from what the renderer shows. return loadClientLibReferenceFromNewPipeline({ source: 'dart-lib', path: '/reference/dart', meta: { title: 'Dart Reference', language: 'Dart' }, contentDir: 'content/reference/dart/v2', }) } export async function fetchPythonLibReferenceSource() { return new ClientLibReferenceLoader( 'python-lib', '/reference/python', { title: 'Python Reference', language: 'Python' }, 'spec/supabase_py_v2.yml', 'spec/common-client-libs-sections.json' ).load() } export async function fetchCSharpLibReferenceSource() { return new ClientLibReferenceLoader( 'csharp-lib', '/reference/csharp', { title: 'C# Reference', language: 'C#' }, 'spec/supabase_csharp_v8.yml', 'spec/common-client-libs-sections.json' ).load() } export async function fetchSwiftLibReferenceSource() { return new ClientLibReferenceLoader( 'swift-lib', '/reference/swift', { title: 'Swift Reference', language: 'Swift' }, 'spec/supabase_swift_v2.yml', 'spec/common-client-libs-sections.json' ).load() } export async function fetchKtLibReferenceSource() { return new ClientLibReferenceLoader( 'kt-lib', '/reference/kotlin', { title: 'Kotlin Reference', language: 'Kotlin' }, 'spec/supabase_kt_v1.yml', 'spec/common-client-libs-sections.json' ).load() } export async function fetchCliLibReferenceSource() { return new CliReferenceLoader( 'cli', '/reference/cli', { title: 'CLI Reference', platform: 'cli' }, 'spec/cli_v1_commands.yaml', 'spec/common-cli-sections.json' ).load() } export async function fetchLintWarningsGuideSources() { return new LintWarningsGuideLoader( 'guide', '/guides/observability/advisors', 'supabase', 'splinter', 'main', 'docs' ).load() } /** * Fetches all the sources we want to index for search */ export async function fetchAllSources(fullIndex: boolean) { const guideSources = fetchGuideSources() const lintWarningsGuideSources = fetchLintWarningsGuideSources() const openApiReferenceSource = fetchOpenApiReferenceSource() const jsLibReferenceSource = fetchJsLibReferenceSource() const serverLibReferenceSource = fullIndex ? fetchServerLibReferenceSource() : [] const middlewareLibReferenceSource = fullIndex ? fetchMiddlewareLibReferenceSource() : [] const dartLibReferenceSource = fullIndex ? fetchDartLibReferenceSource() : [] const pythonLibReferenceSource = fullIndex ? fetchPythonLibReferenceSource() : [] const cSharpLibReferenceSource = fullIndex ? fetchCSharpLibReferenceSource() : [] const swiftLibReferenceSource = fullIndex ? fetchSwiftLibReferenceSource() : [] const ktLibReferenceSource = fullIndex ? fetchKtLibReferenceSource() : [] const cliReferenceSource = fullIndex ? fetchCliLibReferenceSource() : [] const partnerIntegrationSources = fullIndex ? fetchPartners() .then((partners) => partners ? Promise.all( partners.map((partner) => new IntegrationLoader(partner.slug, partner).load()) ) : [] ) .then((data) => data.flat()) : [] // Load troubleshooting articles from local MDX files const troubleshootingSources = fetchTroubleshootingSources() .then((loaders) => Promise.all(loaders.map((loader) => loader.load()))) .then((data) => data.flat()) // Type assertion required because ReferenceLoader.load() returns Promise // which widens the inferred union type. All concrete sources in this array are valid // SearchSource types (MarkdownSource, OpenApiReferenceSource, etc.). const sources = ( await Promise.all([ guideSources, lintWarningsGuideSources, openApiReferenceSource, jsLibReferenceSource, serverLibReferenceSource, middlewareLibReferenceSource, dartLibReferenceSource, pythonLibReferenceSource, cSharpLibReferenceSource, swiftLibReferenceSource, ktLibReferenceSource, cliReferenceSource, partnerIntegrationSources, troubleshootingSources, ]) ).flat() as SearchSource[] return sources }