Skip to content

Commit 0762a83

Browse files
authored
fix: accept all sätteri plugin entry types (#17766)
1 parent d483125 commit 0762a83

5 files changed

Lines changed: 57 additions & 16 deletions

File tree

.changeset/grumpy-bats-return.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@astrojs/mdx': patch
3+
'@astrojs/markdown-satteri': patch
4+
---
5+
6+
Fixes Sätteri processor option types to accept all plugin entries supported by Sätteri v0.10.3.

packages/integrations/mdx/src/satteri/index.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import {
1313
mdxToJs,
1414
type HastNode,
1515
type HastPluginDefinition,
16+
type HastPluginEntry,
1617
type MdastPluginDefinition,
18+
type MdastPluginEntry,
1719
type MdxCompileOptions,
1820
} from 'satteri';
1921
import { ASTRO_IMAGE_IMPORT, USES_ASTRO_IMAGE_FLAG } from '../image-constants.js';
@@ -90,12 +92,9 @@ export function createMdxProcessor(
9092
typeof syntaxHighlight === 'object' ? syntaxHighlight.excludeLangs : undefined;
9193

9294
// Collect last so image-URL rewrites by user plugins are captured.
93-
const allMdastPlugins: MdastPluginDefinition[] = [
94-
...satteriOptions.mdastPlugins,
95-
collectImages,
96-
];
95+
const allMdastPlugins: MdastPluginEntry[] = [...satteriOptions.mdastPlugins, collectImages];
9796

98-
const hastPlugins: HastPluginDefinition[] = [];
97+
const hastPlugins: HastPluginEntry[] = [];
9998
if (highlightFn) {
10099
hastPlugins.push(satteriHighlightPlugin(highlightFn, excludeLangs));
101100
}

packages/markdown/satteri/src/processor.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import type { MarkdownProcessor } from '@astrojs/internal-helpers/markdown';
2-
import type { Features, HastPluginDefinition, MdastPluginDefinition } from 'satteri';
2+
import type {
3+
Features,
4+
HastPluginEntry,
5+
HastPluginList,
6+
MdastPluginEntry,
7+
MdastPluginList,
8+
} from 'satteri';
39
import { createSatteriMarkdownProcessor } from './satteri-processor.js';
410

511
export interface SatteriProcessorOptions {
6-
mdastPlugins?: MdastPluginDefinition[];
7-
hastPlugins?: HastPluginDefinition[];
12+
mdastPlugins?: MdastPluginList;
13+
hastPlugins?: HastPluginList;
814
features?: Features;
915
}
1016

@@ -13,8 +19,8 @@ export interface SatteriProcessorOptions {
1319
* (the factory normalises absent inputs into defaults).
1420
*/
1521
export interface SatteriResolvedOptions {
16-
mdastPlugins: MdastPluginDefinition[];
17-
hastPlugins: HastPluginDefinition[];
22+
mdastPlugins: MdastPluginEntry[];
23+
hastPlugins: HastPluginEntry[];
1824
features: Features;
1925
}
2026

packages/markdown/satteri/src/satteri-processor.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,16 @@ import {
55
syntaxHighlightDefaults,
66
} from '@astrojs/internal-helpers/markdown';
77
import Slugger from 'github-slugger';
8-
import type { Features, HastNode, HastPluginDefinition, MdastPluginDefinition } from 'satteri';
8+
import type {
9+
Features,
10+
HastNode,
11+
HastPluginDefinition,
12+
HastPluginEntry,
13+
HastPluginList,
14+
MdastPluginDefinition,
15+
MdastPluginEntry,
16+
MdastPluginList,
17+
} from 'satteri';
918
import { createShikiHighlighter } from '@astrojs/internal-helpers/shiki';
1019
import type {
1120
AstroMarkdownOptions,
@@ -206,8 +215,8 @@ export function createHighlightPlugin(
206215
}
207216

208217
export interface SatteriMarkdownProcessorOptions extends AstroMarkdownOptions {
209-
mdastPlugins?: MdastPluginDefinition[];
210-
hastPlugins?: HastPluginDefinition[];
218+
mdastPlugins?: MdastPluginList;
219+
hastPlugins?: HastPluginList;
211220
features?: Features;
212221
}
213222

@@ -291,12 +300,12 @@ export async function createSatteriMarkdownProcessor(
291300
};
292301

293302
// Collect last so image-URL rewrites by user plugins are captured.
294-
const allMdastPlugins: MdastPluginDefinition[] = [
303+
const allMdastPlugins: MdastPluginEntry[] = [
295304
...userMdastPlugins,
296305
createCollectImagesPlugin(opts?.image),
297306
];
298307

299-
const hastPlugins: HastPluginDefinition[] = [];
308+
const hastPlugins: HastPluginEntry[] = [];
300309
if (highlightFn) {
301310
hastPlugins.push(createHighlightPlugin(highlightFn, syntaxHighlightExcludeLangs));
302311
}

packages/markdown/satteri/test/markdown.test.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import assert from 'node:assert/strict';
22
import { describe, it } from 'node:test';
33
import type { HastPluginDefinition, MdastPluginDefinition } from 'satteri';
4-
import { createSatteriMarkdownProcessor, satteriHeadingIdsPlugin } from '../dist/index.js';
4+
import { createSatteriMarkdownProcessor, satteri, satteriHeadingIdsPlugin } from '../dist/index.js';
55

66
describe('satteri markdown', () => {
77
it('renders basic markdown', async () => {
@@ -136,4 +136,25 @@ describe('satteri markdown', () => {
136136
assert.equal(metadata.frontmatter.title, 'hello');
137137
assert.equal(metadata.frontmatter.injected, 'HELLO');
138138
});
139+
140+
it('accepts conditional plugin factories', async () => {
141+
const mdUppercasePlugin: MdastPluginDefinition = {
142+
name: 'mdx-uppercase',
143+
text(node, ctx) {
144+
ctx.setProperty(node, 'value', node.value.toUpperCase());
145+
},
146+
};
147+
148+
const satteriProcessor = satteri({
149+
mdastPlugins: [(ctx) => (ctx.sourceFormat === 'markdown' ? [mdUppercasePlugin] : null)],
150+
});
151+
152+
const processor = await createSatteriMarkdownProcessor({
153+
mdastPlugins: satteriProcessor.options.mdastPlugins,
154+
});
155+
156+
const { code } = await processor.render('Hello');
157+
158+
assert.match(code, /<p>HELLO<\/p>/);
159+
});
139160
});

0 commit comments

Comments
 (0)