Support data-driven tables (#57806)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
26
src/data-directory/middleware/data-tables.ts
Normal file
26
src/data-directory/middleware/data-tables.ts
Normal 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()
|
||||
}
|
||||
13
src/fixtures/fixtures/data/tables/supported-languages.yml
Normal file
13
src/fixtures/fixtures/data/tables/supported-languages.yml
Normal 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'
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user