|
80 | 80 | */
|
81 | 81 |
|
82 | 82 | import assert from 'assert'
|
83 |
| -import {directiveFromMarkdown} from 'mdast-util-directive' |
84 | 83 | import {toString} from 'mdast-util-to-string'
|
85 | 84 | import {parse} from 'micromark/lib/parse.js'
|
86 | 85 | import {preprocess} from 'micromark/lib/preprocess.js'
|
@@ -1152,27 +1151,20 @@ function extension(combined, extension) {
|
1152 | 1151 | */
|
1153 | 1152 | export function md(strings, ...values) {
|
1154 | 1153 | // Interleave strings with `:expression`.
|
1155 |
| - const tree = fromMarkdown(strings.join(':expression'), { |
| 1154 | + return fromMarkdown(strings.join(':expression'), { |
1156 | 1155 | extensions: [directive()],
|
1157 |
| - mdastExtensions: [directiveFromMarkdown] |
| 1156 | + mdastExtensions: [{enter: {directiveText: enter}}] |
1158 | 1157 | })
|
1159 |
| - // Swap `:expression` nodes for values. |
1160 |
| - visit(tree) |
1161 |
| - return tree |
1162 | 1158 |
|
1163 | 1159 | /**
|
1164 |
| - * @param {Node} node |
| 1160 | + * @this {CompileContext} |
1165 | 1161 | * @returns {void}
|
1166 | 1162 | */
|
1167 |
| - function visit(node) { |
1168 |
| - if ('children' in node) { |
1169 |
| - for (const [i, child] of node.children.entries()) { |
1170 |
| - if (child.type === 'textDirective' && child.name === 'expression') { |
1171 |
| - node.children[i] = /** @type {Content} */ (values.shift()) |
1172 |
| - } else { |
1173 |
| - visit(child) |
1174 |
| - } |
1175 |
| - } |
1176 |
| - } |
| 1163 | + function enter() { |
| 1164 | + const parent = this.stack[this.stack.length - 1] |
| 1165 | + assert(parent, 'expected `parent`') |
| 1166 | + assert('children' in parent, 'expected `parent`') |
| 1167 | + // @ts-expect-error: Assume `Node` can exist as a child of `parent`. |
| 1168 | + parent.children.push(values.shift()) |
1177 | 1169 | }
|
1178 | 1170 | }
|
0 commit comments