Files
supabase/apps/docs/scripts/llms.ts
Charis f58eead769 chore(docs): clean up environment variables (#36036)
Our environment variables are a bit of a mess, so cleaning them up:

- We have duplicate environment variables that resolve to the same thing
but just have different names, deduplicating all of these
- We have a .env.development (for publicly safe variables) and a
.env.example, we
really only need one
- Privately, we have a .env (for running scripts) and a .env.local (for
Next.js). Changing the dotenv source for scripts, so again we only need
one
2025-05-29 16:35:26 -04:00

107 lines
2.6 KiB
TypeScript

import _configureDotEnv from './utils/dotenv'
import 'dotenv/config'
import fs from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import {
fetchCliLibReferenceSource,
fetchCSharpLibReferenceSource,
fetchDartLibReferenceSource,
fetchGuideSources,
fetchJsLibReferenceSource,
fetchKtLibReferenceSource,
fetchPythonLibReferenceSource,
fetchSwiftLibReferenceSource,
type SearchSource,
} from './search/sources/index.js'
const _ = _configureDotEnv
interface Source {
title: string
/**
* Path relative to https://supabase.com. No leading slash
*/
relPath: string
fetch: () => Promise<SearchSource[]>
}
function toLink(source: Source) {
return `[${source.title}](https://supabase.com/${source.relPath})`
}
const SOURCES: Source[] = [
{
title: 'Supabase Guides',
relPath: 'llms/guides.txt',
fetch: fetchGuideSources,
},
{
title: 'Supabase Reference (JavaScript)',
relPath: 'llms/js.txt',
fetch: fetchJsLibReferenceSource,
},
{
title: 'Supabase Reference (Dart)',
relPath: 'llms/dart.txt',
fetch: fetchDartLibReferenceSource,
},
{
title: 'Supabase Reference (Swift)',
relPath: 'llms/swift.txt',
fetch: fetchSwiftLibReferenceSource,
},
{
title: 'Supabase Reference (Kotlin)',
relPath: 'llms/kt.txt',
fetch: fetchKtLibReferenceSource,
},
{
title: 'Supabase Reference (Python)',
relPath: 'llms/py.txt',
fetch: fetchPythonLibReferenceSource,
},
{
title: 'Supabase Reference (C#)',
relPath: 'llms/csharp.txt',
fetch: fetchCSharpLibReferenceSource,
},
{
title: 'Supabase Reference (CLI)',
relPath: 'llms/cli.txt',
fetch: fetchCliLibReferenceSource,
},
]
async function generateMainLlmsTxt() {
const sourceLinks = SOURCES.map((source) => `- ${toLink(source)}`).join('\n')
const fullText = `# Supabase Docs\n\n${sourceLinks}`
fs.writeFile('public/llms.txt', fullText)
}
async function generateSourceLlmsTxt(sourceDefn: Source) {
const source = await sourceDefn.fetch()
const sourceText = source
.map((section) => {
section.process()
return section.extractIndexedContent()
})
.join('\n\n')
const fullText = sourceDefn.title + '\n\n' + sourceText
fs.writeFile(`public/${sourceDefn.relPath}`, fullText)
}
async function generateLlmsTxt() {
try {
await fs.mkdir('public/llms', { recursive: true })
await Promise.all([generateMainLlmsTxt(), ...SOURCES.map(generateSourceLlmsTxt)])
} catch (err) {
console.error(err)
}
}
if (process.argv[1] === fileURLToPath(import.meta.url)) {
generateLlmsTxt()
}