@hymarkx/parser 0.0.2

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.
@@ -0,0 +1,508 @@
1
+ import { createDiagnostic } from '@hymarkx/ast';
2
+ import { ParserInternalError } from './internal-error.js';
3
+ import { SourcePositions } from './positions.js';
4
+ import { HMX_VERSION } from './version.js';
5
+ function isRecord(value) {
6
+ return typeof value === 'object' && value !== null;
7
+ }
8
+ function isMdastNode(value) {
9
+ return isRecord(value) && typeof value.type === 'string';
10
+ }
11
+ function internalError(message, span) {
12
+ return new ParserInternalError(createDiagnostic({
13
+ code: 'HMX5001',
14
+ severity: 'error',
15
+ message,
16
+ span,
17
+ }));
18
+ }
19
+ function requiredString(value, field, nodeType, positions) {
20
+ if (typeof value !== 'string') {
21
+ throw internalError(`mdast node "${nodeType}" has an invalid ${field} field`, positions.span);
22
+ }
23
+ return value;
24
+ }
25
+ function nullableString(value, field, nodeType, positions) {
26
+ if (value === undefined || value === null) {
27
+ return null;
28
+ }
29
+ return requiredString(value, field, nodeType, positions);
30
+ }
31
+ function isHeadingDepth(value) {
32
+ return value === 1 || value === 2 || value === 3 || value === 4 || value === 5 || value === 6;
33
+ }
34
+ function isReferenceType(value) {
35
+ return value === 'shortcut' || value === 'collapsed' || value === 'full';
36
+ }
37
+ function positionOffset(point, nodeType, positions) {
38
+ if (point.offset !== undefined) {
39
+ if (!Number.isInteger(point.offset)) {
40
+ throw internalError(`mdast node "${nodeType}" has an invalid position offset`, positions.span);
41
+ }
42
+ return Number(point.offset);
43
+ }
44
+ if (!Number.isInteger(point.line) || !Number.isInteger(point.column)) {
45
+ throw internalError(`mdast node "${nodeType}" has an incomplete position`, positions.span);
46
+ }
47
+ try {
48
+ return positions.offsetAt(Number(point.line), Number(point.column));
49
+ }
50
+ catch (error) {
51
+ const detail = error instanceof Error ? error.message : String(error);
52
+ throw internalError(`mdast node "${nodeType}" has an invalid position: ${detail}`, positions.span);
53
+ }
54
+ }
55
+ function toSpan(node, positions) {
56
+ if (!isRecord(node.position)) {
57
+ throw internalError(`mdast node "${node.type}" has no position`, positions.span);
58
+ }
59
+ if (!isRecord(node.position.start) || !isRecord(node.position.end)) {
60
+ throw internalError(`mdast node "${node.type}" has an incomplete position`, positions.span);
61
+ }
62
+ const startOffset = positionOffset(node.position.start, node.type, positions);
63
+ const endOffset = positionOffset(node.position.end, node.type, positions);
64
+ if (endOffset < startOffset) {
65
+ throw internalError(`mdast node "${node.type}" has a reversed position`, positions.span);
66
+ }
67
+ try {
68
+ return {
69
+ start: positions.pointAt(startOffset),
70
+ end: positions.pointAt(endOffset),
71
+ };
72
+ }
73
+ catch (error) {
74
+ const detail = error instanceof Error ? error.message : String(error);
75
+ throw internalError(`mdast node "${node.type}" has an invalid position: ${detail}`, positions.span);
76
+ }
77
+ }
78
+ function spanField(value, field, nodeType, positions) {
79
+ return toSpan({ type: `${nodeType}.${field}`, position: value }, positions);
80
+ }
81
+ function attributesOf(node, positions) {
82
+ if (!Array.isArray(node.attributes)) {
83
+ throw internalError(`mdast node "${node.type}" has no attributes array`, positions.span);
84
+ }
85
+ const attributes = [];
86
+ for (const value of node.attributes) {
87
+ if (!isRecord(value) || typeof value.name !== 'string') {
88
+ throw internalError(`mdast node "${node.type}" has an invalid directive attribute`, positions.span);
89
+ }
90
+ if (value.value !== null && typeof value.value !== 'string') {
91
+ throw internalError(`mdast node "${node.type}" has an invalid directive attribute value`, positions.span);
92
+ }
93
+ attributes.push({
94
+ name: value.name,
95
+ value: value.value,
96
+ position: spanField(value.position, 'attribute.position', node.type, positions),
97
+ nameSpan: spanField(value.nameSpan, 'attribute.nameSpan', node.type, positions),
98
+ ...(value.valueSpan === undefined
99
+ ? {}
100
+ : {
101
+ valueSpan: spanField(value.valueSpan, 'attribute.valueSpan', node.type, positions),
102
+ }),
103
+ });
104
+ }
105
+ return attributes;
106
+ }
107
+ function directiveLabel(node, positions) {
108
+ if (node.label === undefined) {
109
+ return undefined;
110
+ }
111
+ if (!Array.isArray(node.label)) {
112
+ throw internalError(`mdast node "${node.type}" has an invalid label`, positions.span);
113
+ }
114
+ return [];
115
+ }
116
+ function tableAlignment(node, positions) {
117
+ const position = toSpan(node, positions);
118
+ if (!Array.isArray(node.align)) {
119
+ throw internalError('mdast node "table" has an invalid align field', position);
120
+ }
121
+ const align = [];
122
+ for (const value of node.align) {
123
+ if (value !== 'left' && value !== 'right' && value !== 'center' && value !== null) {
124
+ throw internalError('mdast node "table" has an invalid alignment value', position);
125
+ }
126
+ align.push(value);
127
+ }
128
+ return { type: 'table', align, children: [], position };
129
+ }
130
+ function createNode(node, positions) {
131
+ const position = toSpan(node, positions);
132
+ switch (node.type) {
133
+ case 'root':
134
+ return { type: 'root', hmxVersion: HMX_VERSION, children: [], position };
135
+ case 'yaml':
136
+ return {
137
+ type: 'yaml',
138
+ value: requiredString(node.value, 'value', node.type, positions),
139
+ position,
140
+ };
141
+ case 'paragraph':
142
+ return { type: 'paragraph', children: [], position };
143
+ case 'heading':
144
+ if (!isHeadingDepth(node.depth)) {
145
+ throw internalError('mdast node "heading" has an invalid depth field', position);
146
+ }
147
+ return { type: 'heading', depth: node.depth, children: [], position };
148
+ case 'thematicBreak':
149
+ return { type: 'thematicBreak', position };
150
+ case 'blockquote':
151
+ return { type: 'blockquote', children: [], position };
152
+ case 'list':
153
+ return {
154
+ type: 'list',
155
+ ordered: node.ordered === true,
156
+ start: typeof node.start === 'number' ? node.start : null,
157
+ spread: node.spread === true,
158
+ children: [],
159
+ position,
160
+ };
161
+ case 'listItem':
162
+ return {
163
+ type: 'listItem',
164
+ spread: node.spread === true,
165
+ checked: typeof node.checked === 'boolean' ? node.checked : null,
166
+ children: [],
167
+ position,
168
+ };
169
+ case 'code':
170
+ return {
171
+ type: 'code',
172
+ lang: nullableString(node.lang, 'lang', node.type, positions),
173
+ meta: nullableString(node.meta, 'meta', node.type, positions),
174
+ value: requiredString(node.value, 'value', node.type, positions),
175
+ position,
176
+ };
177
+ case 'html':
178
+ return {
179
+ type: 'html',
180
+ value: requiredString(node.value, 'value', node.type, positions),
181
+ position,
182
+ };
183
+ case 'text':
184
+ return {
185
+ type: 'text',
186
+ value: requiredString(node.value, 'value', node.type, positions),
187
+ position,
188
+ };
189
+ case 'interpolation':
190
+ return {
191
+ type: 'interpolation',
192
+ value: requiredString(node.value, 'value', node.type, positions),
193
+ position,
194
+ };
195
+ case 'emphasis':
196
+ return { type: 'emphasis', children: [], position };
197
+ case 'strong':
198
+ return { type: 'strong', children: [], position };
199
+ case 'delete':
200
+ return { type: 'delete', children: [], position };
201
+ case 'inlineCode':
202
+ return {
203
+ type: 'inlineCode',
204
+ value: requiredString(node.value, 'value', node.type, positions),
205
+ position,
206
+ };
207
+ case 'break':
208
+ return { type: 'break', position };
209
+ case 'link':
210
+ return {
211
+ type: 'link',
212
+ url: requiredString(node.url, 'url', node.type, positions),
213
+ title: nullableString(node.title, 'title', node.type, positions),
214
+ children: [],
215
+ position,
216
+ };
217
+ case 'image':
218
+ return {
219
+ type: 'image',
220
+ url: requiredString(node.url, 'url', node.type, positions),
221
+ title: nullableString(node.title, 'title', node.type, positions),
222
+ alt: nullableString(node.alt, 'alt', node.type, positions),
223
+ position,
224
+ };
225
+ case 'definition':
226
+ return {
227
+ type: 'definition',
228
+ identifier: requiredString(node.identifier, 'identifier', node.type, positions),
229
+ label: nullableString(node.label, 'label', node.type, positions),
230
+ url: requiredString(node.url, 'url', node.type, positions),
231
+ title: nullableString(node.title, 'title', node.type, positions),
232
+ position,
233
+ };
234
+ case 'linkReference':
235
+ if (!isReferenceType(node.referenceType)) {
236
+ throw internalError('mdast node "linkReference" has an invalid referenceType field', position);
237
+ }
238
+ return {
239
+ type: 'linkReference',
240
+ identifier: requiredString(node.identifier, 'identifier', node.type, positions),
241
+ label: nullableString(node.label, 'label', node.type, positions),
242
+ referenceType: node.referenceType,
243
+ children: [],
244
+ position,
245
+ };
246
+ case 'imageReference':
247
+ if (!isReferenceType(node.referenceType)) {
248
+ throw internalError('mdast node "imageReference" has an invalid referenceType field', position);
249
+ }
250
+ return {
251
+ type: 'imageReference',
252
+ identifier: requiredString(node.identifier, 'identifier', node.type, positions),
253
+ label: nullableString(node.label, 'label', node.type, positions),
254
+ referenceType: node.referenceType,
255
+ alt: nullableString(node.alt, 'alt', node.type, positions),
256
+ position,
257
+ };
258
+ case 'table':
259
+ return tableAlignment(node, positions);
260
+ case 'tableRow':
261
+ return { type: 'tableRow', children: [], position };
262
+ case 'tableCell':
263
+ return { type: 'tableCell', children: [], position };
264
+ case 'textDirective':
265
+ return {
266
+ type: 'textDirective',
267
+ name: requiredString(node.name, 'name', node.type, positions),
268
+ attributes: attributesOf(node, positions),
269
+ children: [],
270
+ position,
271
+ };
272
+ case 'leafDirective': {
273
+ const label = directiveLabel(node, positions);
274
+ return {
275
+ type: 'leafDirective',
276
+ name: requiredString(node.name, 'name', node.type, positions),
277
+ attributes: attributesOf(node, positions),
278
+ ...(label === undefined ? {} : { label }),
279
+ position,
280
+ };
281
+ }
282
+ case 'containerDirective': {
283
+ const label = directiveLabel(node, positions);
284
+ return {
285
+ type: 'containerDirective',
286
+ name: requiredString(node.name, 'name', node.type, positions),
287
+ attributes: attributesOf(node, positions),
288
+ ...(label === undefined ? {} : { label }),
289
+ children: [],
290
+ position,
291
+ };
292
+ }
293
+ default:
294
+ throw internalError(`Unsupported mdast node type "${node.type}"`, position);
295
+ }
296
+ }
297
+ function labelChildrenOf(node, positions) {
298
+ if (node.type !== 'containerDirective' && node.type !== 'leafDirective') {
299
+ return undefined;
300
+ }
301
+ if (node.label === undefined) {
302
+ return undefined;
303
+ }
304
+ if (!Array.isArray(node.label)) {
305
+ throw internalError(`mdast node "${node.type}" has an invalid label`, positions.span);
306
+ }
307
+ return node.label;
308
+ }
309
+ function childrenOf(node, positions) {
310
+ switch (node.type) {
311
+ case 'root':
312
+ case 'paragraph':
313
+ case 'heading':
314
+ case 'blockquote':
315
+ case 'list':
316
+ case 'listItem':
317
+ case 'emphasis':
318
+ case 'strong':
319
+ case 'delete':
320
+ case 'link':
321
+ case 'linkReference':
322
+ case 'table':
323
+ case 'tableRow':
324
+ case 'tableCell':
325
+ case 'containerDirective':
326
+ case 'textDirective':
327
+ if (!Array.isArray(node.children)) {
328
+ throw internalError(`mdast node "${node.type}" has no children array`, positions.span);
329
+ }
330
+ return node.children;
331
+ case 'thematicBreak':
332
+ case 'yaml':
333
+ case 'code':
334
+ case 'html':
335
+ case 'text':
336
+ case 'interpolation':
337
+ case 'inlineCode':
338
+ case 'break':
339
+ case 'image':
340
+ case 'definition':
341
+ case 'imageReference':
342
+ case 'leafDirective':
343
+ return undefined;
344
+ default:
345
+ throw internalError(`Unsupported mdast node type "${node.type}"`, positions.span);
346
+ }
347
+ }
348
+ function appendLabel(parent, child, positions) {
349
+ if ((parent.type === 'containerDirective' || parent.type === 'leafDirective') &&
350
+ parent.label !== undefined &&
351
+ isPhrasingContent(child)) {
352
+ parent.label.push(child);
353
+ return;
354
+ }
355
+ throw internalError(`mdast node "${child.type}" cannot be a label child of "${parent.type}"`, positions.span);
356
+ }
357
+ function isBlockContent(node) {
358
+ return (node.type === 'blockquote' ||
359
+ node.type === 'code' ||
360
+ node.type === 'heading' ||
361
+ node.type === 'html' ||
362
+ node.type === 'list' ||
363
+ node.type === 'paragraph' ||
364
+ node.type === 'table' ||
365
+ node.type === 'thematicBreak' ||
366
+ node.type === 'containerDirective' ||
367
+ node.type === 'leafDirective');
368
+ }
369
+ function isPhrasingContent(node) {
370
+ return (node.type === 'break' ||
371
+ node.type === 'delete' ||
372
+ node.type === 'emphasis' ||
373
+ node.type === 'html' ||
374
+ node.type === 'image' ||
375
+ node.type === 'imageReference' ||
376
+ node.type === 'inlineCode' ||
377
+ node.type === 'interpolation' ||
378
+ node.type === 'link' ||
379
+ node.type === 'linkReference' ||
380
+ node.type === 'strong' ||
381
+ node.type === 'text' ||
382
+ node.type === 'textDirective');
383
+ }
384
+ function isRootContent(node) {
385
+ return isBlockContent(node) || node.type === 'definition' || node.type === 'yaml';
386
+ }
387
+ function appendChild(parent, child, positions) {
388
+ switch (parent.type) {
389
+ case 'root':
390
+ if (isRootContent(child)) {
391
+ parent.children.push(child);
392
+ return;
393
+ }
394
+ break;
395
+ case 'blockquote':
396
+ case 'listItem':
397
+ if (isBlockContent(child) || child.type === 'definition') {
398
+ parent.children.push(child);
399
+ return;
400
+ }
401
+ break;
402
+ case 'list':
403
+ if (child.type === 'listItem') {
404
+ parent.children.push(child);
405
+ return;
406
+ }
407
+ break;
408
+ case 'paragraph':
409
+ case 'heading':
410
+ case 'emphasis':
411
+ case 'strong':
412
+ case 'delete':
413
+ case 'link':
414
+ case 'linkReference':
415
+ case 'tableCell':
416
+ if (isPhrasingContent(child)) {
417
+ parent.children.push(child);
418
+ return;
419
+ }
420
+ break;
421
+ case 'table':
422
+ if (child.type === 'tableRow') {
423
+ parent.children.push(child);
424
+ return;
425
+ }
426
+ break;
427
+ case 'tableRow':
428
+ if (child.type === 'tableCell') {
429
+ parent.children.push(child);
430
+ return;
431
+ }
432
+ break;
433
+ case 'containerDirective':
434
+ if (isBlockContent(child)) {
435
+ parent.children.push(child);
436
+ return;
437
+ }
438
+ break;
439
+ case 'textDirective':
440
+ if (isPhrasingContent(child)) {
441
+ parent.children.push(child);
442
+ return;
443
+ }
444
+ break;
445
+ case 'leafDirective':
446
+ case 'thematicBreak':
447
+ case 'yaml':
448
+ case 'code':
449
+ case 'html':
450
+ case 'text':
451
+ case 'interpolation':
452
+ case 'inlineCode':
453
+ case 'break':
454
+ case 'image':
455
+ case 'definition':
456
+ case 'imageReference':
457
+ break;
458
+ }
459
+ throw internalError(`mdast node "${child.type}" cannot be a child of "${parent.type}"`, positions.span);
460
+ }
461
+ /** Converts an mdast-shaped value into a separately owned HMX tree without recursion. */
462
+ export function fromMdast(value, source) {
463
+ const positions = new SourcePositions(source);
464
+ if (!isMdastNode(value)) {
465
+ throw internalError('Markdown engine returned a value that is not an mdast node', positions.span);
466
+ }
467
+ const output = createNode(value, positions);
468
+ if (output.type !== 'root') {
469
+ throw internalError(`Markdown engine returned "${output.type}" instead of "root"`, positions.span);
470
+ }
471
+ const stack = [{ source: value, output }];
472
+ while (stack.length > 0) {
473
+ const frame = stack.pop();
474
+ if (frame === undefined) {
475
+ continue;
476
+ }
477
+ const sourceChildren = childrenOf(frame.source, positions);
478
+ const sourceLabel = labelChildrenOf(frame.source, positions);
479
+ if (sourceChildren === undefined && sourceLabel === undefined) {
480
+ continue;
481
+ }
482
+ const childFrames = [];
483
+ for (const sourceChild of sourceLabel ?? []) {
484
+ if (!isMdastNode(sourceChild)) {
485
+ throw internalError(`mdast node "${frame.source.type}" has an invalid label child`, positions.span);
486
+ }
487
+ const outputChild = createNode(sourceChild, positions);
488
+ appendLabel(frame.output, outputChild, positions);
489
+ childFrames.push({ source: sourceChild, output: outputChild });
490
+ }
491
+ for (const sourceChild of sourceChildren ?? []) {
492
+ if (!isMdastNode(sourceChild)) {
493
+ throw internalError(`mdast node "${frame.source.type}" has an invalid child`, positions.span);
494
+ }
495
+ const outputChild = createNode(sourceChild, positions);
496
+ appendChild(frame.output, outputChild, positions);
497
+ childFrames.push({ source: sourceChild, output: outputChild });
498
+ }
499
+ for (let index = childFrames.length - 1; index >= 0; index -= 1) {
500
+ const childFrame = childFrames[index];
501
+ if (childFrame !== undefined) {
502
+ stack.push(childFrame);
503
+ }
504
+ }
505
+ }
506
+ return output;
507
+ }
508
+ //# sourceMappingURL=from-mdast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-mdast.js","sourceRoot":"","sources":["../src/from-mdast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Extension } from 'mdast-util-from-markdown';
2
+ import { frontmatter } from 'micromark-extension-frontmatter';
3
+ import { SourcePositions } from './positions.js';
4
+ /** Creates the YAML-only, document-start frontmatter tokenizer. */
5
+ export declare function frontmatterTokenizer(): ReturnType<typeof frontmatter>;
6
+ /** Creates the HMX-owned mdast handler that retains raw frontmatter text. */
7
+ export declare function frontmatterFromMarkdown(positions: SourcePositions): Extension;
8
+ //# sourceMappingURL=frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,SAAS,EAAiB,MAAM,0BAA0B,CAAA;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AA6BhD,mEAAmE;AACnE,wBAAgB,oBAAoB,IAAI,UAAU,CAAC,OAAO,WAAW,CAAC,CAErE;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,eAAe,GAAG,SAAS,CAW7E"}
@@ -0,0 +1,36 @@
1
+ import { frontmatter } from 'micromark-extension-frontmatter';
2
+ import { SourcePositions } from './positions.js';
3
+ function yamlNode(context) {
4
+ const node = context.stack[context.stack.length - 1];
5
+ if (node?.type !== 'yaml') {
6
+ throw new TypeError('Expected an open YAML frontmatter node');
7
+ }
8
+ return node;
9
+ }
10
+ function rawValue(token, positions) {
11
+ const openingLineEnd = positions.source.indexOf('\n', token.start.offset);
12
+ const closingLineStart = positions.source.lastIndexOf('\n', token.end.offset - 1) + 1;
13
+ if (openingLineEnd < token.start.offset || closingLineStart <= openingLineEnd) {
14
+ throw new TypeError('Unexpected YAML frontmatter token shape');
15
+ }
16
+ const valueStart = openingLineEnd + 1;
17
+ const valueEnd = Math.max(valueStart, closingLineStart - 1);
18
+ return positions.source.slice(valueStart, valueEnd);
19
+ }
20
+ /** Creates the YAML-only, document-start frontmatter tokenizer. */
21
+ export function frontmatterTokenizer() {
22
+ return frontmatter('yaml');
23
+ }
24
+ /** Creates the HMX-owned mdast handler that retains raw frontmatter text. */
25
+ export function frontmatterFromMarkdown(positions) {
26
+ const enterYaml = function (token) {
27
+ const node = { type: 'yaml', value: '' };
28
+ this.enter(node, token);
29
+ };
30
+ const exitYaml = function (token) {
31
+ yamlNode(this).value = rawValue(token, positions);
32
+ this.exit(token);
33
+ };
34
+ return { enter: { yaml: enterYaml }, exit: { yaml: exitYaml } };
35
+ }
36
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../src/frontmatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAShD,SAAS,QAAQ,CAAC,OAAuB;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAmC,CAAA;IACtF,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,IAAiB,CAAA;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY,EAAE,SAA0B;IACxD,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACzE,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IACrF,IAAI,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;QAC9E,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,GAAG,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAA;IAC3D,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;AACrD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,oBAAoB;IAClC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,uBAAuB,CAAC,SAA0B;IAChE,MAAM,SAAS,GAAW,UAAU,KAAK;QACvC,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QACnD,IAAI,CAAC,KAAK,CAAC,IAAsC,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC,CAAA;IACD,MAAM,QAAQ,GAAW,UAAU,KAAK;QACtC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAA;AACjE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { Diagnostic, Root } from '@hymarkx/ast';
2
+ import { HMX_VERSION } from './version.js';
3
+ /** Options controlling Markdown parsing. */
4
+ export interface ParseOptions {
5
+ /** GFM table, strikethrough, task-list, and autolink extensions. Default: `true`. */
6
+ readonly gfm?: boolean;
7
+ /** File path included in diagnostics. Default: `'<anonymous>'`. */
8
+ readonly from?: string;
9
+ /**
10
+ * Recognize a leading `---` block as frontmatter. Default: `true`.
11
+ *
12
+ * The compiler sets this to `false` and reparses when a leading block turns out not to
13
+ * be a YAML mapping, because `---` is also ordinary CommonMark.
14
+ */
15
+ readonly frontmatter?: boolean;
16
+ }
17
+ /** The complete result of parsing normalized Markdown source. */
18
+ export interface ParseResult {
19
+ /** The source-faithful HMX syntax tree. */
20
+ readonly root: Root;
21
+ /** Parser diagnostics; parse failures are returned here and are never thrown. */
22
+ readonly diagnostics: readonly Diagnostic[];
23
+ /**
24
+ * Source after one leading BOM is stripped and CRLF or CR is normalized to LF.
25
+ *
26
+ * All spans index this string in UTF-16 code units. Lines and columns are 1-based;
27
+ * a tab advances one column and an astral character advances two. Diagnostic excerpts
28
+ * must therefore use this value instead of the caller's original input.
29
+ */
30
+ readonly source: string;
31
+ }
32
+ /**
33
+ * Parses CommonMark plus optional granular GFM extensions into the HMX AST.
34
+ *
35
+ * This function returns diagnostics instead of throwing for every string input.
36
+ */
37
+ export declare function parse(source: string, options?: ParseOptions): ParseResult;
38
+ export { HMX_VERSION };
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAgBpD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,iEAAiE;AACjE,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,iFAAiF;IACjF,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AA6CD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAuC7E;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}