@openuji/speculator 0.7.4 → 0.7.5

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 (67) hide show
  1. package/README.md +1 -1
  2. package/dist/parse/html/SpecStatementHtmlParser.js +3 -0
  3. package/dist/parse/html/SpecStatementHtmlParser.js.map +1 -1
  4. package/dist/parse/html/VocabHtmlParser.d.ts +12 -0
  5. package/dist/parse/html/VocabHtmlParser.d.ts.map +1 -0
  6. package/dist/parse/html/VocabHtmlParser.js +1156 -0
  7. package/dist/parse/html/VocabHtmlParser.js.map +1 -0
  8. package/dist/parse/html/parser.d.ts.map +1 -1
  9. package/dist/parse/html/parser.js +21 -32
  10. package/dist/parse/html/parser.js.map +1 -1
  11. package/dist/parse/markdown/HeadingsMarkdownParser.d.ts.map +1 -1
  12. package/dist/parse/markdown/HeadingsMarkdownParser.js +5 -31
  13. package/dist/parse/markdown/HeadingsMarkdownParser.js.map +1 -1
  14. package/dist/parse/markdown/MdxJsxMarkdownParser.d.ts +8 -0
  15. package/dist/parse/markdown/MdxJsxMarkdownParser.d.ts.map +1 -0
  16. package/dist/parse/markdown/MdxJsxMarkdownParser.js +61 -0
  17. package/dist/parse/markdown/MdxJsxMarkdownParser.js.map +1 -0
  18. package/dist/parse/markdown/MdxMarkdownParser.d.ts +13 -0
  19. package/dist/parse/markdown/MdxMarkdownParser.d.ts.map +1 -0
  20. package/dist/parse/markdown/MdxMarkdownParser.js +310 -0
  21. package/dist/parse/markdown/MdxMarkdownParser.js.map +1 -0
  22. package/dist/parse/markdown/parser.d.ts.map +1 -1
  23. package/dist/parse/markdown/parser.js +57 -15
  24. package/dist/parse/markdown/parser.js.map +1 -1
  25. package/dist/parse/markdown/plugins.d.ts +26 -0
  26. package/dist/parse/markdown/plugins.d.ts.map +1 -0
  27. package/dist/parse/markdown/plugins.js +83 -0
  28. package/dist/parse/markdown/plugins.js.map +1 -0
  29. package/dist/parse/markdown/remark-mdx-jsx-only.d.ts +10 -0
  30. package/dist/parse/markdown/remark-mdx-jsx-only.d.ts.map +1 -0
  31. package/dist/parse/markdown/remark-mdx-jsx-only.js +26 -0
  32. package/dist/parse/markdown/remark-mdx-jsx-only.js.map +1 -0
  33. package/dist/parse/parsers.d.ts +2 -2
  34. package/dist/parse/parsers.d.ts.map +1 -1
  35. package/dist/parse/parsers.js +6 -6
  36. package/dist/parse/parsers.js.map +1 -1
  37. package/dist/parse/pipeline.d.ts.map +1 -1
  38. package/dist/parse/pipeline.js +8 -2
  39. package/dist/parse/pipeline.js.map +1 -1
  40. package/dist/parse/utils/hast-utils.d.ts.map +1 -1
  41. package/dist/parse/utils/hast-utils.js +18 -13
  42. package/dist/parse/utils/hast-utils.js.map +1 -1
  43. package/dist/parse/utils/html-element-utils.d.ts +9 -0
  44. package/dist/parse/utils/html-element-utils.d.ts.map +1 -0
  45. package/dist/parse/utils/html-element-utils.js +88 -0
  46. package/dist/parse/utils/html-element-utils.js.map +1 -0
  47. package/dist/parse/utils/markdown-utils.d.ts +16 -10
  48. package/dist/parse/utils/markdown-utils.d.ts.map +1 -1
  49. package/dist/parse/utils/markdown-utils.js +39 -75
  50. package/dist/parse/utils/markdown-utils.js.map +1 -1
  51. package/dist/postprocess/plugins/statement-distribute.d.ts.map +1 -1
  52. package/dist/postprocess/plugins/statement-distribute.js +46 -8
  53. package/dist/postprocess/plugins/statement-distribute.js.map +1 -1
  54. package/dist/postprocess/walk-ast.d.ts.map +1 -1
  55. package/dist/postprocess/walk-ast.js +1 -0
  56. package/dist/postprocess/walk-ast.js.map +1 -1
  57. package/dist/preprocess/include/resolver.d.ts.map +1 -1
  58. package/dist/preprocess/include/resolver.js +53 -3
  59. package/dist/preprocess/include/resolver.js.map +1 -1
  60. package/dist/preprocess/types.d.ts +8 -0
  61. package/dist/preprocess/types.d.ts.map +1 -1
  62. package/dist/types/ast.generated.d.ts +34 -3
  63. package/dist/types/ast.generated.d.ts.map +1 -1
  64. package/dist/types/ast.generated.js +4 -4
  65. package/dist/types/ast.generated.js.map +1 -1
  66. package/package.json +10 -1
  67. package/schema/spec-ast.schema.json +108 -1
