import type { MarkdownHeading } from '@astrojs/markdown-remark'; import Markdoc, { type RenderableTreeNode } from '@markdoc/markdoc'; import type { AstroMarkdocConfig } from './config.js'; import { setupHeadingConfig } from './heading-ids.js'; /** Used to call `Markdoc.transform()` and `Markdoc.Ast` in runtime modules */ export { default as Markdoc } from '@markdoc/markdoc'; /** * Merge user config with default config and set up context (ex. heading ID slugger) * Called on each file's individual transform. * TODO: virtual module to merge configs per-build instead of per-file? */ export async function setupConfig( userConfig: AstroMarkdocConfig ): Promise> { let defaultConfig: AstroMarkdocConfig = setupHeadingConfig(); if (userConfig.extends) { for (let extension of userConfig.extends) { if (extension instanceof Promise) { extension = await extension; } defaultConfig = mergeConfig(defaultConfig, extension); } } return mergeConfig(defaultConfig, userConfig); } /** Used for synchronous `getHeadings()` function */ export function setupConfigSync( userConfig: AstroMarkdocConfig ): Omit { const defaultConfig: AstroMarkdocConfig = setupHeadingConfig(); return mergeConfig(defaultConfig, userConfig); } /** Merge function from `@markdoc/markdoc` internals */ function mergeConfig(configA: AstroMarkdocConfig, configB: AstroMarkdocConfig): AstroMarkdocConfig { return { ...configA, ...configB, ctx: { ...configA.ctx, ...configB.ctx, }, tags: { ...configA.tags, ...configB.tags, }, nodes: { ...configA.nodes, ...configB.nodes, }, functions: { ...configA.functions, ...configB.functions, }, variables: { ...configA.variables, ...configB.variables, }, }; } /** * Get text content as a string from a Markdoc transform AST */ export function getTextContent(childNodes: RenderableTreeNode[]): string { let text = ''; for (const node of childNodes) { if (typeof node === 'string' || typeof node === 'number') { text += node; } else if (typeof node === 'object' && Markdoc.Tag.isTag(node)) { text += getTextContent(node.children); } } return text; } const headingLevels = [1, 2, 3, 4, 5, 6] as const; /** * Collect headings from Markdoc transform AST * for `headings` result on `render()` return value */ export function collectHeadings(children: RenderableTreeNode[]): MarkdownHeading[] { let collectedHeadings: MarkdownHeading[] = []; for (const node of children) { if (typeof node !== 'object' || !Markdoc.Tag.isTag(node)) continue; if (node.attributes.__collectHeading === true && typeof node.attributes.level === 'number') { collectedHeadings.push({ slug: node.attributes.id, depth: node.attributes.level, text: getTextContent(node.children), }); continue; } for (const level of headingLevels) { if (node.name === 'h' + level) { collectedHeadings.push({ slug: node.attributes.id, depth: level, text: getTextContent(node.children), }); } } collectedHeadings.concat(collectHeadings(node.children)); } return collectedHeadings; } 710&follow=1'>commitdiff
AgeCommit message (Expand)AuthorFilesLines
2017-05-30Add k8s external service CNAMEs (#677)Gravatar Chris O'Haver 11-16/+293
2017-05-26Update README.md (#668)Gravatar cricketliu 1-9/+9
2017-05-26middleware/file: add DNAME support (#651)Gravatar Eric Yan 4-2/+225
2017-05-25Check that all the controllers are synced agains api server (#671)Gravatar Manuel Alejandro de Brito Fontes 1-1/+9
2017-05-25Some golint cleanup (#674)Gravatar Yong Tang 4-8/+8
2017-05-25fix docker build (#673)Gravatar Chris O'Haver 1-1/+1
2017-05-23Maintainer update (#670)Gravatar Miek Gieben 1-7/+5
2017-05-22Handle K8s middleware NS record (#662)Gravatar Chris O'Haver 9-98/+538
2017-05-22middleware/chaos: fix version (#669)Gravatar Miek Gieben 4-14/+57
2017-05-12Makefile.release: bogus all target (#666)Gravatar Miek Gieben 1-7/+10
2017-05-08Add License Scanning badge (#663)Gravatar Chris Aniszczyk 1-0/+1
2017-05-05Don't check vendor code for gofmt, it takes forever (#661)Gravatar John Belamaric 1-1/+1
2017-05-03Release: fix docker pushGravatar Miek Gieben 1-0/+2
2017-05-03Release: fix MakefileGravatar Miek Gieben 1-0/+1
2017-05-03Release 007v007Gravatar Miek Gieben 1-1/+1
2017-05-03middleware/file: correctly parse the stanza (#658)Gravatar Miek Gieben 3-34/+87
2017-04-30Install: split build targets (#656)Gravatar Miek Gieben 1-3/+13
2017-04-30Remove annoying INFO from k8s middleware (#655)Gravatar John Belamaric 1-3/+1
2017-04-29middleware/cache: don't cache expired RRSIGs (#641)Gravatar Miek Gieben 7-62/+172
2017-04-28Update vendor with `go dep`Gravatar Yong Tang 8408-13844/+2469780
2017-04-28Add vendor setup with `go dep`Gravatar Yong Tang 3-1/+443
2017-04-27update readme (#650)Gravatar Miek Gieben 1-3/+4
2017-04-26middleware/proxy: Kill goroutines on stop (#646)Gravatar Miek Gieben 5-5/+112
2017-04-24Fix health race (#645)Gravatar Miek Gieben 6-28/+26
2017-04-24Point users to deployment repo (#643)Gravatar John Belamaric 1-23/+3
2017-04-24Pprof listen (#639)Gravatar Chris O'Haver 4-9/+34
2017-04-22msg.Service: add HostType() method (#627)Gravatar Miek Gieben 3-40/+114
2017-04-21Fix go pprof lib link (#638)Gravatar Chris O'Haver 1-1/+1
2017-04-21Fix link to SkyDNS (#637)Gravatar Dominic 1-1/+1
2017-04-20Fix TLS error message (#634)Gravatar Yue Ko 1-1/+1
2017-04-20Add MAINTAINERS (#633)Gravatar Miek Gieben 2-0/+10
2017-04-19Clean up the tls middleware README (#631)Gravatar John Belamaric 1-4/+22
2017-04-19Update the various Kubernetes middleware README files. (#630)Gravatar John Belamaric 3-174/+21
2017-04-19Add fallthrough support for Kubernetes (#626)Gravatar John Belamaric 7-9/+122
2017-04-18Tracing for gRPC Server (#619)Gravatar John Belamaric 6-11/+72