1
0
mirror of synced 2025-12-19 18:10:59 -05:00

Support data-driven tables (#57806)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Sarah Schneider
2025-10-09 13:54:59 -04:00
committed by GitHub
parent 943b2e1cbb
commit 51c65e3b86
4 changed files with 140 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
import type { NextFunction, Response } from 'express'
import { ExtendedRequest } from '@/types'
import { getDeepDataByLanguage } from '@/data-directory/lib/get-data'
let tablesCache: Record<string, unknown> | null = null
// Lazy loading function
const getTables = () => {
if (!tablesCache) {
// Keep product-name-heavy reference tables in English only for now
tablesCache = getDeepDataByLanguage('tables', 'en')
}
return tablesCache
}
/**
* Middleware that loads data-driven table content into the request context.
* Tables are sourced from YAML files in data/tables/ directory.
*/
export default async function dataTables(req: ExtendedRequest, res: Response, next: NextFunction) {
if (!req.context) throw new Error('request not contextualized')
req.context.tables = getTables()
return next()
}

View File

@@ -0,0 +1,13 @@
features:
foo:
name: 'Foo Feature'
fptAndGhec: true
ghes: false
bar:
name: 'Bar Feature'
fptAndGhec: true
ghes: true
supported:
BeepBoop:
foo: 'supported'
bar: 'not-supported'

View File

@@ -35,6 +35,7 @@ import robots from './robots'
import earlyAccessLinks from '@/early-access/middleware/early-access-links'
import categoriesForSupport from './categories-for-support'
import triggerError from '@/observability/middleware/trigger-error'
import dataTables from '@/data-directory/middleware/data-tables'
import secretScanning from '@/secret-scanning/middleware/secret-scanning'
import ghesReleaseNotes from '@/release-notes/middleware/ghes-release-notes'
import whatsNewChangelog from './context/whats-new-changelog'
@@ -256,6 +257,7 @@ export default function (app: Express) {
app.head('/*path', fastHead)
// *** Preparation for render-page: contextualizers ***
app.use(asyncMiddleware(dataTables))
app.use(asyncMiddleware(secretScanning))
app.use(asyncMiddleware(ghesReleaseNotes))
app.use(asyncMiddleware(whatsNewChangelog))