@@ -0,0 +1,310 @@
1
+ /**
2
+ * MDX Markdown Parser
3
+ *
4
+ * Handles mdast MDX JSX nodes and delegates by tag name to HTML handlers.
5
+ * This lets tags like <dfn>, <a>, <aside>, <spec-statement>, etc. share
6
+ * the same parsing logic across HTML and Markdown inputs.
7
+ */
8
+ import { isHtmlBlockTag } from '#src/parse/utils/markdown-utils';
9
+ import { createBlockHtmlElement, createInlineHtmlElement } from '#src/parse/utils/html-element-utils';
10
+ function isMdxJsxNode(node) {
11
+ return node?.type === 'mdxJsxFlowElement' || node?.type === 'mdxJsxTextElement';
12
+ }
13
+ function isMdxTextExpression(node) {
14
+ return node?.type === 'mdxTextExpression';
15
+ }
16
+ function toCamelCase(name) {
17
+ return name.replace(/-([a-z0-9])/g, (_, char) => char.toUpperCase());
18
+ }
19
+ function toKebabCase(name) {
20
+ return name.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
21
+ }
22
+ function normalizeAttrValue(attrValue) {
23
+ if (attrValue === null || attrValue === undefined)
24
+ return true;
25
+ if (typeof attrValue === 'string' || typeof attrValue === 'number' || typeof attrValue === 'boolean') {
26
+ return attrValue;
27
+ }
28
+ return undefined;
29
+ }
30
+ function setAttrAliases(properties, name, value) {
31
+ properties[name] = value;
32
+ const camelName = toCamelCase(name);
33
+ if (camelName !== name)
34
+ properties[camelName] = value;
35
+ const kebabName = toKebabCase(name);
36
+ if (kebabName !== name)
37
+ properties[kebabName] = value;
38
+ if (name === 'class')
39
+ properties.className = value;
40
+ if (name === 'className')
41
+ properties.class = value;
42
+ }
43
+ function toMdxProperties(node) {
44
+ const properties = {};
45
+ for (const attr of node.attributes ?? []) {
46
+ if (!attr || attr.type === 'mdxJsxExpressionAttribute')
47
+ continue;
48
+ if (typeof attr.name !== 'string' || attr.name.length === 0)
49
+ continue;
50
+ const attrValue = normalizeAttrValue(attr.value);
51
+ if (attrValue === undefined)
52
+ continue;
53
+ setAttrAliases(properties, attr.name, attrValue);
54
+ }
55
+ return properties;
56
+ }
57
+ function toMdxVirtualElement(node, mode) {
58
+ const mdxChildren = node.children ?? [];
59
+ const childrenForMode = mode === 'block' && node.type === 'mdxJsxTextElement'
60
+ ? [{
61
+ type: 'paragraph',
62
+ children: mdxChildren,
63
+ position: node.position,
64
+ }]
65
+ : mdxChildren;
66
+ return {
67
+ type: 'element',
68
+ tagName: node.name ?? '',
69
+ properties: toMdxProperties(node),
70
+ children: childrenForMode,
71
+ position: node.position,
72
+ __mdxSource: node,
73
+ };
74
+ }
75
+ function isMdxVirtualElement(element) {
76
+ return '__mdxSource' in element;
77
+ }
78
+ function attrValueToString(value, attrName) {
79
+ if (typeof value === 'string')
80
+ return value;
81
+ if (typeof value === 'number')
82
+ return String(value);
83
+ if (Array.isArray(value))
84
+ return value.map((part) => String(part)).join(' ');
85
+ if (typeof value === 'boolean' && value)
86
+ return attrName;
87
+ return undefined;
88
+ }
89
+ function getMdxAttr(element, name) {
90
+ const properties = element.properties;
91
+ if (!properties)
92
+ return undefined;
93
+ const candidates = [name, toCamelCase(name), toKebabCase(name)];
94
+ for (const candidate of candidates) {
95
+ const normalized = attrValueToString(properties[candidate], name);
96
+ if (normalized !== undefined)
97
+ return normalized;
98
+ }
99
+ return undefined;
100
+ }
101
+ function collectMdxText(node) {
102
+ if (Array.isArray(node)) {
103
+ return node.map(collectMdxText).join('');
104
+ }
105
+ if (!node || typeof node !== 'object')
106
+ return '';
107
+ const candidate = node;
108
+ if ((candidate.type === 'text' || candidate.type === 'inlineCode' || candidate.type === 'code')
109
+ && typeof candidate.value === 'string') {
110
+ return candidate.value;
111
+ }
112
+ if (Array.isArray(candidate.children)) {
113
+ return candidate.children.map(collectMdxText).join('');
114
+ }
115
+ return '';
116
+ }
117
+ function createMdxContext(ctx) {
118
+ return {
119
+ ...ctx,
120
+ getAttr: (element, name) => {
121
+ if (isMdxVirtualElement(element)) {
122
+ const value = getMdxAttr(element, name);
123
+ if (value !== undefined)
124
+ return value;
125
+ }
126
+ return ctx.getAttr(element, name);
127
+ },
128
+ getTextContent: (element) => {
129
+ if (isMdxVirtualElement(element)) {
130
+ return collectMdxText(element.children);
131
+ }
132
+ return ctx.getTextContent(element);
133
+ },
134
+ };
135
+ }
136
+ function inlineResultToParagraph(result, sourcePos) {
137
+ if (result === null)
138
+ return null;
139
+ const inlines = Array.isArray(result) ? result : [result];
140
+ if (inlines.length === 0)
141
+ return null;
142
+ const paragraph = {
143
+ type: 'paragraph',
144
+ children: inlines,
145
+ };
146
+ if (sourcePos)
147
+ paragraph.sourcePos = sourcePos;
148
+ return paragraph;
149
+ }
150
+ function appendBlockResult(target, result) {
151
+ if (result === null)
152
+ return;
153
+ if (Array.isArray(result)) {
154
+ target.push(...result);
155
+ return;
156
+ }
157
+ target.push(result);
158
+ }
159
+ function isBlockLikeMdxTag(node, ctx) {
160
+ const tagName = (node.name ?? '').toLowerCase();
161
+ if (!tagName)
162
+ return false;
163
+ if (ctx.registry.getHtmlBlockHandler(tagName)?.handleBlock)
164
+ return true;
165
+ if (isHtmlBlockTag(tagName))
166
+ return true;
167
+ if (tagName.includes('-'))
168
+ return true;
169
+ return false;
170
+ }
171
+ function fallbackBlockFromChildren(node, ctx) {
172
+ if (node.name) {
173
+ const virtualElement = toMdxVirtualElement(node, 'block');
174
+ let children = ctx.transformBlockChildren(node.children ?? []);
175
+ if (children.length === 0) {
176
+ const inlines = ctx.transformInlineChildren(node.children ?? []);
177
+ if (inlines.length > 0) {
178
+ const paragraph = {
179
+ type: 'paragraph',
180
+ children: inlines,
181
+ };
182
+ const sourcePos = ctx.createSourcePos(node);
183
+ if (sourcePos)
184
+ paragraph.sourcePos = sourcePos;
185
+ children = [paragraph];
186
+ }
187
+ }
188
+ return createBlockHtmlElement(virtualElement, ctx, children);
189
+ }
190
+ const blocks = ctx.transformBlockChildren(node.children ?? []);
191
+ if (blocks.length > 0)
192
+ return blocks;
193
+ const inlines = ctx.transformInlineChildren(node.children ?? []);
194
+ if (inlines.length === 0)
195
+ return null;
196
+ const paragraph = {
197
+ type: 'paragraph',
198
+ children: inlines,
199
+ };
200
+ const sourcePos = ctx.createSourcePos(node);
201
+ if (sourcePos)
202
+ paragraph.sourcePos = sourcePos;
203
+ return paragraph;
204
+ }
205
+ function fallbackInlineFromChildren(node, ctx) {
206
+ if (node.name) {
207
+ const virtualElement = toMdxVirtualElement(node, 'inline');
208
+ return createInlineHtmlElement(virtualElement, ctx, ctx.transformInlineChildren(node.children ?? []));
209
+ }
210
+ const inlines = ctx.transformInlineChildren(node.children ?? []);
211
+ if (inlines.length === 0)
212
+ return null;
213
+ return inlines.length === 1 ? inlines[0] : inlines;
214
+ }
215
+ function handleMdxBlock(node, ctx) {
216
+ const tagName = (node.name ?? '').toLowerCase();
217
+ if (!tagName)
218
+ return fallbackBlockFromChildren(node, ctx);
219
+ const wrapperCtx = createMdxContext(ctx);
220
+ const blockHandler = ctx.registry.getHtmlBlockHandler(tagName);
221
+ if (blockHandler?.handleBlock) {
222
+ return blockHandler.handleBlock(toMdxVirtualElement(node, 'block'), wrapperCtx);
223
+ }
224
+ const inlineHandler = ctx.registry.getHtmlInlineHandler(tagName);
225
+ if (inlineHandler?.handleInline) {
226
+ const inlineResult = inlineHandler.handleInline(toMdxVirtualElement(node, 'inline'), wrapperCtx);
227
+ return inlineResultToParagraph(inlineResult, ctx.createSourcePos(node));
228
+ }
229
+ return fallbackBlockFromChildren(node, ctx);
230
+ }
231
+ function handleMdxInline(node, ctx) {
232
+ const tagName = (node.name ?? '').toLowerCase();
233
+ if (!tagName)
234
+ return fallbackInlineFromChildren(node, ctx);
235
+ const wrapperCtx = createMdxContext(ctx);
236
+ const inlineHandler = ctx.registry.getHtmlInlineHandler(tagName);
237
+ if (inlineHandler?.handleInline) {
238
+ return inlineHandler.handleInline(toMdxVirtualElement(node, 'inline'), wrapperCtx);
239
+ }
240
+ return fallbackInlineFromChildren(node, ctx);
241
+ }
242
+ function handleMdxExpressionInline(node, ctx) {
243
+ const rawValue = typeof node.value === 'string' ? node.value : '';
244
+ if (!rawValue)
245
+ return null;
246
+ // Recreate original source text so shorthand parser can still detect patterns
247
+ // like {{Interface}} that MDX tokenizes as mdxTextExpression.
248
+ const syntheticText = {
249
+ type: 'text',
250
+ value: `{${rawValue}}`,
251
+ position: node.position,
252
+ };
253
+ const inlines = ctx.transformInlineChildren([syntheticText]);
254
+ if (inlines.length === 0)
255
+ return null;
256
+ return inlines.length === 1 ? inlines[0] : inlines;
257
+ }
258
+ /**
259
+ * Markdown parser module for MDX nodes.
260
+ */
261
+ export const MdxMarkdownParser = {
262
+ name: 'MdxMarkdownParser',
263
+ handles: ['mdxJsxFlowElement', 'mdxJsxTextElement', 'mdxTextExpression', 'paragraph'],
264
+ order: 5,
265
+ handleBlock(node, ctx) {
266
+ // When a single MDX tag sits inside a paragraph, allow block handlers
267
+ // (e.g. <spec-statement>) to claim it before Paragraph parser runs.
268
+ if (node.type === 'paragraph') {
269
+ const paragraph = node;
270
+ if (paragraph.children.length === 1) {
271
+ const onlyChild = paragraph.children[0];
272
+ if (!isMdxJsxNode(onlyChild))
273
+ return null;
274
+ const tagName = (onlyChild.name ?? '').toLowerCase();
275
+ const blockHandler = tagName ? ctx.registry.getHtmlBlockHandler(tagName) : undefined;
276
+ if (!blockHandler?.handleBlock && !isHtmlBlockTag(tagName) && !tagName.includes('-'))
277
+ return null;
278
+ return handleMdxBlock(onlyChild, ctx);
279
+ }
280
+ const blocks = [];
281
+ let sawBlockLikeTag = false;
282
+ for (const child of paragraph.children) {
283
+ if (isMdxJsxNode(child) && isBlockLikeMdxTag(child, ctx)) {
284
+ sawBlockLikeTag = true;
285
+ appendBlockResult(blocks, handleMdxBlock(child, ctx));
286
+ continue;
287
+ }
288
+ if (child.type === 'text' && child.value.trim().length === 0) {
289
+ continue;
290
+ }
291
+ // Mixed content paragraph (normal inline text + MDX tags): let
292
+ // ParagraphsMarkdownParser handle this as an inline paragraph.
293
+ return null;
294
+ }
295
+ return sawBlockLikeTag ? blocks : null;
296
+ }
297
+ if (!isMdxJsxNode(node))
298
+ return null;
299
+ return handleMdxBlock(node, ctx);
300
+ },
301
+ handleInline(node, ctx) {
302
+ if (isMdxTextExpression(node)) {
303
+ return handleMdxExpressionInline(node, ctx);
304
+ }
305
+ if (!isMdxJsxNode(node))
306
+ return null;
307
+ return handleMdxInline(node, ctx);
308
+ },
309
+ };
310
+ //# sourceMappingURL=MdxMarkdownParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MdxMarkdownParser.js","sourceRoot":"","sources":["../../../src/parse/markdown/MdxMarkdownParser.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACR,OAAO,EACP,KAAK,EAGR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,oBAAoB,EAIvB,MAAM,qBAAqB,CAAC;AAqC7B;;GAEG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACjD,QAAQ,CAAC,MAAM,EAAG,UAAU,CAAU;IAEtC,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,QAAQ,GAAE,oBAAsC;IAI5D;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;IAuB5C;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAgBlC"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACR,OAAO,EACP,KAAK,EAGR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,oBAAoB,EAIvB,MAAM,qBAAqB,CAAC;AAqD7B;;GAEG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACjD,QAAQ,CAAC,MAAM,EAAG,UAAU,CAAU;IAEtC,OAAO,CAAC,SAAS,CAIiB;IAElC,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,QAAQ,GAAE,oBAAsC;IAI5D;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE;IA8C5C;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAgBlC"}
@@ -7,8 +7,9 @@
7
7
  import { unified } from 'unified';
