@tabnas/markdown 0.5.0 → 0.5.1

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/README.md CHANGED
@@ -1,7 +1,16 @@
1
1
  # @tabnas/markdown (TypeScript)
2
2
 
3
- A CommonMark parser for the [Tabnas](https://github.com/tabnas/parser) engine, scoring
4
- **652/652 on the CommonMark 0.31.2 spec suite**, with one GFM extension (strikethrough).
3
+ A CommonMark parser for the [Tabnas](https://github.com/tabnas/parser) engine.
4
+
5
+ **This parser is conformant to CommonMark 0.31.2** — all 652 examples, across all 26
6
+ sections of the spec suite, in both runtimes. The suite is vendored in this repository, so
7
+ the claim is checkable: `npm run conformance` reports 652/652, with no build step and no
8
+ engine installed. It runs with the GFM extensions off, which is what measuring CommonMark
9
+ conformance means — with `gfm: true` the extensions deliberately change nine of those
10
+ examples. It also implements **all five GFM extensions** — tables, task list
11
+ items, autolink literals, strikethrough and disallowed raw HTML — 24/24 on the vendored
12
+ GFM corpus, via `npm run conformance-gfm`.
13
+
5
14
  This is the canonical implementation; [`go/`](../go/README.md) is a port of it.
6
15
 
7
16
  [![npm version](https://img.shields.io/npm/v/@tabnas/markdown.svg)](https://npmjs.com/package/@tabnas/markdown)
@@ -35,13 +44,22 @@ toHtml('# Hello\n\nHello *world*') // => '<h1>Hello</h1>\n<p>Hello <em>world</em
35
44
  ```
36
45
 
37
46
  **The HTML is not sanitized.** Raw HTML blocks and inline tags pass through verbatim, as
38
- CommonMark specifies, and GFM's disallowed-raw-HTML filter is not implemented. Put a
39
- sanitizer downstream of any untrusted Markdown.
47
+ CommonMark specifies. Put a sanitizer downstream of any untrusted Markdown.
48
+
49
+ ```js
50
+ import { toHtml } from '@tabnas/markdown'
51
+
52
+ toHtml('<img onerror="alert(1)">') // => '<img onerror="alert(1)">\n'
53
+ ```
54
+
55
+ GFM's disallowed-raw-HTML filter (on with `gfm`, the default) rewrites the leading `<` of
56
+ nine tag names — `title`, `textarea`, `style`, `xmp`, `iframe`, `noembed`, `noframes`,
57
+ `script`, `plaintext` — and touches nothing else:
40
58
 
41
59
  ```js
42
60
  import { toHtml } from '@tabnas/markdown'
43
61
 
44
- toHtml('<script>alert(1)</script>') // => '<script>alert(1)</script>\n'
62
+ toHtml('<script>alert(1)</script>') // => '&lt;script>alert(1)&lt;/script>\n'
45
63
  ```
46
64
 
47
65
  As a Tabnas plugin, `parse()` returns the same AST as `parseDocument()`:
@@ -59,6 +77,20 @@ tn.parse('# Hello') // => { type: 'document', children: [ { type: 'heading', dep
59
77
  block nodes, and can be walked or mutated and then rendered. See the
60
78
  [reference](doc/reference.md).
61
79
 
80
+ GFM tables add three node types, in mdast's shape — `table`, `tableRow` and `tableCell`.
81
+ `align` has one entry per column, `null` where the delimiter cell had no colon; there is
82
+ no header flag, so the first row is the header row by convention, and every row has
83
+ exactly as many cells as `align` has entries.
84
+
85
+ ```js
86
+ import { parseDocument } from '@tabnas/markdown'
87
+
88
+ const doc = parseDocument('| a | b |\n| :- | -: |\n| 1 | 2 |')
89
+
90
+ doc.children[0].align // => [ 'left', 'right' ]
91
+ doc.children[0].children[0].children[0] // => { type: 'tableCell', children: [ { type: 'text', value: 'a' } ] }
92
+ ```
93
+
62
94
  ## Install
63
95
 
64
96
  ```bash
@@ -75,18 +107,41 @@ work with no build step and no engine installed — it stages `src/*.ts` in a te
75
107
  whose `package.json` says `"type": "module"` and runs them under Node's type stripping:
76
108
 
77
109
  ```bash
78
- npm run conformance # 652/652
110
+ npm run conformance # 652/652, all 26 sections
79
111
  npm run conformance -- --failures
112
+ npm run conformance-gfm # 24/24, all five extensions
80
113
  ```
81
114
 
82
115
  The `// =>` assertions in this repo's Markdown are executed as tests
83
116
  (`test/doc-examples.test.ts`, and `tools/check-doc-examples.mjs` for the engine-free
84
117
  check), so a wrong expected value is a failing test.
85
118
 
86
- Options are `gfm` (default `true`) and `breaks` (default `false`). `gfm` gates
87
- strikethrough and nothing else: tables, task list items, autolink literals (bare `www.` /
88
- `https://` without angle brackets), footnotes and disallowed-raw-HTML filtering are not
89
- implemented.
119
+ Options are `gfm` (default `true`) and `breaks` (default `false`). `gfm` gates five
120
+ extensions together — tables, strikethrough, task list items, autolink literals (bare
121
+ `www.` / `https://` / `a@b.co`) and the disallowed-raw-HTML filter. Footnotes are not
122
+ implemented. With `gfm:false` the output is plain CommonMark.
123
+
124
+ Footnotes are a GitHub product feature rather than part of the GFM spec suite, and their
125
+ absence is quiet: `[^1]` is a valid CommonMark link label, so a footnote authored on
126
+ GitHub renders as a broken link instead of raising an error.
127
+
128
+ ```js
129
+ import { toHtml } from '@tabnas/markdown'
130
+
131
+ toHtml('Text[^1]\n\n[^1]: note') // => '<p>Text<a href="note">^1</a></p>\n'
132
+ ```
133
+
134
+ Nothing outside CommonMark and GFM is implemented — no math, front matter, definition
135
+ lists, heading attributes, admonitions, wiki links, emoji shortcodes, highlight or
136
+ sub/superscript. Each would need its own opt-in flag; `gfm` is not going to grow to mean
137
+ "everything". Note one collision: GFM's single-tilde strikethrough takes the syntax other
138
+ dialects use for subscript, so `H~2~O` is a deletion under the default `gfm:true`.
139
+
140
+ ```js
141
+ import { toHtml } from '@tabnas/markdown'
142
+
143
+ toHtml('H~2~O') // => '<p>H<del>2</del>O</p>\n'
144
+ ```
90
145
 
91
146
  ## Documentation
92
147
 
package/dist/ast.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import { MdNode } from './node.ts';
2
+ import type { TableAlign } from './node.ts';
2
3
  import type { ParserOptions } from './options.ts';
3
4
  export type DocumentNode = {
4
5
  type: 'document';
5
6
  children: Block[];
6
7
  };
7
- export type Block = HeadingNode | ParagraphNode | BlockquoteNode | ListNode | ListItemNode | CodeNode | HtmlNode | ThematicBreakNode;
8
+ export type Block = HeadingNode | ParagraphNode | BlockquoteNode | ListNode | ListItemNode | CodeNode | HtmlNode | ThematicBreakNode | TableNode;
8
9
  export type HeadingNode = {
9
10
  type: 'heading';
10
11
  depth: 1 | 2 | 3 | 4 | 5 | 6;
@@ -28,6 +29,12 @@ export type ListNode = {
28
29
  export type ListItemNode = {
29
30
  type: 'listItem';
30
31
  spread: boolean;
32
+ /**
33
+ * mdast's task list field: `true`/`false` for a GFM task list item
34
+ * (`- [x] foo`), `null` for an ordinary item — and therefore `null`
35
+ * everywhere when `gfm` is off.
36
+ */
37
+ checked: boolean | null;
31
38
  children: Block[];
32
39
  };
33
40
  export type CodeNode = {
@@ -43,6 +50,29 @@ export type HtmlNode = {
43
50
  export type ThematicBreakNode = {
44
51
  type: 'thematicBreak';
45
52
  };
53
+ /**
54
+ * A GFM table, in mdast's shape.
55
+ *
56
+ * `align` has one entry per column — `null` where the delimiter row gave no
57
+ * colon — and every row has exactly that many cells, since the block phase
58
+ * pads short rows and truncates long ones.
59
+ *
60
+ * mdast has no header flag: the **first** row is the header row, by
61
+ * convention, and this projection preserves that ordering from the tree.
62
+ */
63
+ export type TableNode = {
64
+ type: 'table';
65
+ align: TableAlign[];
66
+ children: TableRowNode[];
67
+ };
68
+ export type TableRowNode = {
69
+ type: 'tableRow';
70
+ children: TableCellNode[];
71
+ };
72
+ export type TableCellNode = {
73
+ type: 'tableCell';
74
+ children: Inline[];
75
+ };
46
76
  export type Inline = TextNode | EmphasisNode | StrongNode | InlineCodeNode | LinkNode | ImageNode | BreakNode | DeleteNode | HtmlNode;
47
77
  export type TextNode = {
48
78
  type: 'text';
package/dist/ast.js CHANGED
@@ -210,6 +210,25 @@ function buildBlock(node, opts, built) {
210
210
  }
211
211
  case 'html_block':
212
212
  return { type: 'html', value: node.literal ?? '' };
213
+ case 'table': {
214
+ // Built here rather than through `built`, because a table's children are
215
+ // rows and cells rather than blocks — `blockChildren` never descends
216
+ // into one. The nesting is a fixed three levels deep, so unlike the
217
+ // block containers this cannot be driven past the stack by input.
218
+ const rows = [];
219
+ for (let row = node.firstChild; row; row = row.next) {
220
+ if ('table_row' !== row.type)
221
+ continue;
222
+ const cells = [];
223
+ for (let cell = row.firstChild; cell; cell = cell.next) {
224
+ if ('table_cell' !== cell.type)
225
+ continue;
226
+ cells.push({ type: 'tableCell', children: inlineChildren(cell, opts) });
227
+ }
228
+ rows.push({ type: 'tableRow', children: cells });
229
+ }
230
+ return { type: 'table', align: node.tableAlign ?? [], children: rows };
231
+ }
213
232
  case 'list': {
214
233
  const data = node.listData;
215
234
  const ordered = 'ordered' === data?.type;
@@ -220,6 +239,7 @@ function buildBlock(node, opts, built) {
220
239
  items.push({
221
240
  type: 'listItem',
222
241
  spread: itemIsSpread(child),
242
+ checked: child.checked,
223
243
  children: builtChildren(child, built),
224
244
  });
225
245
  }
@@ -236,7 +256,12 @@ function buildBlock(node, opts, built) {
236
256
  case 'item':
237
257
  // Only reachable if an item is somehow detached from its list; a list
238
258
  // builds its own items above.
239
- return { type: 'listItem', spread: itemIsSpread(node), children: builtChildren(node, built) };
259
+ return {
260
+ type: 'listItem',
261
+ spread: itemIsSpread(node),
262
+ checked: node.checked,
263
+ children: builtChildren(node, built),
264
+ };
240
265
  default:
241
266
  return null;
242
267
  }
package/dist/ast.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}