@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,389 @@
1
+ import { createDiagnostic, isForbiddenAttributeName } from '@hymarkx/ast';
2
+ import { directive } from 'micromark-extension-directive';
3
+ import { markdownLineEnding } from 'micromark-util-character';
4
+ import { decodeString } from 'micromark-util-decode-string';
5
+ import { directiveAttributes, directiveAttributeTokenTypes } from './directive-attributes.js';
6
+ import { SourcePositions } from './positions.js';
7
+ const directiveNameToken = /^directive(?:Container|Leaf|Text)Name$/;
8
+ const directiveNamePrefixToken = /^directive(?:ContainerSequence|LeafSequence|TextMarker)$/;
9
+ function guardDirectiveName(construct, type) {
10
+ const expressionAttributes = directiveAttributes(directiveAttributeTokenTypes(type), type !== 'textDirective');
11
+ return {
12
+ ...construct,
13
+ tokenize(effects, ok, nok) {
14
+ let inDirectiveName = false;
15
+ let beforeDirectiveName = false;
16
+ const guardedEffects = {
17
+ ...effects,
18
+ attempt(candidate, attemptOk, attemptNok) {
19
+ const original = effects.attempt(candidate, attemptOk, attemptNok);
20
+ return (code) => code === 123
21
+ ? effects.attempt(expressionAttributes, attemptOk, attemptNok)(code)
22
+ : original(code);
23
+ },
24
+ enter(type, fields) {
25
+ if (directiveNameToken.test(type)) {
26
+ inDirectiveName = true;
27
+ beforeDirectiveName = false;
28
+ }
29
+ return effects.enter(type, fields);
30
+ },
31
+ exit(type) {
32
+ const token = effects.exit(type);
33
+ if (directiveNameToken.test(type)) {
34
+ inDirectiveName = false;
35
+ }
36
+ else if (directiveNamePrefixToken.test(type)) {
37
+ beforeDirectiveName = true;
38
+ }
39
+ return token;
40
+ },
41
+ };
42
+ // A directive name is ASCII per SPEC 4.1; upstream would accept Unicode names.
43
+ const rejectsAsDirectiveName = (code) => code !== null && code > 127 && !/[\p{P}\p{Z}\s]/u.test(String.fromCodePoint(code));
44
+ const guardState = (state) => function (code) {
45
+ // A directive name cannot span lines (SPEC §4.1), so the guard must disarm at the
46
+ // line ending. Leaving it armed made a non-ASCII character on any later line
47
+ // re-enter `nok` from a fresh tokenize call — and with
48
+ // `micromark-extension-gfm-table` present, whose container continuation re-runs the
49
+ // line, that became an infinite loop on untrusted input. Found by the pipeline
50
+ // fuzzer; see SECURITY.md T9.
51
+ if (markdownLineEnding(code)) {
52
+ inDirectiveName = false;
53
+ beforeDirectiveName = false;
54
+ }
55
+ // `beforeDirectiveName` arms for exactly one code and then disarms, because only the
56
+ // character immediately after `:` can begin a name. It used to stay armed until a name
57
+ // token was entered, which never happens when the attempt fails — so in `: \`&\` → \`x\``
58
+ // the guard was still live at the non-ASCII character, returned `nok` from the middle
59
+ // of the paragraph, and shifted the surrounding code spans by one backtick. Silent
60
+ // wrong output with no diagnostic; found by the CommonMark compatibility corpus.
61
+ if (beforeDirectiveName) {
62
+ beforeDirectiveName = false;
63
+ if (rejectsAsDirectiveName(code)) {
64
+ return nok(code);
65
+ }
66
+ }
67
+ if (inDirectiveName && rejectsAsDirectiveName(code)) {
68
+ return nok(code);
69
+ }
70
+ const next = state(code);
71
+ return next === undefined ? undefined : guardState(next);
72
+ };
73
+ return guardState(construct.tokenize.call(this, guardedEffects, ok, nok));
74
+ },
75
+ };
76
+ }
77
+ /** Creates the upstream directive tokenizer with CommonMark angle-bracket precedence. */
78
+ export function directiveTokenizer() {
79
+ const extension = directive();
80
+ const textColon = extension.text?.[58];
81
+ const flowColon = extension.flow?.[58];
82
+ if (textColon === undefined ||
83
+ Array.isArray(textColon) ||
84
+ flowColon === undefined ||
85
+ !Array.isArray(flowColon)) {
86
+ throw new TypeError('Unexpected micromark directive text tokenizer shape');
87
+ }
88
+ const guardedTextColon = guardDirectiveName(textColon, 'textDirective');
89
+ return {
90
+ ...extension,
91
+ flow: {
92
+ ...extension.flow,
93
+ 58: flowColon.map((construct, index) => guardDirectiveName(construct, index === 0 ? 'containerDirective' : 'leafDirective')),
94
+ },
95
+ text: {
96
+ ...extension.text,
97
+ 58: {
98
+ ...guardedTextColon,
99
+ previous(code) {
100
+ if (guardedTextColon.previous?.call(this, code) === false) {
101
+ return false;
102
+ }
103
+ const now = this.now();
104
+ let cursor = now.offset;
105
+ let prefix = '';
106
+ for (let index = this.events.length - 1; index >= 0; index -= 1) {
107
+ const event = this.events[index];
108
+ if (event?.[0] !== 'enter') {
109
+ continue;
110
+ }
111
+ const end = event[1].end?.offset ?? now.offset;
112
+ if (end < cursor) {
113
+ break;
114
+ }
115
+ if (end !== cursor) {
116
+ continue;
117
+ }
118
+ prefix =
119
+ this.sliceSerialize({ start: event[1].start, end: event[1].end ?? now }) + prefix;
120
+ cursor = event[1].start.offset;
121
+ if (event[1].start.line < now.line) {
122
+ break;
123
+ }
124
+ }
125
+ prefix = prefix.slice(prefix.lastIndexOf('\n') + 1);
126
+ return prefix.lastIndexOf('<') <= prefix.lastIndexOf('>');
127
+ },
128
+ },
129
+ },
130
+ };
131
+ }
132
+ function tokenSpan(token, positions) {
133
+ return {
134
+ start: positions.pointAt(token.start.offset),
135
+ end: positions.pointAt(token.end.offset),
136
+ };
137
+ }
138
+ function offsetSpan(start, end, positions) {
139
+ return {
140
+ start: positions.pointAt(start),
141
+ end: positions.pointAt(end),
142
+ };
143
+ }
144
+ function attributeSpan(token, positions) {
145
+ let end = token.end.offset;
146
+ while (end > token.start.offset) {
147
+ const code = positions.source.charCodeAt(end - 1);
148
+ if (code !== 9 && code !== 32) {
149
+ break;
150
+ }
151
+ end -= 1;
152
+ }
153
+ return offsetSpan(token.start.offset, end, positions);
154
+ }
155
+ function directiveNode(context) {
156
+ const node = context.stack[context.stack.length - 1];
157
+ if (node?.type !== 'containerDirective' &&
158
+ node?.type !== 'leafDirective' &&
159
+ node?.type !== 'textDirective') {
160
+ throw new TypeError('Expected an open directive node');
161
+ }
162
+ return node;
163
+ }
164
+ function attributeCapture(context) {
165
+ const capture = context.data.hmxDirectiveAttributes;
166
+ if (capture === undefined) {
167
+ throw new TypeError('Expected an open directive attribute list');
168
+ }
169
+ return capture;
170
+ }
171
+ function pendingAttribute(context) {
172
+ const pending = attributeCapture(context).current;
173
+ if (pending === undefined) {
174
+ throw new TypeError('Expected an open directive attribute');
175
+ }
176
+ return pending;
177
+ }
178
+ function containerCapture(context) {
179
+ const captures = context.data.hmxDirectiveContainers;
180
+ const capture = captures?.[captures.length - 1];
181
+ if (capture === undefined) {
182
+ throw new TypeError('Expected an open container directive');
183
+ }
184
+ return capture;
185
+ }
186
+ function forbiddenAttributeDiagnostic(name, span) {
187
+ return createDiagnostic({
188
+ code: 'HMX3005',
189
+ severity: 'error',
190
+ message: `Directive attribute "${name}" is forbidden because it can modify object prototypes.`,
191
+ span,
192
+ });
193
+ }
194
+ /**
195
+ * Creates HMX-owned mdast handlers for the directive tokenizer.
196
+ *
197
+ * Attribute order, duplicates, and exact source spans are retained for the HMX
198
+ * conversion boundary instead of being collapsed into an mdast attribute record.
199
+ */
200
+ export function directiveFromMarkdown(diagnostics, positions) {
201
+ const enter = {};
202
+ const exit = {};
203
+ const enterDirective = (type) => function (token) {
204
+ if (type === 'containerDirective') {
205
+ const captures = this.data.hmxDirectiveContainers ?? [];
206
+ captures.push({ fenceCount: 0 });
207
+ this.data.hmxDirectiveContainers = captures;
208
+ }
209
+ const node = {
210
+ type,
211
+ name: '',
212
+ attributes: [],
213
+ children: [],
214
+ };
215
+ this.enter(node, token);
216
+ };
217
+ const exitDirective = function (token) {
218
+ const node = directiveNode(this);
219
+ if (node.type === 'containerDirective') {
220
+ const captures = this.data.hmxDirectiveContainers;
221
+ const capture = captures?.pop();
222
+ if (capture === undefined) {
223
+ throw new TypeError('Expected container directive capture state');
224
+ }
225
+ if (capture.fenceCount < 2) {
226
+ const eof = positions.pointAt(positions.source.length);
227
+ diagnostics.push(createDiagnostic({
228
+ code: 'HMX1001',
229
+ severity: 'error',
230
+ message: `Container directive "${node.name}" is not closed.`,
231
+ span: capture.openingSequence ?? tokenSpan(token, positions),
232
+ expected: 'a closing fence with at least as many colons as the opening fence',
233
+ related: [
234
+ {
235
+ message: 'The document ended before a matching closing fence.',
236
+ span: { start: eof, end: eof },
237
+ },
238
+ ],
239
+ }));
240
+ }
241
+ if (captures?.length === 0) {
242
+ delete this.data.hmxDirectiveContainers;
243
+ }
244
+ }
245
+ this.exit(token);
246
+ };
247
+ const exitName = function (token) {
248
+ directiveNode(this).name = this.sliceSerialize(token);
249
+ };
250
+ const enterBlockLabel = function (token) {
251
+ const label = { type: 'paragraph', children: [] };
252
+ this.enter(label, token);
253
+ };
254
+ const exitBlockLabel = function (token) {
255
+ const label = this.stack[this.stack.length - 1];
256
+ if (label?.type !== 'paragraph') {
257
+ throw new TypeError('Expected an open block directive label');
258
+ }
259
+ this.exit(token);
260
+ const node = directiveNode(this);
261
+ const attachedLabel = node.children.pop();
262
+ if (attachedLabel !== label) {
263
+ throw new TypeError('Container directive label was attached out of order');
264
+ }
265
+ node.label = label.children;
266
+ };
267
+ const enterAttributes = function () {
268
+ if (this.data.hmxDirectiveAttributes !== undefined) {
269
+ throw new TypeError('Directive attribute lists cannot overlap');
270
+ }
271
+ this.data.hmxDirectiveAttributes = { attributes: [] };
272
+ this.buffer();
273
+ };
274
+ const exitAttributes = function () {
275
+ const capture = attributeCapture(this);
276
+ if (capture.current !== undefined) {
277
+ throw new TypeError('Directive attribute list ended with an open attribute');
278
+ }
279
+ this.resume();
280
+ directiveNode(this).attributes = capture.attributes;
281
+ delete this.data.hmxDirectiveAttributes;
282
+ };
283
+ const enterAttribute = function () {
284
+ const capture = attributeCapture(this);
285
+ if (capture.current !== undefined) {
286
+ throw new TypeError('Directive attributes cannot overlap');
287
+ }
288
+ capture.current = { hasInitializer: false, quoted: false };
289
+ };
290
+ const exitAttribute = function (token) {
291
+ const capture = attributeCapture(this);
292
+ const pending = pendingAttribute(this);
293
+ if (pending.name === undefined || pending.nameSpan === undefined) {
294
+ throw new TypeError('Directive attribute has no name');
295
+ }
296
+ const position = attributeSpan(token, positions);
297
+ const value = pending.value ?? (pending.hasInitializer ? '' : null);
298
+ if (isForbiddenAttributeName(pending.name)) {
299
+ diagnostics.push(forbiddenAttributeDiagnostic(pending.name, pending.nameSpan));
300
+ }
301
+ else {
302
+ capture.attributes.push({
303
+ name: pending.name,
304
+ value,
305
+ position,
306
+ nameSpan: pending.nameSpan,
307
+ ...(pending.valueSpan === undefined ? {} : { valueSpan: pending.valueSpan }),
308
+ });
309
+ }
310
+ delete capture.current;
311
+ };
312
+ const exitAttributeName = function (token) {
313
+ const pending = pendingAttribute(this);
314
+ pending.name = this.sliceSerialize(token);
315
+ pending.nameSpan = tokenSpan(token, positions);
316
+ };
317
+ const exitInitializer = function () {
318
+ pendingAttribute(this).hasInitializer = true;
319
+ };
320
+ const exitShorthand = (name) => function (token) {
321
+ const pending = pendingAttribute(this);
322
+ const serialized = this.sliceSerialize(token);
323
+ pending.name = name;
324
+ pending.value = decodeString(serialized.slice(1));
325
+ pending.nameSpan = tokenSpan(token, positions);
326
+ pending.valueSpan = offsetSpan(token.start.offset + 1, token.end.offset, positions);
327
+ };
328
+ const enterValueLiteral = function () {
329
+ pendingAttribute(this).quoted = true;
330
+ };
331
+ const exitValueLiteral = function (token) {
332
+ const pending = pendingAttribute(this);
333
+ if (pending.value === undefined) {
334
+ pending.value = '';
335
+ pending.valueSpan = offsetSpan(token.start.offset + 1, token.end.offset - 1, positions);
336
+ }
337
+ };
338
+ const exitValue = function (token) {
339
+ const pending = pendingAttribute(this);
340
+ const serialized = this.sliceSerialize(token);
341
+ if (!pending.quoted && serialized.startsWith('{') && serialized.endsWith('}')) {
342
+ pending.value = serialized.slice(1, -1).trim();
343
+ pending.valueSpan = offsetSpan(token.start.offset + 1, token.end.offset - 1, positions);
344
+ }
345
+ else {
346
+ pending.value = decodeString(serialized);
347
+ pending.valueSpan = tokenSpan(token, positions);
348
+ }
349
+ };
350
+ const enterContainerFence = function () {
351
+ containerCapture(this).fenceCount += 1;
352
+ };
353
+ const exitContainerSequence = function (token) {
354
+ const capture = containerCapture(this);
355
+ if (capture.openingSequence === undefined) {
356
+ capture.openingSequence = tokenSpan(token, positions);
357
+ }
358
+ };
359
+ const configurations = [
360
+ { token: 'directiveContainer', type: 'containerDirective' },
361
+ { token: 'directiveLeaf', type: 'leafDirective' },
362
+ { token: 'directiveText', type: 'textDirective' },
363
+ ];
364
+ for (const configuration of configurations) {
365
+ const prefix = configuration.token;
366
+ enter[prefix] = enterDirective(configuration.type);
367
+ exit[prefix] = exitDirective;
368
+ exit[`${prefix}Name`] = exitName;
369
+ enter[`${prefix}Attributes`] = enterAttributes;
370
+ exit[`${prefix}Attributes`] = exitAttributes;
371
+ enter[`${prefix}Attribute`] = enterAttribute;
372
+ exit[`${prefix}Attribute`] = exitAttribute;
373
+ exit[`${prefix}AttributeId`] = exitShorthand('id');
374
+ exit[`${prefix}AttributeClass`] = exitShorthand('class');
375
+ exit[`${prefix}AttributeName`] = exitAttributeName;
376
+ exit[`${prefix}AttributeInitializerMarker`] = exitInitializer;
377
+ enter[`${prefix}AttributeValueLiteral`] = enterValueLiteral;
378
+ exit[`${prefix}AttributeValueLiteral`] = exitValueLiteral;
379
+ exit[`${prefix}AttributeValue`] = exitValue;
380
+ }
381
+ enter.directiveContainerLabel = enterBlockLabel;
382
+ exit.directiveContainerLabel = exitBlockLabel;
383
+ enter.directiveLeafLabel = enterBlockLabel;
384
+ exit.directiveLeafLabel = exitBlockLabel;
385
+ enter.directiveContainerFence = enterContainerFence;
386
+ exit.directiveContainerSequence = exitContainerSequence;
387
+ return { canContainEols: ['textDirective'], enter, exit };
388
+ }
389
+ //# sourceMappingURL=directives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directives.js","sourceRoot":"","sources":["../src/directives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Root } from '@hymarkx/ast';
2
+ /** Converts an mdast-shaped value into a separately owned HMX tree without recursion. */
3
+ export declare function fromMdast(value: unknown, source: string): Root;
4
+ //# sourceMappingURL=from-mdast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-mdast.d.ts","sourceRoot":"","sources":["../src/from-mdast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAQV,IAAI,EAGL,MAAM,cAAc,CAAA;AAikBrB,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgE9D"}