8
8
  import remarkParse from 'remark-parse';
9
9
  import remarkGfm from 'remark-gfm';
10
+ import { remarkMdxAgnostic, remarkHeadingAttrBlocks } from './plugins.js';
10
11
  import { defaultRegistry, } from '#src/parse/registry';
11
- import { escapeShorthandPipesInTables, preserveCustomHtmlBlocks } from '../utils/markdown-utils.js';
12
+ import { escapeShorthandPipesInTables, normalizeMdxTags } from '../utils/markdown-utils.js';
12
13
  /**
13
14
  * Create source position from mdast node position
14
15
  */
@@ -38,12 +39,31 @@ function createSourcePos(unit, node) {
38
39
  }
39
40
  return result;
40
41
  }
42
+ function adjustErrorLineNumbers(error, startLine) {
43
+ if (!(error instanceof Error) || startLine <= 1)
44
+ return;
45
+ const startOff = startLine - 1;
46
+ // Match (L:C), (L:C-L:C), or even just L:C if MDX format changes
47
+ const posRegex = /(\(?|)(\d+):(\d+)(?:-(\d+):(\d+))?(\)?|)/g;
48
+ error.message = error.message.replace(posRegex, (_match, openParen = '', l1, c1, l2, c2, closeParen = '') => {
49
+ const nl1 = parseInt(l1) + startOff;
50
+ if (l2 && c2) {
51
+ const nl2 = parseInt(l2) + startOff;
52
+ return `${openParen}${nl1}:${c1}-${nl2}:${c2}${closeParen}`;
53
+ }
54
+ return `${openParen}${nl1}:${c1}${closeParen}`;
55
+ });
56
+ }
41
57
  /**
42
58
  * Markdown unit parser implementation using handler registry
43
59
  */
