comark 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/internal/frontmatter.d.ts +1 -0
  2. package/dist/internal/frontmatter.js +4 -2
  3. package/dist/internal/parse/auto-close/index.js +69 -31
  4. package/dist/internal/parse/auto-close/table.js +12 -9
  5. package/dist/internal/parse/auto-unwrap.js +6 -10
  6. package/dist/internal/parse/html/html_block_rule.js +10 -16
  7. package/dist/internal/parse/html/html_inline_rule.js +3 -7
  8. package/dist/internal/parse/html/html_re.js +1 -1
  9. package/dist/internal/parse/html/index.d.ts +1 -0
  10. package/dist/internal/parse/html/index.js +15 -3
  11. package/dist/internal/parse/syntax/block-params.d.ts +9 -0
  12. package/dist/internal/parse/syntax/block-params.js +48 -0
  13. package/dist/internal/parse/syntax/brackets.d.ts +8 -0
  14. package/dist/internal/parse/syntax/brackets.js +20 -0
  15. package/dist/internal/parse/syntax/props.d.ts +5 -0
  16. package/dist/internal/parse/syntax/props.js +119 -0
  17. package/dist/internal/parse/token-processor.js +89 -50
  18. package/dist/internal/props-validation.js +4 -9
  19. package/dist/internal/stringify/attributes.d.ts +7 -0
  20. package/dist/internal/stringify/attributes.js +56 -1
  21. package/dist/internal/stringify/handlers/a.js +1 -3
  22. package/dist/internal/stringify/handlers/blockquote.js +19 -4
  23. package/dist/internal/stringify/handlers/code.js +1 -3
  24. package/dist/internal/stringify/handlers/emphesis.js +1 -3
  25. package/dist/internal/stringify/handlers/heading.js +6 -1
  26. package/dist/internal/stringify/handlers/html.js +34 -18
  27. package/dist/internal/stringify/handlers/img.js +1 -3
  28. package/dist/internal/stringify/handlers/li.js +18 -9
  29. package/dist/internal/stringify/handlers/mdc.js +3 -4
  30. package/dist/internal/stringify/handlers/ol.js +12 -2
  31. package/dist/internal/stringify/handlers/p.d.ts +1 -1
  32. package/dist/internal/stringify/handlers/p.js +8 -1
  33. package/dist/internal/stringify/handlers/pre.js +20 -14
  34. package/dist/internal/stringify/handlers/strong.js +1 -3
  35. package/dist/internal/stringify/handlers/table.js +14 -5
  36. package/dist/internal/stringify/handlers/template.js +5 -2
  37. package/dist/internal/stringify/handlers/ul.js +12 -2
  38. package/dist/internal/stringify/state.js +1 -1
  39. package/dist/internal/yaml.js +1 -1
  40. package/dist/parse.d.ts +4 -4
  41. package/dist/parse.js +20 -10
  42. package/dist/plugins/alert.d.ts +1 -1
  43. package/dist/plugins/alert.js +1 -1
  44. package/dist/plugins/binding.d.ts +1 -1
  45. package/dist/plugins/binding.js +1 -3
  46. package/dist/plugins/breaks.d.ts +1 -1
  47. package/dist/plugins/breaks.js +1 -1
  48. package/dist/plugins/emoji.d.ts +1 -1
  49. package/dist/plugins/emoji.js +8 -8
  50. package/dist/plugins/footnotes.d.ts +1 -1
  51. package/dist/plugins/footnotes.js +19 -13
  52. package/dist/plugins/headings.d.ts +19 -8
  53. package/dist/plugins/headings.js +27 -19
  54. package/dist/plugins/highlight.d.ts +2 -12
  55. package/dist/plugins/highlight.js +201 -103
  56. package/dist/plugins/json-render.d.ts +1 -1
  57. package/dist/plugins/json-render.js +5 -9
  58. package/dist/plugins/math.d.ts +1 -1
  59. package/dist/plugins/math.js +4 -6
  60. package/dist/plugins/mermaid.d.ts +1 -1
  61. package/dist/plugins/mermaid.js +6 -20
  62. package/dist/plugins/punctuation.d.ts +1 -1
  63. package/dist/plugins/punctuation.js +5 -6
  64. package/dist/plugins/security.d.ts +1 -1
  65. package/dist/plugins/security.js +2 -2
  66. package/dist/plugins/summary.d.ts +4 -1
  67. package/dist/plugins/syntax.d.ts +49 -0
  68. package/dist/plugins/syntax.js +558 -0
  69. package/dist/plugins/task-list.d.ts +2 -2
  70. package/dist/plugins/task-list.js +11 -8
  71. package/dist/plugins/toc.d.ts +3 -1
  72. package/dist/plugins/toc.js +1 -1
  73. package/dist/types.d.ts +57 -12
  74. package/dist/utils/comark.tmLanguage.d.ts +335 -0
  75. package/dist/utils/comark.tmLanguage.js +597 -0
  76. package/dist/utils/helpers.d.ts +16 -4
  77. package/dist/utils/helpers.js +16 -6
  78. package/dist/utils/index.d.ts +5 -0
  79. package/dist/utils/index.js +25 -3
  80. package/package.json +40 -40
  81. package/skills/comark/references/rendering-svelte.md +51 -7
  82. package/dist/internal/stringify/indent.d.ts +0 -5
  83. package/dist/internal/stringify/indent.js +0 -9
  84. package/dist/vite.d.ts +0 -1
  85. package/dist/vite.js +0 -1
  86. package/skills/skills/comark/AGENTS.md +0 -261
  87. package/skills/skills/comark/SKILL.md +0 -489
  88. package/skills/skills/comark/references/markdown-syntax.md +0 -599
  89. package/skills/skills/comark/references/parsing-ast.md +0 -378
  90. package/skills/skills/comark/references/rendering-react.md +0 -445
  91. package/skills/skills/comark/references/rendering-svelte.md +0 -453
  92. package/skills/skills/comark/references/rendering-vue.md +0 -462
  93. /package/skills/{skills/migrate-mdc-to-comark → migrate-mdc-to-comark}/SKILL.md +0 -0
