Files
supabase/apps/docs/internals/markdown-schema/RealtimeLimitsEstimator.ts

37 lines
1.2 KiB
TypeScript

import {
COMPUTE_LABELS,
THROUGHPUT_TABLE_HEADINGS,
} from '../../components/RealtimeLimitsEstimator/RealtimeLimitsEstimator.constants'
import throughputTable from '../../data/realtime/throughput.json'
type Row = {
computeAddOn: string
filters: boolean
rls: boolean
concurrency: number
maxDBChanges: number
maxMessagesPerClient: number
totalMessagesPerSecond: number
p95Latency: number
}
const headerRow = `| ${THROUGHPUT_TABLE_HEADINGS.join(' | ')} |`
const dividerRow = `| ${THROUGHPUT_TABLE_HEADINGS.map(() => '---').join(' | ')} |`
const renderGroup = (computeAddOn: string): string => {
const rows = (throughputTable as Row[]).filter((l) => l.computeAddOn === computeAddOn)
return `#### ${COMPUTE_LABELS[computeAddOn] ?? computeAddOn}
${headerRow}
${dividerRow}
${rows
.map(
(l) =>
`| ${l.filters ? 'Yes' : 'No'} | ${l.rls ? 'Yes' : 'No'} | ${l.concurrency.toLocaleString()} | ${l.maxDBChanges} | ${l.maxMessagesPerClient} | ${l.totalMessagesPerSecond.toLocaleString()} | ${l.p95Latency}ms |`
)
.join('\n')}`
}
export const RealtimeLimitsEstimator = (): string =>
[...new Set((throughputTable as Row[]).map((l) => l.computeAddOn))].map(renderGroup).join('\n\n')