44
60
  export class MarkdownUnitParser {
45
61
  format = 'markdown';
46
- processor = unified().use(remarkParse).use(remarkGfm);
62
+ processor = unified()
63
+ .use(remarkParse)
64
+ .use(remarkGfm)
65
+ .use(remarkMdxAgnostic)
66
+ .use(remarkHeadingAttrBlocks);
47
67
  registry;
48
68
  constructor(registry = defaultRegistry) {
49
69
  this.registry = registry;
@@ -52,17 +72,41 @@ export class MarkdownUnitParser {
52
72
  * Parse markdown unit to AST blocks
53
73
  */
54
74
  parse(unit) {
55
- // Escape shorthand pipes in table lines before GFM splits them into cells
56
- //let content = escapeShorthandPipesInTables(unit.content);
57
75
  let content = unit.content;
58
- // Prevent remark from splitting custom HTML blocks at blank lines
76
+ // Refined pre-processing for MDX:
77
+ // 1. Escape shorthand pipes in tables (GFM compat)
59
78
  content = escapeShorthandPipesInTables(content);
60
- content = preserveCustomHtmlBlocks(content);
61
- const tree = this.processor.parse(content);
79
+ // Parse to mdast tree
80
+ let tree;
81
+ try {
82
+ tree = this.processor.parse(content);
83
+ }
84
+ catch (initialError) {
85
+ // Retry once after normalizing MDX block-like tags. This rescues cases
86
+ // where custom tags begin inline and then cross block boundaries.
87
+ const normalizedContent = normalizeMdxTags(content);
88
+ if (normalizedContent !== content) {
89
+ try {
90
+ content = normalizedContent;
91
+ tree = this.processor.parse(content);
92
+ }
93
+ catch (normalizedError) {
94
+ adjustErrorLineNumbers(normalizedError, unit.startLine);
95
+ throw normalizedError;
96
+ }
97
+ }
98
+ else {
99
+ adjustErrorLineNumbers(initialError, unit.startLine);
100
+ throw initialError;
101
+ }
102
+ }
103
+ // Run transformers (like remarkHeadingAttrBlocks)
104
+ // We use runSync because our plugins are currently synchronous
105
+ const transformedTree = this.processor.runSync(tree);
62
106
  // Create context for handlers
63
107
  const ctx = this.createContext(unit);
64
108
  const blocks = [];
65
- for (const child of tree.children) {
109
+ for (const child of transformedTree.children) {
66
110
  const blocksResult = this.transformBlock(child, ctx);
67
111
  blocks.push(...blocksResult);
68
112
  }
@@ -72,17 +116,15 @@ export class MarkdownUnitParser {
72
116
  * Create parse context for handlers
73
117
  */
74
118
  createContext(unit) {
75
- // eslint-disable-next-line @typescript-eslint/no-this-alias
76
- const self = this;
77
119
  return {
78
120
  unit,
79
121
  createSourcePos: (node) => createSourcePos(unit, node),
80
- transformInlineChildren: (children) => self.transformInlineChildren(children, unit),
122
+ transformInlineChildren: (children) => this.transformInlineChildren(children, unit),
81
123
  transformBlockChildren: (children) => {
82
124
  const results = [];
83
- const ctx = self.createContext(unit);
125
+ const ctx = this.createContext(unit);
84
126
  for (const child of children) {
85
- const blocksResult = self.transformBlock(child, ctx);
127
+ const blocksResult = this.transformBlock(child, ctx);
86
128
  results.push(...blocksResult);
87
129
  }
88
130
  return results;
@@ -95,7 +137,7 @@ export class MarkdownUnitParser {
95
137
  text += child.value;
96
138
  }
97
139
  else if (child.type === 'element') {
98
- text += self.createContext(unit).getTextContent(child);
140
+ text += this.createContext(unit).getTextContent(child);
99
141
  }
100
142
  }
101
143
  return text;
@@ -108,7 +150,7 @@ export class MarkdownUnitParser {
108
150
  return val.join(' ');
109
151
  return undefined;
110
152
  },
111
- registry: self.registry,
153
+ registry: this.registry,
112
154
  };
113
155
  }
114
156
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/parse/markdown/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/parse/markdown/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Markdown Plugins
3
+ *
4
+ * Custom remark plugins for MDX and attribute blocks.
5
+ */
6
+ import type { Processor } from 'unified';
7
+ import type { Root } from 'mdast';
8
+ type HeadingAttributeValue = string | boolean;
9
+ type HeadingAttributeMap = Record<string, HeadingAttributeValue>;
10
+ /**
11
+ * Enables MDX (JSX/expressions) without full JS validation.
12
+ * This turns <spec-statement> into MDast MDX nodes instead of raw HTML nodes.
13
+ */
14
+ export declare function remarkMdxAgnostic(this: Processor): void;
15
+ /**
16
+ * Parses attribute text into a property object.
17
+ * Handles #id and key="value" or key='value' or key=value.
18
+ */
19
+ export declare function parseAttrText(text: string): HeadingAttributeMap;
20
+ /**
21
+ * Plugin to process heading attribute blocks { #id data-cop-concept="..." }
22
+ * when they appear as an mdxTextExpression at the end of a heading.
23
+ */
24
+ export declare function remarkHeadingAttrBlocks(): (tree: Root) => void;
25
+ export {};
26
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/plugins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAIlC,KAAK,qBAAqB,GAAG,MAAM,GAAG,OAAO,CAAC;AAC9C,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AASjE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,QAmBhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,uBAsBzC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,KAC7B,MAAM,IAAI,UA2BnB"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Markdown Plugins
3
+ *
4
+ * Custom remark plugins for MDX and attribute blocks.
5
+ */
6
+ import { mdx } from "micromark-extension-mdx";
7
+ import { mdxFromMarkdown, mdxToMarkdown } from "mdast-util-mdx";
8
+ import { visit } from "unist-util-visit";
9
+ /**
10
+ * Enables MDX (JSX/expressions) without full JS validation.
11
+ * This turns <spec-statement> into MDast MDX nodes instead of raw HTML nodes.
12
+ */
13
+ export function remarkMdxAgnostic() {
14
+ const data = this.data();
15
+ const micromarkExtensions = data.micromarkExtensions ?? [];
16
+ const fromMarkdownExtensions = data.fromMarkdownExtensions ?? [];
17
+ const toMarkdownExtensions = data.toMarkdownExtensions ?? [];
18
+ micromarkExtensions.push(mdx());
19
+ fromMarkdownExtensions.push(mdxFromMarkdown());
20
+ // optional: only if you also use remark-stringify later
21
+ toMarkdownExtensions.push(mdxToMarkdown());
22
+ data.micromarkExtensions = micromarkExtensions;
23
+ data.fromMarkdownExtensions = fromMarkdownExtensions;
24
+ data.toMarkdownExtensions = toMarkdownExtensions;
25
+ }
26
+ /**
27
+ * Parses attribute text into a property object.
28
+ * Handles #id and key="value" or key='value' or key=value.
29
+ */
30
+ export function parseAttrText(text) {
31
+ // text is the inside of `{...}` (no braces), e.g. '#node data-cop-concept="node"'
32
+ const parts = text.match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) ?? [];
33
+ const props = {};
34
+ for (const p of parts) {
35
+ if (p.startsWith("#")) {
36
+ props.id = p.slice(1);
37
+ continue;
38
+ }
39
+ if (p.startsWith(".")) {
40
+ props[p.slice(1)] = true;
41
+ continue;
42
+ }
43
+ if (p.includes("=")) {
44
+ const [k, ...rest] = p.split("=");
45
+ let v = rest.join("=");
46
+ v = v.replace(/^['"]|['"]$/g, "");
47
+ props[k] = v;
48
+ }
49
+ }
50
+ return props;
51
+ }
52
+ /**
53
+ * Plugin to process heading attribute blocks { #id data-cop-concept="..." }
54
+ * when they appear as an mdxTextExpression at the end of a heading.
55
+ */
56
+ export function remarkHeadingAttrBlocks() {
57
+ return (tree) => {
58
+ if (!tree)
59
+ return;
60
+ visit(tree, "heading", (node) => {
61
+ const heading = node;
62
+ const last = heading.children?.[heading.children.length - 1];
63
+ if (!last)
64
+ return;
65
+ if (last.type !== "mdxTextExpression" && last.type !== "text")
66
+ return;
67
+ const raw = String(last.value ?? "").trim();
68
+ if (!raw.startsWith("{") && !raw.startsWith("#") && !raw.startsWith(".") && !raw.includes("="))
69
+ return;
70
+ const props = parseAttrText(raw);
71
+ // Remove the attribute expression from children
72
+ heading.children?.pop();
73
+ // Trim trailing whitespace from the new last child if it's text
74
+ const newLast = heading.children?.[heading.children.length - 1];
75
+ if (newLast && newLast.type === 'text' && typeof newLast.value === 'string') {
76
+ newLast.value = newLast.value.replace(/\s+$/, '');
77
+ }
78
+ heading.data ??= {};
79
+ heading.data.hProperties = { ...(heading.data.hProperties || {}), ...props };
80
+ });
81
+ };
82
+ }
83
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/parse/markdown/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A custom remark plugin to ONLY enable MDX JSX (HTML-like tags)
3
+ * without enabling JS expressions, ESM imports/exports, etc.
4
+ *
5
+ * This enables us to natively parse complex HTML trees in Markdown
6
+ * using the remark ecosystem, without breaking on normal `{ }`
7
+ * characters that appear in specs (such as IDL blocks).
8
+ */
9
+ export default function remarkMdxJsxOnly(this: any): void;
10
+ //# sourceMappingURL=remark-mdx-jsx-only.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark-mdx-jsx-only.d.ts","sourceRoot":"","sources":["../../../src/parse/markdown/remark-mdx-jsx-only.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,IAAI,EAAE,GAAG,QAcjD"}
@@ -0,0 +1,26 @@
1
+ import { mdxJsx } from 'micromark-extension-mdx-jsx';
2
+ import { mdxJsxFromMarkdown, mdxJsxToMarkdown } from 'mdast-util-mdx-jsx';
3
+ import * as acorn from 'acorn';
4
+ /**
5
+ * A custom remark plugin to ONLY enable MDX JSX (HTML-like tags)
6
+ * without enabling JS expressions, ESM imports/exports, etc.
7
+ *
8
+ * This enables us to natively parse complex HTML trees in Markdown
9
+ * using the remark ecosystem, without breaking on normal `{ }`
10
+ * characters that appear in specs (such as IDL blocks).
11
+ */
12
+ export default function remarkMdxJsxOnly() {
13
+ const data = this.data();
14
+ function add(field, value) {
15
+ if (data[field]) {
16
+ data[field].push(value);
17
+ }
18
+ else {
19
+ data[field] = [value];
20
+ }
21
+ }
22
+ add('micromarkExtensions', mdxJsx({ acorn, addResult: true }));
23
+ add('fromMarkdownExtensions', mdxJsxFromMarkdown());
24
+ add('toMarkdownExtensions', mdxJsxToMarkdown());
25
+ }
26
+ //# sourceMappingURL=remark-mdx-jsx-only.js.map