@@ -0,0 +1,597 @@
1
+ import markdown from 'shiki/dist/langs/markdown.mjs';
2
+ import yaml from 'shiki/dist/langs/yaml.mjs';
3
+ import html_derivative from 'shiki/dist/langs/html-derivative.mjs';
4
+ const comark = {
5
+ $schema: 'https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json',
6
+ name: 'mdc',
7
+ aliases: ['comark'],
8
+ displayName: 'MDC - Components in Markdown',
9
+ injectionSelector: 'L:text.html.markdown',
10
+ scopeName: 'text.markdown.mdc.standalone',
11
+ patterns: [
12
+ {
13
+ include: 'text.html.markdown#frontMatter',
14
+ },
15
+ {
16
+ include: '#block',
17
+ },
18
+ ],
19
+ repository: {
20
+ block: {
21
+ patterns: [
22
+ {
23
+ include: '#inline',
24
+ },
25
+ {
26
+ include: '#component_block',
27
+ },
28
+ {
29
+ include: 'text.html.markdown#separator',
30
+ },
31
+ {
32
+ include: '#heading',
33
+ },
34
+ {
35
+ include: '#blockquote',
36
+ },
37
+ {
38
+ include: '#lists',
39
+ },
40
+ {
41
+ include: 'text.html.markdown#fenced_code_block',
42
+ },
43
+ {
44
+ include: 'text.html.markdown#link-def',
45
+ },
46
+ {
47
+ include: 'text.html.markdown#html',
48
+ },
49
+ {
50
+ include: '#paragraph',
51
+ },
52
+ ],
53
+ },
54
+ inline: {
55
+ patterns: [
56
+ {
57
+ include: '#binding',
58
+ },
59
+ {
60
+ include: '#component_inline',
61
+ },
62
+ {
63
+ include: '#span',
64
+ },
65
+ {
66
+ include: '#attributes',
67
+ },
68
+ {
69
+ include: 'text.html.markdown#inline',
70
+ },
71
+ ],
72
+ },
73
+ binding: {
74
+ match: '(?x)\n (\\{\\{) # opening braces\n \\s*\n ((?:[^|}]|\\|(?!\\|))+?) # variable / dot-path\n \\s*\n (?:\n (\\|\\|) # default operator\n \\s*\n ([^}]+?) # default value\n \\s*\n )?\n (\\}\\}) # closing braces',
75
+ name: 'meta.binding.mdc',
76
+ captures: {
77
+ '1': {
78
+ name: 'punctuation.section.embedded.begin.mdc',
79
+ },
80
+ '2': {
81
+ name: 'variable.other.mdc',
82
+ },
83
+ '3': {
84
+ name: 'keyword.operator.logical.mdc',
85
+ },
86
+ '4': {
87
+ name: 'string.unquoted.mdc',
88
+ },
89
+ '5': {
90
+ name: 'punctuation.section.embedded.end.mdc',
91
+ },
92
+ },
93
+ },
94
+ span: {
95
+ match: '(?x)\n (\\[) # Open\n ([^]]*)\n (\\])\n ( # attributes\n ({)\n ([^{]*)\n (})\n )?\n \\s',
96
+ name: 'span.component.mdc',
97
+ captures: {
98
+ '1': {
99
+ name: 'punctuation.definition.tag.start.component',
100
+ },
101
+ '2': {
102
+ name: 'string.other.link.description.title.markdown',
103
+ },
104
+ '3': {
105
+ name: 'punctuation.definition.tag.end.component',
106
+ },
107
+ '4': {
108
+ patterns: [
109
+ {
110
+ include: '#attributes',
111
+ },
112
+ ],
113
+ },
114
+ },
115
+ },
116
+ attributes: {
117
+ match: '(?x)( # attributes\n ({)\n ((?:[^{}\'"]+|\'[^\']*\'|"[^"]*")*)\n (})\n )',
118
+ name: 'attributes.mdc',
119
+ captures: {
120
+ '1': {
121
+ name: 'punctuation.definition.tag.start.component',
122
+ },
123
+ '3': {
124
+ patterns: [
125
+ {
126
+ include: '#attribute',
127
+ },
128
+ ],
129
+ },
130
+ '4': {
131
+ name: 'punctuation.definition.tag.end.component',
132
+ },
133
+ },
134
+ },
135
+ component_inline: {
136
+ match: '(?x)\n (^|\\G|\\s+)\n (:) # component colon\n (?i: # component name\n (\\w[\\w\\d-]*)\n )\n (\n (\\{(?:[^{}\'"]+|\'[^\']*\'|"[^"]*")*\\}) # attributes\n (\\[[^\\]]*\\])? # slot\n | (\\[[^\\]]*\\]) # slot\n (\\{(?:[^{}\'"]+|\'[^\']*\'|"[^"]*")*\\})? # attributes\n )?\n \\s',
137
+ name: 'inline.component.mdc',
138
+ captures: {
139
+ '2': {
140
+ name: 'punctuation.definition.tag.start.component',
141
+ },
142
+ '3': {
143
+ name: 'entity.name.tag.component',
144
+ },
145
+ '5': {
146
+ patterns: [
147
+ {
148
+ include: '#attributes',
149
+ },
150
+ ],
151
+ },
152
+ '6': {
153
+ patterns: [
154
+ {
155
+ include: '#span',
156
+ },
157
+ ],
158
+ },
159
+ '7': {
160
+ patterns: [
161
+ {
162
+ include: '#span',
163
+ },
164
+ ],
165
+ },
166
+ '8': {
167
+ patterns: [
168
+ {
169
+ include: '#attributes',
170
+ },
171
+ ],
172
+ },
173
+ },
174
+ },
175
+ component_block: {
176
+ begin: '(?x)\n (^|\\G)(\\s*)\n (:{2,}) # component colons\n (?i:\n (\\w[\\w\\d-]+) # component name\n ( # folowing spaces or attributes\n \\s*\n | \\s*(\\{(?:[^{}\'"]+|\'[^\']*\'|"[^"]*")*\\})\n )\n $\n )',
177
+ name: 'block.component.mdc',
178
+ end: '(^|\\G)(\\2)(\\3)\\s*$',
179
+ beginCaptures: {
180
+ '3': {
181
+ name: 'punctuation.definition.tag.start.mdc',
182
+ },
183
+ '4': {
184
+ name: 'entity.name.tag.mdc',
185
+ },
186
+ '5': {
187
+ patterns: [
188
+ {
189
+ include: '#attributes',
190
+ },
191
+ ],
192
+ },
193
+ },
194
+ endCaptures: {
195
+ '3': {
196
+ name: 'punctuation.definition.tag.end.mdc',
197
+ },
198
+ },
199
+ patterns: [
200
+ {
201
+ match: '(^|\\G)\\s*([:]{2,})$',
202
+ captures: {
203
+ '2': {
204
+ name: 'punctuation.definition.tag.end.mdc',
205
+ },
206
+ },
207
+ },
208
+ {
209
+ begin: '(^|\\G)(\\s*)(-{3})(\\s*)$',
210
+ end: '(^|\\G)(\\s*(-{3})(\\s*)$)',
211
+ patterns: [
212
+ {
213
+ include: 'source.yaml',
214
+ },
215
+ ],
216
+ },
217
+ {
218
+ match: '^(\\s*)(#[\\w\\-\\_]*)\\s*(<!--(.*)-->)?$',
219
+ captures: {
220
+ '2': {
221
+ name: 'entity.other.attribute-name.html',
222
+ },
223
+ '3': {
224
+ name: 'comment.block.html',
225
+ },
226
+ },
227
+ },
228
+ {
229
+ include: '#block',
230
+ },
231
+ ],
232
+ },
233
+ attribute: {
234
+ patterns: [
235
+ {
236
+ match: '(?x)\n (\n ([^=><\\s]*) # attribute name\n ( # attribute value\n =["]([^"]*)(["])|[\']([^\']*)([\'])\n | =[^\\s\'"}]*\n )?\n \\s*\n )',
237
+ captures: {
238
+ '2': {
239
+ name: 'entity.other.attribute-name.html',
240
+ },
241
+ '3': {
242
+ patterns: [
243
+ {
244
+ include: '#attribute-interior',
245
+ },
246
+ ],
247
+ },
248
+ },
249
+ },
250
+ ],
251
+ },
252
+ 'attribute-interior': {
253
+ patterns: [
254
+ {
255
+ begin: '=',
256
+ beginCaptures: {
257
+ '0': {
258
+ name: 'punctuation.separator.key-value.html',
259
+ },
260
+ },
261
+ end: '(?<=[^\\s=])(?!\\s*=)|(?=/?>)',
262
+ patterns: [
263
+ {
264
+ match: '([^\\s"\'=<>`/]|/(?!>))+',
265
+ name: 'string.unquoted.html',
266
+ },
267
+ {
268
+ begin: '"',
269
+ beginCaptures: {
270
+ '0': {
271
+ name: 'punctuation.definition.string.begin.html',
272
+ },
273
+ },
274
+ end: '"',
275
+ endCaptures: {
276
+ '0': {
277
+ name: 'punctuation.definition.string.end.html',
278
+ },
279
+ },
280
+ name: 'string.quoted.double.html',
281
+ patterns: [
282
+ {
283
+ include: '#entities',
284
+ },
285
+ ],
286
+ },
287
+ {
288
+ begin: "'",
289
+ beginCaptures: {
290
+ '0': {
291
+ name: 'punctuation.definition.string.begin.html',
292
+ },
293
+ },
294
+ end: "'",
295
+ endCaptures: {
296
+ '0': {
297
+ name: 'punctuation.definition.string.end.html',
298
+ },
299
+ },
300
+ name: 'string.quoted.single.html',
301
+ patterns: [
302
+ {
303
+ include: '#entities',
304
+ },
305
+ ],
306
+ },
307
+ {
308
+ match: '=',
309
+ name: 'invalid.illegal.unexpected-equals-sign.html',
310
+ },
311
+ ],
312
+ },
313
+ ],
314
+ },
315
+ entities: {
316
+ patterns: [
317
+ {
318
+ captures: {
319
+ '1': {
320
+ name: 'punctuation.definition.entity.html',
321
+ },
322
+ '912': {
323
+ name: 'punctuation.definition.entity.html',
324
+ },
325
+ },
326
+ match: '(?x)\n\t\t\t\t\t\t(&)\t(?=[a-zA-Z])\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(a(s(ymp(eq)?|cr|t)|n(d(slope|d|v|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a(h|c|d|e|f|a|g|b))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|e|E|acir)?|elig|f(r)?|w(conint|int)|l(pha|e(ph|fsym))|acute|ring|grave|m(p|a(cr|lg))|breve)|A(s(sign|cr)|nd|MP|c(y|irc)|tilde|o(pf|gon)|uml|pplyFunction|fr|Elig|lpha|acute|ring|grave|macr|breve))\n\t\t\t\t\t\t | (B(scr|cy|opf|umpeq|e(cause|ta|rnoullis)|fr|a(ckslash|r(v|wed))|reve)|b(s(cr|im(e)?|ol(hsub|b)?|emi)|n(ot|e(quiv)?)|c(y|ong)|ig(s(tar|qcup)|c(irc|up|ap)|triangle(down|up)|o(times|dot|plus)|uplus|vee|wedge)|o(t(tom)?|pf|wtie|x(h(d|u|D|U)?|times|H(d|u|D|U)?|d(R|l|r|L)|u(R|l|r|L)|plus|D(R|l|r|L)|v(R|h|H|l|r|L)?|U(R|l|r|L)|V(R|h|H|l|r|L)?|minus|box))|Not|dquo|u(ll(et)?|mp(e(q)?|E)?)|prime|e(caus(e)?|t(h|ween|a)|psi|rnou|mptyv)|karow|fr|l(ock|k(1(2|4)|34)|a(nk|ck(square|triangle(down|left|right)?|lozenge)))|a(ck(sim(eq)?|cong|prime|epsilon)|r(vee|wed(ge)?))|r(eve|vbar)|brk(tbrk)?))\n\t\t\t\t\t\t | (c(s(cr|u(p(e)?|b(e)?))|h(cy|i|eck(mark)?)|ylcty|c(irc|ups(sm)?|edil|a(ps|ron))|tdot|ir(scir|c(eq|le(d(R|circ|S|dash|ast)|arrow(left|right)))?|e|fnint|E|mid)?|o(n(int|g(dot)?)|p(y(sr)?|f|rod)|lon(e(q)?)?|m(p(fn|le(xes|ment))?|ma(t)?))|dot|u(darr(l|r)|p(s|c(up|ap)|or|dot|brcap)?|e(sc|pr)|vee|wed|larr(p)?|r(vearrow(left|right)|ly(eq(succ|prec)|vee|wedge)|arr(m)?|ren))|e(nt(erdot)?|dil|mptyv)|fr|w(conint|int)|lubs(uit)?|a(cute|p(s|c(up|ap)|dot|and|brcup)?|r(on|et))|r(oss|arr))|C(scr|hi|c(irc|onint|edil|aron)|ircle(Minus|Times|Dot|Plus)|Hcy|o(n(tourIntegral|int|gruent)|unterClockwiseContourIntegral|p(f|roduct)|lon(e)?)|dot|up(Cap)?|OPY|e(nterDot|dilla)|fr|lo(seCurly(DoubleQuote|Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))\n\t\t\t\t\t\t | (d(s(c(y|r)|trok|ol)|har(l|r)|c(y|aron)|t(dot|ri(f)?)|i(sin|e|v(ide(ontimes)?|onx)?|am(s|ond(suit)?)?|gamma)|Har|z(cy|igrarr)|o(t(square|plus|eq(dot)?|minus)?|ublebarwedge|pf|wn(harpoon(left|right)|downarrows|arrow)|llar)|d(otseq|a(rr|gger))?|u(har|arr)|jcy|e(lta|g|mptyv)|f(isht|r)|wangle|lc(orn|rop)|a(sh(v)?|leth|rr|gger)|r(c(orn|rop)|bkarow)|b(karow|lac)|Arr)|D(s(cr|trok)|c(y|aron)|Scy|i(fferentialD|a(critical(Grave|Tilde|Do(t|ubleAcute)|Acute)|mond))|o(t(Dot|Equal)?|uble(Right(Tee|Arrow)|ContourIntegral|Do(t|wnArrow)|Up(DownArrow|Arrow)|VerticalBar|L(ong(RightArrow|Left(RightArrow|Arrow))|eft(RightArrow|Tee|Arrow)))|pf|wn(Right(TeeVector|Vector(Bar)?)|Breve|Tee(Arrow)?|arrow|Left(RightVector|TeeVector|Vector(Bar)?)|Arrow(Bar|UpArrow)?))|Zcy|el(ta)?|D(otrahd)?|Jcy|fr|a(shv|rr|gger)))\n\t\t\t\t\t\t | (e(s(cr|im|dot)|n(sp|g)|c(y|ir(c)?|olon|aron)|t(h|a)|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(ot|Dot)|q(s(im|lant(less|gtr))|c(irc|olon)|u(iv(DD)?|est|als)|vparsl)|f(Dot|r)|l(s(dot)?|inters|l)?|a(ster|cute)|r(Dot|arr)|g(s(dot)?|rave)?|x(cl|ist|p(onentiale|ectation))|m(sp(1(3|4))?|pty(set|v)?|acr))|E(s(cr|im)|c(y|irc|aron)|ta|o(pf|gon)|NG|dot|uml|TH|psilon|qu(ilibrium|al(Tilde)?)|fr|lement|acute|grave|x(ists|ponentialE)|m(pty(SmallSquare|VerySmallSquare)|acr)))\n\t\t\t\t\t\t | (f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(ig|lig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1(2|8|3|4|5|6)|78|2(3|5)|3(8|4|5)|45|5(8|6)))))|F(scr|cy|illed(SmallSquare|VerySmallSquare)|o(uriertrf|pf|rAll)|fr))\n\t\t\t\t\t\t | (G(scr|c(y|irc|edil)|t|opf|dot|T|Jcy|fr|amma(d)?|reater(Greater|SlantEqual|Tilde|Equal(Less)?|FullEqual|Less)|g|breve)|g(s(cr|im(e|l)?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(qless|less)|less|a(pprox|rr)))?|imel|opf|dot|jcy|e(s(cc|dot(o(l)?)?|l(es)?)?|q(slant|q)?|l)?|v(nE|ertneqq)|fr|E(l)?|l(j|E|a)?|a(cute|p|mma(d)?)|rave|g(g)?|breve))\n\t\t\t\t\t\t | (h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok(leftarrow|rightarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks(earow|warow)|fr|a(irsp|lf|r(dcy|r(cir|w)?)|milt)|bar|Arr)|H(s(cr|trok)|circ|ilbertSpace|o(pf|rizontalLine)|ump(DownHump|Equal)|fr|a(cek|t)|ARDcy))\n\t\t\t\t\t\t | (i(s(cr|in(s(v)?|dot|v|E)?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(nt|int)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f(f|r)|acute|grave|m(of|ped|a(cr|th|g(part|e|line))))|I(scr|n(t(e(rsection|gral))?|visible(Comma|Times))|c(y|irc)|tilde|o(ta|pf|gon)|dot|u(kcy|ml)|Ocy|Jlig|fr|Ecy|acute|grave|m(plies|a(cr|ginaryI))?))\n\t\t\t\t\t\t | (j(s(cr|ercy)|c(y|irc)|opf|ukcy|fr|math)|J(s(cr|ercy)|c(y|irc)|opf|ukcy|fr))\n\t\t\t\t\t\t | (k(scr|hcy|c(y|edil)|opf|jcy|fr|appa(v)?|green)|K(scr|c(y|edil)|Hcy|opf|Jcy|fr|appa))\n\t\t\t\t\t\t | (l(s(h|cr|trok|im(e|g)?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(il|dil)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i(e|f)?|Par))?|Har|o(ng(left(arrow|rightarrow)|rightarrow|mapsto)|times|z(enge|f)?|oparrow(left|right)|p(f|lus|ar)|w(ast|bar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|r(dhar|ushar))|ur(dshar|uhar)|jcy|par(lt)?|e(s(s(sim|dot|eq(qgtr|gtr)|approx|gtr)|cc|dot(o(r)?)?|g(es)?)?|q(slant|q)?|ft(harpoon(down|up)|threetimes|leftarrows|arrow(tail)?|right(squigarrow|harpoons|arrow(s)?))|g)?|v(nE|ertneqq)|f(isht|loor|r)|E(g)?|l(hard|corner|tri|arr)?|a(ng(d|le)?|cute|t(e(s)?|ail)?|p|emptyv|quo|rr(sim|hk|tl|pl|fs|lp|b(fs)?)?|gran|mbda)|r(har(d)?|corner|tri|arr|m)|g(E)?|m(idot|oust(ache)?)|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left(arrow|rightarrow)|rightarrow|Left(RightArrow|Arrow))|pf|wer(RightArrow|LeftArrow))|T|e(ss(Greater|SlantEqual|Tilde|EqualGreater|FullEqual|Less)|ft(Right(Vector|Arrow)|Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|rightarrow|Floor|A(ngleBracket|rrow(RightArrow|Bar)?)))|Jcy|fr|l(eftarrow)?|a(ng|cute|placetrf|rr|mbda)|midot))\n\t\t\t\t\t\t | (M(scr|cy|inusPlus|opf|u|e(diumSpace|llintrf)|fr|ap)|m(s(cr|tpos)|ho|nplus|c(y|omma)|i(nus(d(u)?|b)?|cro|d(cir|dot|ast)?)|o(dels|pf)|dash|u(ltimap|map)?|p|easuredangle|DDot|fr|l(cp|dr)|a(cr|p(sto(down|up|left)?)?|l(t(ese)?|e)|rker)))\n\t\t\t\t\t\t | (n(s(hort(parallel|mid)|c(cue|e|r)?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|e|E)?|b(set(eq(q)?)?|e|E)?)|par|qsu(pe|be)|mid)|Rightarrow|h(par|arr|Arr)|G(t(v)?|g)|c(y|ong(dot)?|up|edil|a(p|ron))|t(ilde|lg|riangle(left(eq)?|right(eq)?)|gl)|i(s(d)?|v)?|o(t(ni(v(c|a|b))?|in(dot|v(c|a|b)|E)?)?|pf)|dash|u(m(sp|ero)?)?|jcy|p(olint|ar(sl|t|allel)?|r(cue|e(c(eq)?)?)?)|e(s(im|ear)|dot|quiv|ar(hk|r(ow)?)|xist(s)?|Arr)?|v(sim|infin|Harr|dash|Dash|l(t(rie)?|e|Arr)|ap|r(trie|Arr)|g(t|e))|fr|w(near|ar(hk|r(ow)?)|Arr)|V(dash|Dash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft(arrow|rightarrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr(c|w)?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft(arrow|rightarrow)|l)|b(sp|ump(e)?))|N(scr|c(y|edil|aron)|tilde|o(nBreakingSpace|Break|t(R(ightTriangle(Bar|Equal)?|everseElement)|Greater(Greater|SlantEqual|Tilde|Equal|FullEqual|Less)?|S(u(cceeds(SlantEqual|Tilde|Equal)?|perset(Equal)?|bset(Equal)?)|quareSu(perset(Equal)?|bset(Equal)?))|Hump(DownHump|Equal)|Nested(GreaterGreater|LessLess)|C(ongruent|upCap)|Tilde(Tilde|Equal|FullEqual)?|DoubleVerticalBar|Precedes(SlantEqual|Equal)?|E(qual(Tilde)?|lement|xists)|VerticalBar|Le(ss(Greater|SlantEqual|Tilde|Equal|Less)?|ftTriangle(Bar|Equal)?))?|pf)|u|e(sted(GreaterGreater|LessLess)|wLine|gative(MediumSpace|Thi(nSpace|ckSpace)|VeryThinSpace))|Jcy|fr|acute))\n\t\t\t\t\t\t | (o(s(cr|ol|lash)|h(m|bar)|c(y|ir(c)?)|ti(lde|mes(as)?)|S|int|opf|d(sold|iv|ot|ash|blac)|uml|p(erp|lus|ar)|elig|vbar|f(cir|r)|l(c(ir|ross)|t|ine|arr)|a(st|cute)|r(slope|igof|or|d(er(of)?|f|m)?|v|arr)?|g(t|on|rave)|m(i(nus|cron|d)|ega|acr))|O(s(cr|lash)|c(y|irc)|ti(lde|mes)|opf|dblac|uml|penCurly(DoubleQuote|Quote)|ver(B(ar|rac(e|ket))|Parenthesis)|fr|Elig|acute|r|grave|m(icron|ega|acr)))\n\t\t\t\t\t\t | (p(s(cr|i)|h(i(v)?|one|mmat)|cy|i(tchfork|v)?|o(intint|und|pf)|uncsp|er(cnt|tenk|iod|p|mil)|fr|l(us(sim|cir|two|d(o|u)|e|acir|mn|b)?|an(ck(h)?|kv))|ar(s(im|l)|t|a(llel)?)?|r(sim|n(sim|E|ap)|cue|ime(s)?|o(d|p(to)?|f(surf|line|alar))|urel|e(c(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?)?|E|ap)?|m)|P(s(cr|i)|hi|cy|i|o(incareplane|pf)|fr|lusMinus|artialD|r(ime|o(duct|portion(al)?)|ecedes(SlantEqual|Tilde|Equal)?)?))\n\t\t\t\t\t\t | (q(scr|int|opf|u(ot|est(eq)?|at(int|ernions))|prime|fr)|Q(scr|opf|UOT|fr))\n\t\t\t\t\t\t | (R(s(h|cr)|ho|c(y|edil|aron)|Barr|ight(Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|Floor|A(ngleBracket|rrow(Bar|LeftArrow)?))|o(undImplies|pf)|uleDelayed|e(verse(UpEquilibrium|E(quilibrium|lement)))?|fr|EG|a(ng|cute|rr(tl)?)|rightarrow)|r(s(h|cr|q(uo(r)?|b)|aquo)|h(o(v)?|ar(d|u(l)?))|nmid|c(y|ub|e(il|dil)|aron)|Barr|t(hree|imes|ri(e|f|ltri)?)|i(singdotseq|ng|ght(squigarrow|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(tail)?|rightarrows))|Har|o(times|p(f|lus|ar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|ldhar)|uluhar|p(polint|ar(gt)?)|e(ct|al(s|ine|part)?|g)|f(isht|loor|r)|l(har|arr|m)|a(ng(d|e|le)?|c(ute|e)|t(io(nals)?|ail)|dic|emptyv|quo|rr(sim|hk|c|tl|pl|fs|w|lp|ap|b(fs)?)?)|rarr|x|moust(ache)?|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr)))\n\t\t\t\t\t\t | (s(s(cr|tarf|etmn|mile)|h(y|c(hcy|y)|ort(parallel|mid)|arp)|c(sim|y|n(sim|E|ap)|cue|irc|polint|e(dil)?|E|a(p|ron))?|t(ar(f)?|r(ns|aight(phi|epsilon)))|i(gma(v|f)?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot(e|b)?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n(e|E)|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|n(e|E)|dot|plus|e(dot)?|E|rarr|mult)?)|pa(des(uit)?|r)|e(swar|ct|tm(n|inus)|ar(hk|r(ow)?)|xt|mi|Arr)|q(su(p(set(eq)?|e)?|b(set(eq)?|e)?)|c(up(s)?|ap(s)?)|u(f|ar(e|f))?)|fr(own)?|w(nwar|ar(hk|r(ow)?)|Arr)|larr|acute|rarr|m(t(e(s)?)?|i(d|le)|eparsl|a(shp|llsetminus))|bquo)|S(scr|hort(RightArrow|DownArrow|UpArrow|LeftArrow)|c(y|irc|edil|aron)?|tar|igma|H(cy|CHcy)|opf|u(c(hThat|ceeds(SlantEqual|Tilde|Equal)?)|p(set|erset(Equal)?)?|m|b(set(Equal)?)?)|OFTcy|q(uare(Su(perset(Equal)?|bset(Equal)?)|Intersection|Union)?|rt)|fr|acute|mallCircle))\n\t\t\t\t\t\t | (t(s(hcy|c(y|r)|trok)|h(i(nsp|ck(sim|approx))|orn|e(ta(sym|v)?|re(4|fore))|k(sim|ap))|c(y|edil|aron)|i(nt|lde|mes(d|b(ar)?)?)|o(sa|p(cir|f(ork)?|bot)?|ea)|dot|prime|elrec|fr|w(ixt|ohead(leftarrow|rightarrow))|a(u|rget)|r(i(sb|time|dot|plus|e|angle(down|q|left(eq)?|right(eq)?)?|minus)|pezium|ade)|brk)|T(s(cr|trok)|RADE|h(i(nSpace|ckSpace)|e(ta|refore))|c(y|edil|aron)|S(cy|Hcy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a(u|b)|ripleDot))\n\t\t\t\t\t\t | (u(scr|h(ar(l|r)|blk)|c(y|irc)|t(ilde|dot|ri(f)?)|Har|o(pf|gon)|d(har|arr|blac)|u(arr|ml)|p(si(h|lon)?|harpoon(left|right)|downarrow|uparrows|lus|arrow)|f(isht|r)|wangle|l(c(orn(er)?|rop)|tri)|a(cute|rr)|r(c(orn(er)?|rop)|tri|ing)|grave|m(l|acr)|br(cy|eve)|Arr)|U(scr|n(ion(Plus)?|der(B(ar|rac(e|ket))|Parenthesis))|c(y|irc)|tilde|o(pf|gon)|dblac|uml|p(si(lon)?|downarrow|Tee(Arrow)?|per(RightArrow|LeftArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))\n\t\t\t\t\t\t | (v(s(cr|u(pn(e|E)|bn(e|E)))|nsu(p|b)|cy|Bar(v)?|zigzag|opf|dash|prop|e(e(eq|bar)?|llip|r(t|bar))|Dash|fr|ltri|a(ngrt|r(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|t(heta|riangle(left|right))|p(hi|i|ropto)|epsilon|kappa|r(ho)?))|rtri|Arr)|V(scr|cy|opf|dash(l)?|e(e|r(yThinSpace|t(ical(Bar|Separator|Tilde|Line))?|bar))|Dash|vdash|fr|bar))\n\t\t\t\t\t\t | (w(scr|circ|opf|p|e(ierp|d(ge(q)?|bar))|fr|r(eath)?)|W(scr|circ|opf|edge|fr))\n\t\t\t\t\t\t | (X(scr|i|opf|fr)|x(s(cr|qcup)|h(arr|Arr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l(arr|Arr)|r(arr|Arr)|map))\n\t\t\t\t\t\t | (y(scr|c(y|irc)|icy|opf|u(cy|ml)|en|fr|ac(y|ute))|Y(scr|c(y|irc)|opf|uml|Icy|Ucy|fr|acute|Acy))\n\t\t\t\t\t\t | (z(scr|hcy|c(y|aron)|igrarr|opf|dot|e(ta|etrf)|fr|w(nj|j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute))\n\t\t\t\t\t\t)\n\t\t\t\t\t\t(;)\n\t\t\t\t\t',
327
+ name: 'constant.character.entity.named.$2.html',
328
+ },
329
+ {
330
+ captures: {
331
+ '1': {
332
+ name: 'punctuation.definition.entity.html',
333
+ },
334
+ '3': {
335
+ name: 'punctuation.definition.entity.html',
336
+ },
337
+ },
338
+ match: '(&)#[0-9]+(;)',
339
+ name: 'constant.character.entity.numeric.decimal.html',
340
+ },
341
+ {
342
+ captures: {
343
+ '1': {
344
+ name: 'punctuation.definition.entity.html',
345
+ },
346
+ '3': {
347
+ name: 'punctuation.definition.entity.html',
348
+ },
349
+ },
350
+ match: '(&)#[xX][0-9a-fA-F]+(;)',
351
+ name: 'constant.character.entity.numeric.hexadecimal.html',
352
+ },
353
+ {
354
+ match: '&(?=[a-zA-Z0-9]+;)',
355
+ name: 'invalid.illegal.ambiguous-ampersand.html',
356
+ },
357
+ ],
358
+ },
359
+ heading: {
360
+ match: '(?:^|\\G)[ ]*(#{1,6}\\s+(.*?)(\\s+#{1,6})?\\s*)$',
361
+ captures: {
362
+ '1': {
363
+ patterns: [
364
+ {
365
+ match: '(#{6})\\s+(.*?)(?:\\s+(#+))?\\s*$',
366
+ name: 'heading.6.markdown',
367
+ captures: {
368
+ '1': {
369
+ name: 'punctuation.definition.heading.markdown',
370
+ },
371
+ '2': {
372
+ name: 'entity.name.section.markdown',
373
+ patterns: [
374
+ {
375
+ include: 'text.html.markdown#inline',
376
+ },
377
+ {
378
+ include: 'text.html.derivative',
379
+ },
380
+ ],
381
+ },
382
+ '3': {
383
+ name: 'punctuation.definition.heading.markdown',
384
+ },
385
+ },
386
+ },
387
+ {
388
+ match: '(#{5})\\s+(.*?)(?:\\s+(#+))?\\s*$',
389
+ name: 'heading.5.markdown',
390
+ captures: {
391
+ '1': {
392
+ name: 'punctuation.definition.heading.markdown',
393
+ },
394
+ '2': {
395
+ name: 'entity.name.section.markdown',
396
+ patterns: [
397
+ {
398
+ include: 'text.html.markdown#inline',
399
+ },
400
+ {
401
+ include: 'text.html.derivative',
402
+ },
403
+ ],
404
+ },
405
+ '3': {
406
+ name: 'punctuation.definition.heading.markdown',
407
+ },
408
+ },
409
+ },
410
+ {
411
+ match: '(#{4})\\s+(.*?)(?:\\s+(#+))?\\s*$',
412
+ name: 'heading.4.markdown',
413
+ captures: {
414
+ '1': {
415
+ name: 'punctuation.definition.heading.markdown',
416
+ },
417
+ '2': {
418
+ name: 'entity.name.section.markdown',
419
+ patterns: [
420
+ {
421
+ include: 'text.html.markdown#inline',
422
+ },
423
+ {
424
+ include: 'text.html.derivative',
425
+ },
426
+ ],
427
+ },
428
+ '3': {
429
+ name: 'punctuation.definition.heading.markdown',
430
+ },
431
+ },
432
+ },
433
+ {
434
+ match: '(#{3})\\s+(.*?)(?:\\s+(#+))?\\s*$',
435
+ name: 'heading.3.markdown',
436
+ captures: {
437
+ '1': {
438
+ name: 'punctuation.definition.heading.markdown',
439
+ },
440
+ '2': {
441
+ name: 'entity.name.section.markdown',
442
+ patterns: [
443
+ {
444
+ include: 'text.html.markdown#inline',
445
+ },
446
+ {
447
+ include: 'text.html.derivative',
448
+ },
449
+ ],
450
+ },
451
+ '3': {
452
+ name: 'punctuation.definition.heading.markdown',
453
+ },
454
+ },
455
+ },
456
+ {
457
+ match: '(#{2})\\s+(.*?)(?:\\s+(#+))?\\s*$',
458
+ name: 'heading.2.markdown',
459
+ captures: {
460
+ '1': {
461
+ name: 'punctuation.definition.heading.markdown',
462
+ },
463
+ '2': {
464
+ name: 'entity.name.section.markdown',
465
+ patterns: [
466
+ {
467
+ include: 'text.html.markdown#inline',
468
+ },
469
+ {
470
+ include: 'text.html.derivative',
471
+ },
472
+ ],
473
+ },
474
+ '3': {
475
+ name: 'punctuation.definition.heading.markdown',
476
+ },
477
+ },
478
+ },
479
+ {
480
+ match: '(#{1})\\s+(.*?)(?:\\s+(#+))?\\s*$',
481
+ name: 'heading.1.markdown',
482
+ captures: {
483
+ '1': {
484
+ name: 'punctuation.definition.heading.markdown',
485
+ },
486
+ '2': {
487
+ name: 'entity.name.section.markdown',
488
+ patterns: [
489
+ {
490
+ include: 'text.html.markdown#inline',
491
+ },
492
+ {
493
+ include: 'text.html.derivative',
494
+ },
495
+ ],
496
+ },
497
+ '3': {
498
+ name: 'punctuation.definition.heading.markdown',
499
+ },
500
+ },
501
+ },
502
+ ],
503
+ },
504
+ },
505
+ name: 'markup.heading.markdown',
506
+ patterns: [
507
+ {
508
+ include: 'text.html.markdown#inline',
509
+ },
510
+ ],
511
+ },
512
+ 'heading-setext': {
513
+ patterns: [
514
+ {
515
+ match: '^(={3,})(?=[ \\t]*$\\n?)',
516
+ name: 'markup.heading.setext.1.markdown',
517
+ },
518
+ {
519
+ match: '^(-{3,})(?=[ \\t]*$\\n?)',
520
+ name: 'markup.heading.setext.2.markdown',
521
+ },
522
+ ],
523
+ },
524
+ lists: {
525
+ patterns: [
526
+ {
527
+ begin: '(^|\\G)([ ]*)([*+-])([ \\t])',
528
+ beginCaptures: {
529
+ '3': {
530
+ name: 'punctuation.definition.list.begin.markdown',
531
+ },
532
+ },
533
+ name: 'markup.list.unnumbered.markdown',
534
+ patterns: [
535
+ {
536
+ include: '#block',
537
+ },
538
+ {
539
+ include: 'text.html.markdown#list_paragraph',
540
+ },
541
+ ],
542
+ while: '((^|\\G)[ \\t]+)|(^[ \\t]*$)',
543
+ },
544
+ {
545
+ begin: '(^|\\G)([ ]*)([0-9]+\\.)([ \\t])',
546
+ beginCaptures: {
547
+ '3': {
548
+ name: 'punctuation.definition.list.begin.markdown',
549
+ },
550
+ },
551
+ name: 'markup.list.numbered.markdown',
552
+ patterns: [
553
+ {
554
+ include: '#block',
555
+ },
556
+ {
557
+ include: 'text.html.markdown#list_paragraph',
558
+ },
559
+ ],
560
+ while: '((^|\\G)[ \\t]+)|(^[ \\t]*$)',
561
+ },
562
+ ],
563
+ },
564
+ paragraph: {
565
+ begin: '(^|\\G)[ ]*(?=\\S)',
566
+ name: 'meta.paragraph.markdown',
567
+ patterns: [
568
+ {
569
+ include: '#inline',
570
+ },
571
+ {
572
+ include: 'text.html.derivative',
573
+ },
574
+ {
575
+ include: '#heading-setext',
576
+ },
577
+ ],
578
+ while: '(^|\\G)((?=\\s*[-=]{3,}\\s*$)|[ ]{4,}(?=\\S))',
579
+ },
580
+ blockquote: {
581
+ begin: '(^|\\G)[ ]*(>) ?',
582
+ captures: {
583
+ '2': {
584
+ name: 'punctuation.definition.quote.begin.markdown',
585
+ },
586
+ },
587
+ name: 'markup.quote.markdown',
588
+ patterns: [
589
+ {
590
+ include: '#block',
591
+ },
592
+ ],
593
+ while: '(^|\\G)\\s*(>) ?',
594
+ },
595
+ },
596
+ };
597
+ export default [...markdown, ...yaml, ...html_derivative, comark];
@@ -5,8 +5,20 @@ import type { ComarkPluginFactory } from '../types.ts';
5
5
  */
