diff options
author | 2023-05-19 14:12:45 -0400 | |
---|---|---|
committer | 2023-05-19 14:12:45 -0400 | |
commit | a9e1cd7e58794fe220539c2ed935c9eb96bab55a (patch) | |
tree | 07c298f7a21d61726f515dcae762fd0cbe277540 /packages/integrations/markdoc/src/runtime.ts | |
parent | 147373722b37126af949bb054a1cdfb0aed6c2ff (diff) | |
download | astro-a9e1cd7e58794fe220539c2ed935c9eb96bab55a.tar.gz astro-a9e1cd7e58794fe220539c2ed935c9eb96bab55a.tar.zst astro-a9e1cd7e58794fe220539c2ed935c9eb96bab55a.zip |
Fix: Heading ID CI flakiness (#7141)
* feat: use `ctx` object instead of leaky global
* test: heading IDs stale caches
* chore: changeset
Diffstat (limited to 'packages/integrations/markdoc/src/runtime.ts')
-rw-r--r-- | packages/integrations/markdoc/src/runtime.ts | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/packages/integrations/markdoc/src/runtime.ts b/packages/integrations/markdoc/src/runtime.ts index 61b38fd02..3164cda13 100644 --- a/packages/integrations/markdoc/src/runtime.ts +++ b/packages/integrations/markdoc/src/runtime.ts @@ -4,27 +4,45 @@ import Markdoc, { type RenderableTreeNode, } from '@markdoc/markdoc'; import type { ContentEntryModule } from 'astro'; -import { nodes as astroNodes } from './nodes/index.js'; +import { setupHeadingConfig } from './nodes/index.js'; -/** Used to reset Slugger cache on each build at runtime */ +/** Used to call `Markdoc.transform()` and `Markdoc.Ast` in runtime modules */ export { default as Markdoc } from '@markdoc/markdoc'; -export { headingSlugger } from './nodes/index.js'; -export function applyDefaultConfig( - config: MarkdocConfig, - entry: ContentEntryModule -): MarkdocConfig { +/** + * Merge user config with default config and set up context (ex. heading ID slugger) + * Called on each file's individual transform + */ +export function setupConfig(userConfig: MarkdocConfig, entry: ContentEntryModule): MarkdocConfig { + const defaultConfig: MarkdocConfig = { + // `setupXConfig()` could become a "plugin" convention as well? + ...setupHeadingConfig(), + variables: { entry }, + }; + return mergeConfig(defaultConfig, userConfig); +} + +/** Merge function from `@markdoc/markdoc` internals */ +function mergeConfig(configA: MarkdocConfig, configB: MarkdocConfig): MarkdocConfig { return { - ...config, - variables: { - entry, - ...config.variables, + ...configA, + ...configB, + tags: { + ...configA.tags, + ...configB.tags, }, nodes: { - ...astroNodes, - ...config.nodes, + ...configA.nodes, + ...configB.nodes, + }, + functions: { + ...configA.functions, + ...configB.functions, + }, + variables: { + ...configA.variables, + ...configB.variables, }, - // TODO: Syntax highlighting }; } |