summaryrefslogtreecommitdiff
path: root/packages/integrations/markdoc/src/runtime.ts
diff options
context:
space:
mode:
authorGravatar Ben Holmes <hey@bholmes.dev> 2023-05-19 14:12:45 -0400
committerGravatar GitHub <noreply@github.com> 2023-05-19 14:12:45 -0400
commita9e1cd7e58794fe220539c2ed935c9eb96bab55a (patch)
tree07c298f7a21d61726f515dcae762fd0cbe277540 /packages/integrations/markdoc/src/runtime.ts
parent147373722b37126af949bb054a1cdfb0aed6c2ff (diff)
downloadastro-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.ts46
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
};
}