6
6
  export declare function createSerializedTask<TArgs extends unknown[], TResult>(fn: (...args: TArgs) => Promise<TResult>): (...args: TArgs) => Promise<TResult>;
7
7
  /**
8
- * Define a Comark plugin
9
- * @param fn - The plugin factory function
10
- * @returns The defined plugin
8
+ * Define a Comark plugin.
9
+ *
10
+ * `TMeta` and `TFrontmatter` declare what the plugin contributes to
11
+ * `tree.meta` / `tree.frontmatter`. They are inferred from the factory's
12
+ * return type when set via the `__meta` / `__frontmatter` phantom markers,
13
+ * or can be passed explicitly. Plugins that don't contribute typed keys can
14
+ * omit them entirely.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * defineComarkPlugin<Options, { toc: Toc }>((opts) => ({
19
+ * name: 'toc',
20
+ * post(state) { state.tree.meta.toc = ... },
21
+ * }))
22
+ * ```
11
23
  */
12
- export declare function defineComarkPlugin<Options>(fn: ComarkPluginFactory<Options>): ComarkPluginFactory<Options>;
24
+ export declare function defineComarkPlugin<Options, TMeta = {}, TFrontmatter = {}>(fn: ComarkPluginFactory<Options, TMeta, TFrontmatter>): ComarkPluginFactory<Options, TMeta, TFrontmatter>;
@@ -5,17 +5,27 @@
5
5
  export function createSerializedTask(fn) {
6
6
  let chain = Promise.resolve(null);
7
7
  return (...args) => {
8
- chain = chain
9
- .then(() => fn(...args))
10
- .catch(() => null);
8
+ chain = chain.then(() => fn(...args)).catch(() => null);
11
9
  return chain;
12
10
  };
13
11
  }
14
12
  // #region define plugin
15
13
  /**
16
- * Define a Comark plugin
17
- * @param fn - The plugin factory function
18
- * @returns The defined plugin
14
+ * Define a Comark plugin.
15
+ *
16
+ * `TMeta` and `TFrontmatter` declare what the plugin contributes to
17
+ * `tree.meta` / `tree.frontmatter`. They are inferred from the factory's
18
+ * return type when set via the `__meta` / `__frontmatter` phantom markers,
19
+ * or can be passed explicitly. Plugins that don't contribute typed keys can
20
+ * omit them entirely.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * defineComarkPlugin<Options, { toc: Toc }>((opts) => ({
25
+ * name: 'toc',
26
+ * post(state) { state.tree.meta.toc = ... },
27
+ * }))
28
+ * ```
19
29
  */
20
30
  export function defineComarkPlugin(fn) {
21
31
  return fn;