@@ -16,7 +16,7 @@ import assert from "node:assert";
1616
1717describe ( "MarkdownLanguage" , ( ) => {
1818 describe ( "validateLanguageOptions()" , ( ) => {
19- it ( "should throw an error if `frontmatter` is not `false`, `'yaml'`, or `'toml '`" , ( ) => {
19+ it ( "should throw an error if `frontmatter` is not `false`, `'yaml'`, `'toml'`, or `'json '`" , ( ) => {
2020 const language = new MarkdownLanguage ( ) ;
2121
2222 assert . throws ( ( ) => {
@@ -57,6 +57,9 @@ describe("MarkdownLanguage", () => {
5757 assert . doesNotThrow ( ( ) => {
5858 language . validateLanguageOptions ( { frontmatter : "toml" } ) ;
5959 } ) ;
60+ assert . doesNotThrow ( ( ) => {
61+ language . validateLanguageOptions ( { frontmatter : "json" } ) ;
62+ } ) ;
6063 } ) ;
6164
6265 it ( "should not throw an error when `frontmatter` has a correct value in gfm mode" , ( ) => {
@@ -71,6 +74,9 @@ describe("MarkdownLanguage", () => {
7174 assert . doesNotThrow ( ( ) => {
7275 language . validateLanguageOptions ( { frontmatter : "toml" } ) ;
7376 } ) ;
77+ assert . doesNotThrow ( ( ) => {
78+ language . validateLanguageOptions ( { frontmatter : "json" } ) ;
79+ } ) ;
7480 } ) ;
7581 } ) ;
7682
@@ -214,6 +220,56 @@ describe("MarkdownLanguage", () => {
214220 assert . strictEqual ( result . ast . children [ 1 ] . type , "heading" ) ;
215221 assert . strictEqual ( result . ast . children [ 2 ] . type , "paragraph" ) ;
216222 } ) ;
223+
224+ it ( "should parse JSON frontmatter in commonmark mode when `frontmatter: 'json'` is set" , ( ) => {
225+ const language = new MarkdownLanguage ( { mode : "commonmark" } ) ;
226+ const result = language . parse (
227+ {
228+ body : '---\n{\n"title": "Hello"\n}\n---\n\n# Hello, World!\n\nHello, World!' ,
229+ path : "test.md" ,
230+ } ,
231+ {
232+ languageOptions : {
233+ frontmatter : "json" ,
234+ } ,
235+ } ,
236+ ) ;
237+
238+ assert . strictEqual ( result . ok , true ) ;
239+ assert . strictEqual ( result . ast . type , "root" ) ;
240+ assert . strictEqual ( result . ast . children [ 0 ] . type , "json" ) ;
241+ assert . strictEqual (
242+ result . ast . children [ 0 ] . value ,
243+ '{\n"title": "Hello"\n}' ,
244+ ) ;
245+ assert . strictEqual ( result . ast . children [ 1 ] . type , "heading" ) ;
246+ assert . strictEqual ( result . ast . children [ 2 ] . type , "paragraph" ) ;
247+ } ) ;
248+
249+ it ( "should parse JSON frontmatter in gfm mode when `frontmatter: 'json'` is set" , ( ) => {
250+ const language = new MarkdownLanguage ( { mode : "gfm" } ) ;
251+ const result = language . parse (
252+ {
253+ body : '---\n{\n"title": "Hello"\n}\n---\n\n# Hello, World!\n\nHello, World!' ,
254+ path : "test.md" ,
255+ } ,
256+ {
257+ languageOptions : {
258+ frontmatter : "json" ,
259+ } ,
260+ } ,
261+ ) ;
262+
263+ assert . strictEqual ( result . ok , true ) ;
264+ assert . strictEqual ( result . ast . type , "root" ) ;
265+ assert . strictEqual ( result . ast . children [ 0 ] . type , "json" ) ;
266+ assert . strictEqual (
267+ result . ast . children [ 0 ] . value ,
268+ '{\n"title": "Hello"\n}' ,
269+ ) ;
270+ assert . strictEqual ( result . ast . children [ 1 ] . type , "heading" ) ;
271+ assert . strictEqual ( result . ast . children [ 2 ] . type , "paragraph" ) ;
272+ } ) ;
217273 } ) ;
218274
219275 describe ( "createSourceCode()" , ( ) => {
0 commit comments