@tanstack/markdown 0.0.2 → 0.0.4

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.
package/dist/html.js CHANGED
@@ -21,7 +21,7 @@ export function renderBlock(node, options = {}) {
21
21
  case 'list': {
22
22
  const tag = node.ordered ? 'ol' : 'ul';
23
23
  const start = node.ordered && node.start && node.start !== 1 ? ` start="${node.start}"` : '';
24
- const items = node.items.map(item => `<li>${renderListItemChildren(item.children, item.checked, options)}</li>`).join('\n');
24
+ const items = node.items.map(item => `<li>${renderListItemChildren(item.children, item.checked, node.loose, options)}</li>`).join('\n');
25
25
  return `<${tag}${start}>\n${items}\n</${tag}>`;
26
26
  }
27
27
  case 'blockquote':
@@ -76,7 +76,6 @@ function renderInlines(nodes, options) {
76
76
  }
77
77
  function renderCodeBlock(node, options) {
78
78
  const lang = node.lang ?? 'plaintext';
79
- const codeAttrs = ` class="language-${escapeAttr(lang)}"`;
80
79
  const preAttrs = [
81
80
  'class="tm-code"',
82
81
  `data-lang="${escapeAttr(lang)}"`,
@@ -86,25 +85,20 @@ function renderCodeBlock(node, options) {
86
85
  ]
87
86
  .filter(Boolean)
88
87
  .join(' ');
89
- const highlighter = options.highlighter;
90
- const highlightOptions = {
91
- ...(node.highlightLines ? { highlightLines: node.highlightLines } : {}),
92
- ...(options.codeLineNumbers !== undefined ? { lineNumbers: options.codeLineNumbers } : {}),
93
- };
94
- const html = highlighter ? highlighter(node.value, lang, highlightOptions) : escapeHtml(node.value);
95
- const pre = `<pre ${preAttrs}><code${codeAttrs}>${html}</code></pre>`;
88
+ const html = options.highlighter?.(node.value, lang, {
89
+ ...(node.highlightLines && { highlightLines: node.highlightLines }),
90
+ ...(options.codeLineNumbers !== undefined && { lineNumbers: options.codeLineNumbers }),
91
+ }) ?? escapeHtml(node.value);
92
+ const pre = `<pre ${preAttrs}><code class="language-${escapeAttr(lang)}">${html}</code></pre>`;
96
93
  if (!node.title)
97
94
  return pre;
98
95
  return `<figure class="tm-code-frame" data-lang="${escapeAttr(lang)}"><figcaption>${escapeHtml(node.title)}</figcaption>${pre}</figure>`;
99
96
  }
100
- function renderListItemChildren(children, checked, options) {
101
- const [first, ...rest] = children;
97
+ function renderListItemChildren(children, checked, loose, options) {
98
+ const first = children[0];
102
99
  const task = checked === undefined ? '' : `<input type="checkbox" disabled${checked ? ' checked' : ''}> `;
103
- if (checked !== undefined && first?.type === 'paragraph') {
104
- const firstLine = `${task}${renderInlines(first.children, options)}`;
105
- const restHtml = rest.map(child => renderBlock(child, options)).join('\n');
106
- return restHtml ? `${firstLine}\n${restHtml}` : firstLine;
107
- }
100
+ if ((checked !== undefined || !loose) && first?.type === 'paragraph')
101
+ return `${task}${renderInlines(first.children, options)}${children.length > 1 ? `\n${children.slice(1).map(child => renderBlock(child, options)).join('\n')}` : ''}`;
108
102
  return `${task}${children.map(child => renderBlock(child, options)).join('\n')}`;
109
103
  }
110
104
  function renderCallout(node, options) {
@@ -135,14 +129,11 @@ function renderExtension(node, options) {
135
129
  return undefined;
136
130
  }
137
131
  function renderHeadingAnchor(id, options) {
138
- if (!id || !options.headingAnchors)
132
+ const headingAnchors = options.headingAnchors;
133
+ if (!id || !headingAnchors)
139
134
  return '';
140
- const anchorOptions = typeof options.headingAnchors === 'object' ? options.headingAnchors : {};
141
- const content = anchorOptions.content ?? '#';
142
- const className = anchorOptions.className ?? 'anchor-heading anchor-heading-link';
143
- const ariaHidden = anchorOptions.ariaHidden ?? true;
144
- const tabIndex = anchorOptions.tabIndex ?? -1;
145
- return `<a href="#${escapeAttr(id)}" aria-hidden="${ariaHidden}" class="${escapeAttr(className)}" tabindex="${tabIndex}">${escapeHtml(content)}</a>`;
135
+ const anchorOptions = typeof headingAnchors === 'object' ? headingAnchors : {};
136
+ return `<a href="#${escapeAttr(id)}" aria-hidden="${anchorOptions.ariaHidden ?? true}" class="${escapeAttr(anchorOptions.className ?? 'anchor-heading anchor-heading-link')}" tabindex="${anchorOptions.tabIndex ?? -1}">${escapeHtml(anchorOptions.content ?? '#')}</a>`;
146
137
  }
147
138
  function renderComponentAttrs(node) {
148
139
  const props = {
package/dist/inline.js CHANGED
@@ -1,4 +1,4 @@
1
- import { sanitizeUrl } from './utils.js';
1
+ import { normalizeReferenceLabel, sanitizeUrl } from './utils.js';
2
2
  export function parseInline(value, options = {}) {
3
3
  const nodes = parseInlineRaw(value, options);
4
4
  let result = mergeText(nodes);
@@ -139,22 +139,39 @@ function parseInlineRaw(value, options) {
139
139
  }
140
140
  function parseLinkish(value, open, options) {
141
141
  const closeBracket = findBalanced(value, open, '[', ']');
142
- if (closeBracket === -1 || value[closeBracket + 1] !== '(')
143
- return undefined;
144
- const closeParen = findBalanced(value, closeBracket + 1, '(', ')');
145
- if (closeParen === -1)
142
+ if (closeBracket === -1)
146
143
  return undefined;
147
144
  const label = value.slice(open + 1, closeBracket);
148
- const destination = value.slice(closeBracket + 2, closeParen).trim();
149
- const parsed = parseDestination(destination);
150
- if (!parsed.href)
151
- return undefined;
152
- return {
153
- label,
154
- href: parsed.href,
155
- ...(parsed.title ? { title: parsed.title } : {}),
156
- end: closeParen + 1,
157
- };
145
+ if (value[closeBracket + 1] === '(') {
146
+ const closeParen = findBalanced(value, closeBracket + 1, '(', ')');
147
+ if (closeParen === -1)
148
+ return undefined;
149
+ const destination = value.slice(closeBracket + 2, closeParen).trim();
150
+ const parsed = parseDestination(destination);
151
+ if (!parsed)
152
+ return undefined;
153
+ return {
154
+ label,
155
+ href: parsed.href,
156
+ ...(parsed.title ? { title: parsed.title } : {}),
157
+ end: closeParen + 1,
158
+ };
159
+ }
160
+ if (value[closeBracket + 1] === '[') {
161
+ const closeReference = findBalanced(value, closeBracket + 1, '[', ']');
162
+ if (closeReference === -1)
163
+ return undefined;
164
+ const definition = options.references?.[normalizeReferenceLabel(value.slice(closeBracket + 2, closeReference))];
165
+ if (!definition)
166
+ return undefined;
167
+ return {
168
+ label,
169
+ href: definition.href,
170
+ ...(definition.title ? { title: definition.title } : {}),
171
+ end: closeReference + 1,
172
+ };
173
+ }
174
+ return undefined;
158
175
  }
159
176
  function parseDestination(value) {
160
177
  const match = value.match(/^(\S+)(?:\s+["']([^"']*)["'])?$/);
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,gBAAgB,EAChB,YAAY,EAGb,MAAM,YAAY,CAAA;AAKnB,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,gBAAgB,CAuB5F"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,gBAAgB,EAChB,YAAY,EAGb,MAAM,YAAY,CAAA;AAKnB,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,gBAAgB,CAiC5F"}
package/dist/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { parseInline } from './inline.js';
2
- import { createSlugger, isBlank, normalizeInput, plainText, stripIndent } from './utils.js';
2
+ import { createSlugger, isBlank, normalizeInput, normalizeReferenceLabel, plainText, stripIndent } from './utils.js';
3
3
  export function parseMarkdown(markdown, options = {}) {
4
4
  const normalized = normalizeInput(markdown);
5
5
  const frontmatterEnabled = options.frontmatter !== false;
@@ -12,11 +12,19 @@ export function parseMarkdown(markdown, options = {}) {
12
12
  lines = lines.slice(end + 1);
13
13
  }
14
14
  }
15
- const parser = new BlockParser(lines, options, createSlugger());
15
+ const referenceResult = extractReferenceDefinitions(lines);
16
+ lines = referenceResult.lines;
17
+ const parseOptions = Object.keys(referenceResult.references).length === 0
18
+ ? options
19
+ : {
20
+ ...options,
21
+ references: referenceResult.references,
22
+ };
23
+ const parser = new BlockParser(lines, parseOptions, createSlugger());
16
24
  const children = parser.parse();
17
25
  let document = frontmatter === undefined ? { type: 'root', children } : { type: 'root', frontmatter, children };
18
- for (const extension of options.extensions ?? []) {
19
- document = extension.transformDocument?.(document, { options }) ?? document;
26
+ for (const extension of parseOptions.extensions ?? []) {
27
+ document = extension.transformDocument?.(document, { options: parseOptions }) ?? document;
20
28
  }
21
29
  return document;
22
30
  }
@@ -146,6 +154,7 @@ class BlockParser {
146
154
  const ordered = first.ordered;
147
155
  const baseIndent = first.indent;
148
156
  const start = ordered ? first.number : undefined;
157
+ let loose = false;
149
158
  while (this.index < this.lines.length) {
150
159
  const marker = listMarker(this.current());
151
160
  if (!marker || marker.ordered !== ordered || marker.indent !== baseIndent)
@@ -163,6 +172,9 @@ class BlockParser {
163
172
  if (nextMarker && nextMarker.indent === baseIndent && nextMarker.ordered === ordered)
164
173
  break;
165
174
  if (isBlank(line)) {
175
+ if (!this.next())
176
+ break;
177
+ loose = true;
166
178
  itemLines.push('');
167
179
  this.index++;
168
180
  continue;
@@ -178,9 +190,18 @@ class BlockParser {
178
190
  this.index++;
179
191
  }
180
192
  const children = new BlockParser(itemLines, this.options, this.slugger).parse();
181
- items.push(checked === undefined ? { type: 'listItem', children } : { type: 'listItem', checked, children });
193
+ const item = { type: 'listItem', children };
194
+ if (checked !== undefined)
195
+ item.checked = checked;
196
+ items.push(item);
182
197
  }
183
- return ordered && start !== undefined ? { type: 'list', ordered, start, items } : { type: 'list', ordered, items };
198
+ return {
199
+ type: 'list',
200
+ ordered,
201
+ ...(ordered && start !== undefined ? { start } : {}),
202
+ ...(loose && { loose: true }),
203
+ items,
204
+ };
184
205
  }
185
206
  parseTable() {
186
207
  const header = this.current();
@@ -266,6 +287,37 @@ function parseCodeInfo(info) {
266
287
  ...(highlightLines.length ? { highlightLines } : {}),
267
288
  };
268
289
  }
290
+ function extractReferenceDefinitions(lines) {
291
+ const references = {};
292
+ const remaining = [];
293
+ let fenceMarker;
294
+ let fenceSize = 0;
295
+ for (const line of lines) {
296
+ const fence = line.match(/^ {0,3}(`{3,}|~{3,})/);
297
+ if (fence) {
298
+ const marker = fence[1][0];
299
+ if (!fenceMarker) {
300
+ fenceMarker = marker;
301
+ fenceSize = fence[1].length;
302
+ }
303
+ else if (marker === fenceMarker && fence[1].length >= fenceSize) {
304
+ fenceMarker = undefined;
305
+ fenceSize = 0;
306
+ }
307
+ remaining.push(line);
308
+ continue;
309
+ }
310
+ if (!fenceMarker) {
311
+ const definition = line.match(/^ {0,3}\[([^\]\n]+)\]:[ \t]*(\S+)[ \t]*$/);
312
+ if (definition) {
313
+ references[normalizeReferenceLabel(definition[1])] = { href: definition[2].replace(/^<|>$/g, '') };
314
+ continue;
315
+ }
316
+ }
317
+ remaining.push(line);
318
+ }
319
+ return { lines: remaining, references };
320
+ }
269
321
  function parseLineRanges(value) {
270
322
  const lines = new Set();
271
323
  for (const part of value.split(',')) {
package/dist/react.js CHANGED
@@ -17,7 +17,7 @@ export function renderBlockReact(node, options = {}, key) {
17
17
  return renderCodeBlockReact(node, options, key);
18
18
  case 'list': {
19
19
  const tag = node.ordered ? 'ol' : 'ul';
20
- return h(options, tag, { key, ...(node.ordered && node.start && node.start !== 1 ? { start: node.start } : {}) }, node.items.map((item, index) => h(options, 'li', { key: index }, renderListItemChildrenReact(item.children, item.checked, options, `${index}`))));
20
+ return h(options, tag, { key, ...(node.ordered && node.start && node.start !== 1 ? { start: node.start } : {}) }, node.items.map((item, index) => h(options, 'li', { key: index }, renderListItemChildrenReact(item.children, item.checked, node.loose, options, `${index}`))));
21
21
  }
22
22
  case 'blockquote':
23
23
  return h(options, 'blockquote', { key }, node.children.map((child, index) => renderBlockReact(child, options, `${key}:${index}`)));
@@ -73,8 +73,8 @@ function renderCodeBlockReact(node, options, key) {
73
73
  ? {
74
74
  dangerouslySetInnerHTML: {
75
75
  __html: highlighter(node.value, lang, {
76
- ...(node.highlightLines ? { highlightLines: node.highlightLines } : {}),
77
- ...(options.codeLineNumbers !== undefined ? { lineNumbers: options.codeLineNumbers } : {}),
76
+ ...(node.highlightLines && { highlightLines: node.highlightLines }),
77
+ ...(options.codeLineNumbers !== undefined && { lineNumbers: options.codeLineNumbers }),
78
78
  }),
79
79
  },
80
80
  }
@@ -90,7 +90,7 @@ function renderCodeBlockReact(node, options, key) {
90
90
  return h(options, Fragment, { key }, pre);
91
91
  return h(options, 'figure', { key, className: 'tm-code-frame', 'data-lang': lang }, h(options, 'figcaption', null, node.title), pre);
92
92
  }
93
- function renderListItemChildrenReact(children, checked, options, key) {
93
+ function renderListItemChildrenReact(children, checked, loose, options, key) {
94
94
  const [first, ...rest] = children;
95
95
  const task = checked === undefined
96
96
  ? []
@@ -108,10 +108,13 @@ function renderListItemChildrenReact(children, checked, options, key) {
108
108
  return [
109
109
  ...task,
110
110
  ...renderInlines(first.children, options),
111
- ...rest.map((child, childIndex) => renderBlockReact(child, options, `${key}:${childIndex + 1}`)),
111
+ ...rest.flatMap((child, childIndex) => renderListChildReact(child, loose, options, `${key}:${childIndex + 1}`)),
112
112
  ];
113
113
  }
114
- return [...task, ...children.map((child, childIndex) => renderBlockReact(child, options, `${key}:${childIndex}`))];
114
+ return [...task, ...children.flatMap((child, childIndex) => renderListChildReact(child, loose, options, `${key}:${childIndex}`))];
115
+ }
116
+ function renderListChildReact(child, loose, options, key) {
117
+ return !loose && child.type === 'paragraph' ? renderInlines(child.children, options) : [renderBlockReact(child, options, key)];
115
118
  }
116
119
  function renderTableCellReact(tag, cell, align, options, key) {
117
120
  return h(options, tag, { key, ...(align ? { style: { textAlign: align } } : {}) }, renderInlines(cell.children, options));
package/dist/types.d.ts CHANGED
@@ -31,6 +31,7 @@ export interface ListNode {
31
31
  type: 'list';
32
32
  ordered: boolean;
33
33
  start?: number;
34
+ loose?: boolean;
34
35
  items: ListItemNode[];
35
36
  }
36
37
  export interface ListItemNode {
@@ -144,6 +145,7 @@ export interface ParseOptions {
144
145
  frontmatter?: boolean;
145
146
  headingIds?: boolean | ((text: string, index: number) => string);
146
147
  extensions?: MarkdownExtension[];
148
+ references?: Record<string, LinkReferenceDefinition>;
147
149
  }
148
150
  export interface RenderOptions extends ParseOptions {
149
151
  highlighter?: CodeHighlighter;
@@ -169,4 +171,8 @@ export interface MarkdownHeading {
169
171
  level: number;
170
172
  framework?: string;
171
173
  }
174
+ export interface LinkReferenceDefinition {
175
+ href: string;
176
+ title?: string;
177
+ }
172
178
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -7,5 +7,6 @@ export declare function stripIndent(value: string, size: number): string;
7
7
  export declare function plainText(nodes: InlineNode[]): string;
8
8
  export declare function createSlugger(): (value: string) => string;
9
9
  export declare function sanitizeUrl(value: string): string;
10
+ export declare function normalizeReferenceLabel(value: string): string;
10
11
  export declare function splitLines(value: string): string[];
11
12
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAU5C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAQrD;AAED,wBAAgB,aAAa,KAGnB,OAAO,MAAM,YActB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAIlD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAU5C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAQrD;AAED,wBAAgB,aAAa,KAGnB,OAAO,MAAM,YActB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAIlD"}
package/dist/utils.js CHANGED
@@ -62,6 +62,9 @@ export function sanitizeUrl(value) {
62
62
  return '';
63
63
  return trimmed;
64
64
  }
65
+ export function normalizeReferenceLabel(value) {
66
+ return value.trim().toLowerCase();
67
+ }
65
68
  export function splitLines(value) {
66
69
  const lines = value.split('\n');
67
70
  if (lines.at(-1) === '')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/markdown",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "description": "A tiny deterministic TanStack-flavored markdown renderer.",
6
6
  "license": "MIT",