mirror of
https://github.com/supabase/supabase.git
synced 2026-10-15 22:29:11 +03:00
feat: llms.txt (#33780)
* feat: llms.txt * feat: split llms.txt into multiple files We have too many docs, so the concatenated text file uses an unreasonable amount of tokens. Chunk it up a little so it's more usable.
This commit is contained in:
1 parent
caaa55ee57
commit
7dce37752a
14 files changed
+284
-85
No files matched your search
@@ -26,6 +26,9 @@ yarn-error.log*
|
||||
|
||||
# Sitemap
|
||||
public/sitemap.xml
|
||||
# llms.txt (generated)
|
||||
public/llms.txt
|
||||
public/llms/
|
||||
|
||||
# Copied examples folder
|
||||
/examples/
|
||||
@@ -30,7 +30,13 @@ export interface IFunctionDefinition {
|
||||
id: string
|
||||
$ref: string
|
||||
description: string
|
||||
examples?: []
|
||||
examples?: IFunctionExample[]
|
||||
}
|
||||
|
||||
export interface IFunctionExample {
|
||||
id: string
|
||||
name: string
|
||||
code: string
|
||||
}
|
||||
|
||||
export interface ICommonBase {
|
||||
|
||||
@@ -15,12 +15,6 @@ import { BASE_PATH } from '~/lib/constants'
|
||||
import { GUIDES_DIRECTORY, isValidGuideFrontmatter, type GuideFrontmatter } from '~/lib/docs'
|
||||
import { newEditLink } from './GuidesMdx.template'
|
||||
|
||||
/**
|
||||
* [TODO Charis]
|
||||
*
|
||||
* This is kind of a dumb place for this to be, clean up later as part of
|
||||
* cleaning up navigation menus.
|
||||
*/
|
||||
const PUBLISHED_SECTIONS = [
|
||||
'ai',
|
||||
'api',
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
"build": "next build",
|
||||
"build:analyze": "ANALYZE=true next build",
|
||||
"build:sitemap": "tsx ./internals/generate-sitemap.ts",
|
||||
"postbuild": "pnpm run build:sitemap && ./../../scripts/upload-static-assets.sh",
|
||||
"build:llms": "tsx ./scripts/llms.ts",
|
||||
"postbuild": "pnpm run build:sitemap && pnpm run build:llms && ./../../scripts/upload-static-assets.sh",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"lint:mdx": "supa-mdx-lint content --config ../../supa-mdx-lint.config.toml",
|
||||
@@ -21,7 +22,7 @@
|
||||
"test": "vitest --exclude \"**/*.smoke.test.ts\"",
|
||||
"test:smoke": "pnpm run codegen:references && vitest -t \"prod smoke test\"",
|
||||
"embeddings": "tsx scripts/search/generate-embeddings.ts",
|
||||
"embeddings:refresh": "pnpm run embeddings -- --refresh",
|
||||
"embeddings:refresh": "pnpm run embeddings --refresh",
|
||||
"troubleshooting:sync": "node features/docs/Troubleshooting.script.mjs",
|
||||
"last-changed": "tsx scripts/last-changed.ts",
|
||||
"last-changed:reset": "pnpm run last-changed -- --reset",
|
||||
@@ -114,6 +115,7 @@
|
||||
"devDependencies": {
|
||||
"@aws-sdk/client-secrets-manager": "^3.410.0",
|
||||
"@supabase/supa-mdx-lint": "0.2.6-alpha",
|
||||
"@types/common-tags": "^1.8.4",
|
||||
"@types/estree": "1.0.5",
|
||||
"@types/hast": "^2.3.4",
|
||||
"@types/jsrsasign": "^10.5.12",
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
import 'dotenv/config'
|
||||
import fs from 'node:fs/promises'
|
||||
|
||||
import {
|
||||
fetchCliLibReferenceSource,
|
||||
fetchCSharpLibReferenceSource,
|
||||
fetchDartLibReferenceSource,
|
||||
fetchGuideSources,
|
||||
fetchJsLibReferenceSource,
|
||||
fetchKtLibReferenceSource,
|
||||
fetchPythonLibReferenceSource,
|
||||
fetchSwiftLibReferenceSource,
|
||||
type SearchSource,
|
||||
} from './search/sources'
|
||||
|
||||
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 (require.main === module) {
|
||||
generateLlmsTxt()
|
||||
}
|
||||
@@ -1,12 +1,10 @@
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
import dotenv from 'dotenv'
|
||||
import 'dotenv/config'
|
||||
import { parseArgs } from 'node:util'
|
||||
import { OpenAI } from 'openai'
|
||||
import { v4 as uuidv4 } from 'uuid'
|
||||
import type { Json, Section } from '../helpers.mdx'
|
||||
import { fetchSources } from './sources'
|
||||
|
||||
dotenv.config()
|
||||
import { fetchAllSources } from './sources'
|
||||
|
||||
const args = parseArgs({
|
||||
options: {
|
||||
@@ -56,7 +54,7 @@ async function generateEmbeddings() {
|
||||
|
||||
const refreshDate = new Date()
|
||||
|
||||
const embeddingSources = await fetchSources()
|
||||
const embeddingSources = await fetchAllSources()
|
||||
|
||||
console.log(`Discovered ${embeddingSources.length} pages`)
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { createAppAuth } from '@octokit/auth-app'
|
||||
import { Octokit } from '@octokit/core'
|
||||
import { paginateGraphql } from '@octokit/plugin-paginate-graphql'
|
||||
import { createHash } from 'crypto'
|
||||
import crypto, { createHash } from 'node:crypto'
|
||||
import { BaseLoader, BaseSource } from './base'
|
||||
|
||||
export const ExtendedOctokit = Octokit.plugin(paginateGraphql)
|
||||
@@ -25,6 +25,12 @@ export type DiscussionsResponse = {
|
||||
}
|
||||
}
|
||||
|
||||
const appId = process.env.SEARCH_GITHUB_APP_ID ?? process.env.DOCS_GITHUB_APP_ID
|
||||
const installationId =
|
||||
process.env.SEARCH_GITHUB_APP_INSTALLATION_ID ?? process.env.DOCS_GITHUB_APP_INSTALLATION_ID
|
||||
const privateKey =
|
||||
process.env.SEARCH_GITHUB_APP_PRIVATE_KEY ?? process.env.DOCS_GITHUB_APP_PRIVATE_KEY
|
||||
|
||||
/**
|
||||
* Fetches GitHub discussions for a repository + category
|
||||
*/
|
||||
@@ -32,9 +38,9 @@ export async function fetchDiscussions(owner: string, repo: string, categoryId:
|
||||
const octokit = new ExtendedOctokit({
|
||||
authStrategy: createAppAuth,
|
||||
auth: {
|
||||
appId: process.env.SEARCH_GITHUB_APP_ID,
|
||||
installationId: process.env.SEARCH_GITHUB_APP_INSTALLATION_ID,
|
||||
privateKey: process.env.SEARCH_GITHUB_APP_PRIVATE_KEY,
|
||||
appId,
|
||||
installationId,
|
||||
privateKey: crypto.createPrivateKey(privateKey).export({ type: 'pkcs8', format: 'pem' }),
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { sep } from 'node:path'
|
||||
|
||||
import {
|
||||
GitHubDiscussionLoader,
|
||||
type GitHubDiscussionSource,
|
||||
@@ -26,97 +27,139 @@ export type SearchSource =
|
||||
| GitHubDiscussionSource
|
||||
| IntegrationSource
|
||||
|
||||
/**
|
||||
* Fetches all the sources we want to index for search
|
||||
*/
|
||||
export async function fetchSources() {
|
||||
const openApiReferenceSource = new OpenApiReferenceLoader(
|
||||
export async function fetchGuideSources() {
|
||||
return (
|
||||
await Promise.all(
|
||||
(await walk('content/guides'))
|
||||
.filter(
|
||||
({ path }) =>
|
||||
/\.mdx?$/.test(path) &&
|
||||
!ignoredFiles.includes(path) &&
|
||||
!path.split(sep).some((part) => part.startsWith('_'))
|
||||
)
|
||||
.map((entry) => new MarkdownLoader('guide', entry.path, { yaml: true }).load())
|
||||
)
|
||||
).flat()
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
const jsLibReferenceSource = new ClientLibReferenceLoader(
|
||||
export async function fetchJsLibReferenceSource() {
|
||||
return new ClientLibReferenceLoader(
|
||||
'js-lib',
|
||||
'/reference/javascript',
|
||||
{ title: 'JavaScript Reference' },
|
||||
'spec/supabase_js_v2.yml',
|
||||
'spec/common-client-libs-sections.json'
|
||||
).load()
|
||||
}
|
||||
|
||||
const dartLibReferenceSource = new ClientLibReferenceLoader(
|
||||
export async function fetchDartLibReferenceSource() {
|
||||
return new ClientLibReferenceLoader(
|
||||
'dart-lib',
|
||||
'/reference/dart',
|
||||
{ title: 'Dart Reference' },
|
||||
'spec/supabase_dart_v2.yml',
|
||||
'spec/common-client-libs-sections.json'
|
||||
).load()
|
||||
}
|
||||
|
||||
const pythonLibReferenceSource = new ClientLibReferenceLoader(
|
||||
export async function fetchPythonLibReferenceSource() {
|
||||
return new ClientLibReferenceLoader(
|
||||
'python-lib',
|
||||
'/reference/python',
|
||||
{ title: 'Python Reference' },
|
||||
'spec/supabase_py_v2.yml',
|
||||
'spec/common-client-libs-sections.json'
|
||||
).load()
|
||||
}
|
||||
|
||||
const cSharpLibReferenceSource = new ClientLibReferenceLoader(
|
||||
export async function fetchCSharpLibReferenceSource() {
|
||||
return new ClientLibReferenceLoader(
|
||||
'csharp-lib',
|
||||
'/reference/csharp',
|
||||
{ title: 'C# Reference' },
|
||||
'spec/supabase_csharp_v0.yml',
|
||||
'spec/common-client-libs-sections.json'
|
||||
).load()
|
||||
}
|
||||
|
||||
const swiftLibReferenceSource = new ClientLibReferenceLoader(
|
||||
export async function fetchSwiftLibReferenceSource() {
|
||||
return new ClientLibReferenceLoader(
|
||||
'swift-lib',
|
||||
'/reference/swift',
|
||||
{ title: 'Swift Reference' },
|
||||
'spec/supabase_swift_v2.yml',
|
||||
'spec/common-client-libs-sections.json'
|
||||
).load()
|
||||
}
|
||||
|
||||
const ktLibReferenceSource = new ClientLibReferenceLoader(
|
||||
export async function fetchKtLibReferenceSource() {
|
||||
return new ClientLibReferenceLoader(
|
||||
'kt-lib',
|
||||
'/reference/kotlin',
|
||||
{ title: 'Kotlin Reference' },
|
||||
'spec/supabase_kt_v1.yml',
|
||||
'spec/common-client-libs-sections.json'
|
||||
).load()
|
||||
}
|
||||
|
||||
const cliReferenceSource = new CliReferenceLoader(
|
||||
export async function fetchCliLibReferenceSource() {
|
||||
return new CliReferenceLoader(
|
||||
'cli',
|
||||
'/reference/cli',
|
||||
{ title: 'CLI Reference' },
|
||||
'spec/cli_v1_commands.yaml',
|
||||
'spec/common-cli-sections.json'
|
||||
).load()
|
||||
}
|
||||
|
||||
const guideSources = (await walk('content/guides'))
|
||||
.filter(
|
||||
({ path }) =>
|
||||
/\.mdx?$/.test(path) &&
|
||||
!ignoredFiles.includes(path) &&
|
||||
!path.split(sep).some((part) => part.startsWith('_'))
|
||||
/**
|
||||
* Fetches all the sources we want to index for search
|
||||
*/
|
||||
export async function fetchAllSources() {
|
||||
const guideSources = fetchGuideSources()
|
||||
|
||||
const openApiReferenceSource = fetchOpenApiReferenceSource()
|
||||
const jsLibReferenceSource = fetchJsLibReferenceSource()
|
||||
const dartLibReferenceSource = fetchDartLibReferenceSource()
|
||||
const pythonLibReferenceSource = fetchPythonLibReferenceSource()
|
||||
const cSharpLibReferenceSource = fetchCSharpLibReferenceSource()
|
||||
const swiftLibReferenceSource = fetchSwiftLibReferenceSource()
|
||||
const ktLibReferenceSource = fetchKtLibReferenceSource()
|
||||
const cliReferenceSource = fetchCliLibReferenceSource()
|
||||
|
||||
const partnerIntegrationSources = fetchPartners()
|
||||
.then((partners) =>
|
||||
Promise.all(partners.map((partner) => new IntegrationLoader(partner.slug, partner).load()))
|
||||
)
|
||||
.map((entry) => new MarkdownLoader('guide', entry.path, { yaml: true }).load())
|
||||
.then((data) => data.flat())
|
||||
|
||||
const partnerIntegrationSources = (await fetchPartners()).map((partner) =>
|
||||
new IntegrationLoader(partner.slug, partner).load()
|
||||
const githubDiscussionSources = fetchDiscussions(
|
||||
'supabase',
|
||||
'supabase',
|
||||
'DIC_kwDODMpXOc4CUvEr' // 'Troubleshooting' category
|
||||
)
|
||||
|
||||
const githubDiscussionSources = (
|
||||
await fetchDiscussions(
|
||||
'supabase',
|
||||
'supabase',
|
||||
'DIC_kwDODMpXOc4CUvEr' // 'Troubleshooting' category
|
||||
.then((discussions) =>
|
||||
Promise.all(
|
||||
discussions.map((discussion) =>
|
||||
new GitHubDiscussionLoader('supabase/supabase', discussion).load()
|
||||
)
|
||||
)
|
||||
)
|
||||
).map((discussion) => new GitHubDiscussionLoader('supabase/supabase', discussion).load())
|
||||
.then((data) => data.flat())
|
||||
|
||||
const sources: SearchSource[] = (
|
||||
await Promise.all([
|
||||
guideSources,
|
||||
openApiReferenceSource,
|
||||
jsLibReferenceSource,
|
||||
dartLibReferenceSource,
|
||||
@@ -125,9 +168,8 @@ export async function fetchSources() {
|
||||
swiftLibReferenceSource,
|
||||
ktLibReferenceSource,
|
||||
cliReferenceSource,
|
||||
...githubDiscussionSources,
|
||||
...partnerIntegrationSources,
|
||||
...guideSources,
|
||||
partnerIntegrationSources,
|
||||
githubDiscussionSources,
|
||||
])
|
||||
).flat()
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@ export class MarkdownSource extends BaseSource {
|
||||
|
||||
extractIndexedContent(): string {
|
||||
const sections = this.sections ?? []
|
||||
return sections.map(({ content }) => content).join('\n\n')
|
||||
const sectionText = sections.map(({ content }) => content).join('\n\n')
|
||||
|
||||
return `# ${this.meta.title ?? ''}\n\n${this.meta.subtitle ?? ''}\n\n${sectionText}`
|
||||
}
|
||||
}
|
||||
@@ -9,13 +9,14 @@ type PartnerData = {
|
||||
overview: string // The Markdown content for indexing
|
||||
}
|
||||
|
||||
const supabaseUrl = process.env.NEXT_PUBLIC_MISC_USE_URL ?? process.env.NEXT_PUBLIC_MISC_URL
|
||||
const supabaseAnonKey =
|
||||
process.env.NEXT_PUBLIC_MISC_USE_ANON_KEY ?? process.env.NEXT_PUBLIC_MISC_ANON_KEY
|
||||
|
||||
let supabaseClient: SupabaseClient
|
||||
function getSupabaseClient() {
|
||||
if (!supabaseClient) {
|
||||
supabaseClient = createClient(
|
||||
process.env.NEXT_PUBLIC_MISC_USE_URL!,
|
||||
process.env.NEXT_PUBLIC_MISC_USE_ANON_KEY!
|
||||
)
|
||||
supabaseClient = createClient(supabaseUrl, supabaseAnonKey)
|
||||
return supabaseClient
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ export class OpenApiReferenceSource extends ReferenceSource<enrichedOperation> {
|
||||
|
||||
extractIndexedContent(): string {
|
||||
const { summary, description, operation, tags } = this.specSection
|
||||
return `${this.meta.title}\n\n${summary}\n\n${description}\n\n${operation}\n\n${tags.join(
|
||||
return `# ${this.meta.title ?? ''}\n\n${summary ?? ''}\n\n${description ?? ''}\n\n${operation ?? ''}\n\n${tags.join(
|
||||
', '
|
||||
)}`
|
||||
}
|
||||
@@ -212,8 +212,12 @@ export class ClientLibReferenceSource extends ReferenceSource<IFunctionDefinitio
|
||||
}
|
||||
|
||||
extractIndexedContent(): string {
|
||||
const { title, description } = this.specSection
|
||||
return `${this.meta.title}\n\n${title}\n\n${description}`
|
||||
const { title, description, examples } = this.specSection
|
||||
const exampleText =
|
||||
examples
|
||||
?.map((example) => `### ${example.name ?? ''}\n\n${example.code ?? ''}`)
|
||||
.join('\n\n') ?? ''
|
||||
return `# ${this.meta.title ?? ''}\n\n${title ?? ''}\n\n${description ?? ''}\n\n## Examples\n\n${exampleText}`
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,6 +263,6 @@ export class CliReferenceSource extends ReferenceSource<CliCommand> {
|
||||
|
||||
extractIndexedContent(): string {
|
||||
const { summary, description, usage } = this.specSection
|
||||
return `${this.meta.title}\n\n${summary}\n\n${description}\n\n${usage}`
|
||||
return `# ${this.meta.title ?? ''}\n\n${summary ?? ''}\n\n${description ?? ''}\n\n${usage ?? ''}`
|
||||
}
|
||||
}
|
||||
+11
-6
@@ -17,7 +17,9 @@
|
||||
"NEXT_PUBLIC_SUPABASE_URL",
|
||||
"NEXT_PUBLIC_SUPABASE_ANON_KEY",
|
||||
"NEXT_PUBLIC_MISC_URL",
|
||||
"NEXT_PUBLIC_MISC_USE_URL",
|
||||
"NEXT_PUBLIC_MISC_ANON_KEY",
|
||||
"NEXT_PUBLIC_MISC_USE_ANON_KEY",
|
||||
"NODE_ENV",
|
||||
"NEXT_PUBLIC_API_URL",
|
||||
"NEXT_PUBLIC_BASE_PATH",
|
||||
@@ -34,18 +36,21 @@
|
||||
"NEXT_PUBLIC_GOTRUE_URL",
|
||||
"NEXT_PUBLIC_SUPABASE_ANON_KEY",
|
||||
// These envs are technically passthrough env vars because they're only used on the server side of Nextjs
|
||||
"ASSET_CDN_S3_ENDPOINT",
|
||||
"AWS_ACCESS_KEY_ID",
|
||||
"AWS_SECRET_ACCESS_KEY",
|
||||
"DOCS_GITHUB_APP_ID",
|
||||
"DOCS_GITHUB_APP_INSTALLATION_ID",
|
||||
"DOCS_GITHUB_APP_PRIVATE_KEY",
|
||||
"DOCS_REVALIDATION_KEYS",
|
||||
"DOCS_REVALIDATION_OVERRIDE_KEYS",
|
||||
"SUPABASE_SECRET_KEY",
|
||||
"OPENAI_API_KEY",
|
||||
"AWS_ACCESS_KEY_ID",
|
||||
"AWS_SECRET_ACCESS_KEY",
|
||||
"FORCE_ASSET_CDN",
|
||||
"ASSET_CDN_S3_ENDPOINT",
|
||||
"SITE_NAME"
|
||||
"OPENAI_API_KEY",
|
||||
"SEARCH_GITHUB_APP_ID",
|
||||
"SEARCH_GITHUB_APP_INSTALLATION_ID",
|
||||
"SEARCH_GITHUB_APP_PRIVATE_KEY",
|
||||
"SITE_NAME",
|
||||
"SUPABASE_SECRET_KEY"
|
||||
],
|
||||
"inputs": ["$TURBO_DEFAULT$"],
|
||||
"outputs": [".next/**", "!.next/cache/**"]
|
||||
|
||||
@@ -52,6 +52,14 @@ module.exports = [
|
||||
source: '/.well-known/security.txt',
|
||||
destination: `${process.env.NEXT_PUBLIC_DOCS_URL}/.well-known/security.txt`,
|
||||
},
|
||||
{
|
||||
source: '/llms.txt',
|
||||
destination: `${process.env.NEXT_PUBLIC_DOCS_URL}/llms.txt`,
|
||||
},
|
||||
{
|
||||
source: '/llms/:path(.*\\.txt$)',
|
||||
destination: `${process.env.NEXT_PUBLIC_DOCS_URL}/llms/:path`,
|
||||
},
|
||||
{
|
||||
source: '/feed.xml',
|
||||
destination: `/rss.xml`,
|
||||
|
||||
Generated
+47
-21
@@ -445,6 +445,9 @@ importers:
|
||||
'@supabase/supa-mdx-lint':
|
||||
specifier: 0.2.6-alpha
|
||||
version: 0.2.6-alpha
|
||||
'@types/common-tags':
|
||||
specifier: ^1.8.4
|
||||
version: 1.8.4
|
||||
'@types/estree':
|
||||
specifier: 1.0.5
|
||||
version: 1.0.5
|
||||
@@ -1390,7 +1393,7 @@ importers:
|
||||
dependencies:
|
||||
'@mertasan/tailwindcss-variables':
|
||||
specifier: ^2.2.3
|
||||
version: 2.7.0(autoprefixer@10.4.16(postcss@8.5.3))(postcss@8.5.3)
|
||||
version: 2.7.0(autoprefixer@10.4.16(postcss@8.4.38))(postcss@8.4.38)
|
||||
'@radix-ui/colors':
|
||||
specifier: ^0.1.8
|
||||
version: 0.1.9
|
||||
@@ -1643,7 +1646,7 @@ importers:
|
||||
version: 0.436.0(react@18.2.0)
|
||||
next:
|
||||
specifier: 'catalog:'
|
||||
version: 14.2.21(@babel/core@7.24.7(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0)
|
||||
version: 14.2.21(@babel/core@7.26.9(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0)
|
||||
next-themes:
|
||||
specifier: ^0.3.0
|
||||
version: 0.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
|
||||
@@ -1842,7 +1845,7 @@ importers:
|
||||
version: 0.33.0
|
||||
next:
|
||||
specifier: 'catalog:'
|
||||
version: 14.2.21(@babel/core@7.24.7(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0)
|
||||
version: 14.2.21(@babel/core@7.26.9(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0)
|
||||
next-themes:
|
||||
specifier: '*'
|
||||
version: 0.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
|
||||
@@ -1939,7 +1942,7 @@ importers:
|
||||
version: link:../api-types
|
||||
next-router-mock:
|
||||
specifier: ^0.9.13
|
||||
version: 0.9.13(next@14.2.21(@babel/core@7.24.7(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0))(react@18.2.0)
|
||||
version: 0.9.13(next@14.2.21(@babel/core@7.26.9(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0))(react@18.2.0)
|
||||
typescript:
|
||||
specifier: ~5.5.0
|
||||
version: 5.5.2
|
||||
@@ -7692,7 +7695,6 @@ packages:
|
||||
resolution: {integrity: sha512-t0q23FIpvHDTtnORW+bDJziGsal5uh9RJTJ1fyH8drd4lICOoXhJ5pLMUZ5C0VQei6dNmwTzzoTRgMkO9JgHEQ==}
|
||||
peerDependencies:
|
||||
eslint: '>= 5'
|
||||
bundledDependencies: []
|
||||
|
||||
eslint-plugin-import@2.29.1:
|
||||
resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
|
||||
@@ -15256,12 +15258,6 @@ snapshots:
|
||||
lodash: 4.17.21
|
||||
postcss: 8.4.38
|
||||
|
||||
'@mertasan/tailwindcss-variables@2.7.0(autoprefixer@10.4.16(postcss@8.5.3))(postcss@8.5.3)':
|
||||
dependencies:
|
||||
autoprefixer: 10.4.16(postcss@8.5.3)
|
||||
lodash: 4.17.21
|
||||
postcss: 8.5.3
|
||||
|
||||
'@monaco-editor/loader@1.4.0(monaco-editor@0.33.0)':
|
||||
dependencies:
|
||||
monaco-editor: 0.33.0
|
||||
@@ -18962,16 +18958,6 @@ snapshots:
|
||||
postcss: 8.4.38
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
autoprefixer@10.4.16(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.23.3
|
||||
caniuse-lite: 1.0.30001651
|
||||
fraction.js: 4.3.6
|
||||
normalize-range: 0.1.2
|
||||
picocolors: 1.0.1
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
available-typed-arrays@1.0.7:
|
||||
dependencies:
|
||||
possible-typed-array-names: 1.0.0
|
||||
@@ -23972,6 +23958,11 @@ snapshots:
|
||||
next: 14.2.21(@babel/core@7.24.7(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0)
|
||||
react: 18.2.0
|
||||
|
||||
next-router-mock@0.9.13(next@14.2.21(@babel/core@7.26.9(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0))(react@18.2.0):
|
||||
dependencies:
|
||||
next: 14.2.21(@babel/core@7.26.9(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0)
|
||||
react: 18.2.0
|
||||
|
||||
next-seo@6.5.0(next@14.2.21(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
|
||||
dependencies:
|
||||
next: 14.2.21(@babel/core@7.24.7(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0)
|
||||
@@ -24011,6 +24002,34 @@ snapshots:
|
||||
- '@babel/core'
|
||||
- babel-plugin-macros
|
||||
|
||||
next@14.2.21(@babel/core@7.26.9(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.72.0):
|
||||
dependencies:
|
||||
'@next/env': 14.2.21
|
||||
'@swc/helpers': 0.5.5
|
||||
busboy: 1.6.0
|
||||
caniuse-lite: 1.0.30001695
|
||||
graceful-fs: 4.2.11
|
||||
postcss: 8.4.31
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0(react@18.2.0)
|
||||
styled-jsx: 5.1.1(@babel/core@7.26.9(supports-color@8.1.1))(react@18.2.0)
|
||||
optionalDependencies:
|
||||
'@next/swc-darwin-arm64': 14.2.21
|
||||
'@next/swc-darwin-x64': 14.2.21
|
||||
'@next/swc-linux-arm64-gnu': 14.2.21
|
||||
'@next/swc-linux-arm64-musl': 14.2.21
|
||||
'@next/swc-linux-x64-gnu': 14.2.21
|
||||
'@next/swc-linux-x64-musl': 14.2.21
|
||||
'@next/swc-win32-arm64-msvc': 14.2.21
|
||||
'@next/swc-win32-ia32-msvc': 14.2.21
|
||||
'@next/swc-win32-x64-msvc': 14.2.21
|
||||
'@opentelemetry/api': 1.9.0
|
||||
'@playwright/test': 1.49.1
|
||||
sass: 1.72.0
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- babel-plugin-macros
|
||||
|
||||
nice-try@1.0.5: {}
|
||||
|
||||
no-case@3.0.4:
|
||||
@@ -26351,6 +26370,13 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@babel/core': 7.24.7(supports-color@8.1.1)
|
||||
|
||||
styled-jsx@5.1.1(@babel/core@7.26.9(supports-color@8.1.1))(react@18.2.0):
|
||||
dependencies:
|
||||
client-only: 0.0.1
|
||||
react: 18.2.0
|
||||
optionalDependencies:
|
||||
'@babel/core': 7.26.9(supports-color@8.1.1)
|
||||
|
||||
stylis@4.3.1: {}
|
||||
|
||||
sucrase@3.34.0:
|
||||
|
||||
Reference in new issue
Block a user