@nielspeter/eess-md 0.8.0 → 0.9.0

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 (66) hide show
  1. package/README.md +3 -1
  2. package/dist/builders/declaration-findings.d.ts +37 -0
  3. package/dist/builders/declaration-findings.d.ts.map +1 -0
  4. package/dist/builders/declaration-findings.js +128 -0
  5. package/dist/builders/declaration-findings.js.map +1 -0
  6. package/dist/builders/links.d.ts +60 -1
  7. package/dist/builders/links.d.ts.map +1 -1
  8. package/dist/builders/links.js +92 -1
  9. package/dist/builders/links.js.map +1 -1
  10. package/dist/conditions/linked-back.d.ts +17 -0
  11. package/dist/conditions/linked-back.d.ts.map +1 -0
  12. package/dist/conditions/linked-back.js +122 -0
  13. package/dist/conditions/linked-back.js.map +1 -0
  14. package/dist/conditions/resolve.d.ts +8 -40
  15. package/dist/conditions/resolve.d.ts.map +1 -1
  16. package/dist/conditions/resolve.js +26 -138
  17. package/dist/conditions/resolve.js.map +1 -1
  18. package/dist/corpus.d.ts +3 -0
  19. package/dist/corpus.d.ts.map +1 -1
  20. package/dist/corpus.js +7 -10
  21. package/dist/corpus.js.map +1 -1
  22. package/dist/index.d.ts +4 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +4 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/model/document.d.ts +8 -1
  27. package/dist/model/document.d.ts.map +1 -1
  28. package/dist/model/document.js +14 -3
  29. package/dist/model/document.js.map +1 -1
  30. package/dist/model/label.d.ts +35 -0
  31. package/dist/model/label.d.ts.map +1 -0
  32. package/dist/model/label.js +68 -0
  33. package/dist/model/label.js.map +1 -0
  34. package/dist/model/links.d.ts +43 -0
  35. package/dist/model/links.d.ts.map +1 -1
  36. package/dist/model/links.js +112 -11
  37. package/dist/model/links.js.map +1 -1
  38. package/dist/model/prose.d.ts +11 -0
  39. package/dist/model/prose.d.ts.map +1 -1
  40. package/dist/model/prose.js +50 -5
  41. package/dist/model/prose.js.map +1 -1
  42. package/dist/model/query.d.ts +7 -0
  43. package/dist/model/query.d.ts.map +1 -1
  44. package/dist/model/query.js +10 -3
  45. package/dist/model/query.js.map +1 -1
  46. package/dist/model/resolve-link.d.ts +142 -0
  47. package/dist/model/resolve-link.d.ts.map +1 -0
  48. package/dist/model/resolve-link.js +194 -0
  49. package/dist/model/resolve-link.js.map +1 -0
  50. package/dist/predicates/declared-block.d.ts +29 -0
  51. package/dist/predicates/declared-block.d.ts.map +1 -0
  52. package/dist/predicates/declared-block.js +47 -0
  53. package/dist/predicates/declared-block.js.map +1 -0
  54. package/dist/predicates/live-target.d.ts +12 -0
  55. package/dist/predicates/live-target.d.ts.map +1 -0
  56. package/dist/predicates/live-target.js +17 -0
  57. package/dist/predicates/live-target.js.map +1 -0
  58. package/dist/rules/adr.d.ts +14 -5
  59. package/dist/rules/adr.d.ts.map +1 -1
  60. package/dist/rules/adr.js +5 -27
  61. package/dist/rules/adr.js.map +1 -1
  62. package/dist/rules/ledger.d.ts +10 -6
  63. package/dist/rules/ledger.d.ts.map +1 -1
  64. package/dist/rules/ledger.js +80 -24
  65. package/dist/rules/ledger.js.map +1 -1
  66. package/package.json +6 -3
@@ -1,14 +1,107 @@
1
1
  import { textOf } from './text-of.js';
2
+ import { enterHeading, headingName } from './document.js';
3
+ import { isLabelAlone, wrappedLabelOf } from './label.js';
2
4
  // A URL is external if it has a scheme (`https:`, `mailto:`) or is protocol-relative.
3
5
  const EXTERNAL_RE = /^([a-z][a-z0-9+.-]*:|\/\/)/i;
6
+ const TASK_BOX = /^\[[ xX]\]\s+/;
4
7
  /**
5
- * Collect inline markdown links (`[text](url)`) from a document tree. Links
6
- * inside fenced code are not parsed as `link` nodes by mdast, so they are
7
- * naturally excluded.
8
+ * The label a `strong` node writes, or `undefined`: `**Label:**` (the colon
9
+ * inside) or `**Label**:` (the colon in the text after it). `__Label__:` is a
10
+ * `strong` node too.
8
11
  */
9
- export function collectLinks(root, source) {
12
+ function strongLabel(node, next) {
13
+ if (node.type !== 'strong')
14
+ return undefined;
15
+ const text = textOf(node);
16
+ // `**Label:**`, and a whole line in bold (`**Label: [a](a.md)**`).
17
+ const inside = /^\s*([^:\n]+?)\s*:/.exec(text);
18
+ if (inside?.[1] !== undefined)
19
+ return inside[1];
20
+ if (next?.type === 'text' && /^\s*:/.test(next.value))
21
+ return text.trim();
22
+ return undefined;
23
+ }
24
+ /**
25
+ * Collect inline markdown links (`[text](url)`) from a document tree, each with
26
+ * the blocks that enclose it and the headings above it; plus every block, the
27
+ * enclosing blocks of each reference-style link, and every label written where
28
+ * no block starts (later in a paragraph, in a table cell, in a heading), which
29
+ * therefore declares nothing. Links inside fenced code are not parsed as `link`
30
+ * nodes by mdast, so they are naturally excluded.
31
+ */
32
+ export function collectLinkBlocks(root, source) {
10
33
  const out = [];
11
- const visit = (node) => {
34
+ const lines = source?.split('\n') ?? [];
35
+ const blocks = [];
36
+ const references = [];
37
+ const unreadLabels = [];
38
+ const headingStack = [];
39
+ // The block a node opens: its first line, read from its content column.
40
+ const blockOf = (node) => {
41
+ const first = node.type === 'listItem' ? (node.children[0] ?? node) : node;
42
+ const line = first.position?.start.line ?? 0;
43
+ const column = first.position?.start.column ?? 1;
44
+ return { line, text: (lines[line - 1] ?? '').slice(column - 1).replace(TASK_BOX, '') };
45
+ };
46
+ const enter = (path, block) => {
47
+ if (path.at(-1)?.line === block.line)
48
+ return path;
49
+ blocks.push(block);
50
+ return [...path, block];
51
+ };
52
+ const visitChildren = (parent, children, path) => {
53
+ for (let i = 0; i < children.length; i++) {
54
+ const child = children[i];
55
+ if (child === undefined)
56
+ continue;
57
+ // A label alone on its paragraph encloses the lists directly after it — every
58
+ // one, since a changed bullet starts a new list.
59
+ if (child.type === 'paragraph' && children[i + 1]?.type === 'list') {
60
+ const label = blockOf(child);
61
+ if (isLabelAlone(label.text)) {
62
+ const inner = enter(path, label);
63
+ visit(child, inner);
64
+ while (children[i + 1]?.type === 'list') {
65
+ const list = children[i + 1];
66
+ if (list !== undefined)
67
+ visit(list, inner);
68
+ i++;
69
+ }
70
+ continue;
71
+ }
72
+ }
73
+ // A label is read as a declaration only where its block starts — nothing but `*`/`_`
74
+ // before it on the block's line — and only in a form the line grammar reads. The tree
75
+ // sees every bold label, so any it finds elsewhere, or in another form, declares nothing.
76
+ const label = strongLabel(child, children[i + 1]);
77
+ if (label !== undefined) {
78
+ const line = child.position?.start.line ?? 0;
79
+ const block = path.at(-1);
80
+ const rest = (lines[line - 1] ?? '').slice((child.position?.start.column ?? 1) - 1);
81
+ const atStart = block !== undefined &&
82
+ block.line === line &&
83
+ /^[*_]*$/.test(block.text.slice(0, block.text.length - rest.length));
84
+ if (!atStart)
85
+ unreadLabels.push({ line, label, reason: 'position' });
86
+ else if (wrappedLabelOf(block.text) !== label) {
87
+ unreadLabels.push({ line, label, reason: 'format' });
88
+ }
89
+ }
90
+ visit(child, path);
91
+ }
92
+ };
93
+ const visit = (node, path) => {
94
+ if (node.type === 'heading') {
95
+ enterHeading(headingStack, node.depth, headingName(node));
96
+ visitChildren(node, node.children, []);
97
+ return;
98
+ }
99
+ if (node.type === 'listItem' || node.type === 'paragraph') {
100
+ visitChildren(node, node.children, enter(path, blockOf(node)));
101
+ return;
102
+ }
103
+ if (node.type === 'linkReference')
104
+ references.push(path);
12
105
  if (node.type === 'link') {
13
106
  // Locate the URL's exact char span in the source (for autofix). The link
14
107
  // node's raw text is `[text](url …)`; the URL is the last occurrence of
@@ -34,14 +127,22 @@ export function collectLinks(root, source) {
34
127
  external: EXTERNAL_RE.test(node.url),
35
128
  urlStart,
36
129
  urlEnd,
130
+ ...(path.length > 0 ? { block: path[path.length - 1], blockPath: path } : {}),
131
+ sectionPath: headingStack.filter((h) => h !== undefined),
37
132
  });
38
133
  }
39
- if ('children' in node) {
40
- for (const child of node.children)
41
- visit(child);
42
- }
134
+ if ('children' in node)
135
+ visitChildren(node, node.children, path);
43
136
  };
44
- visit(root);
45
- return out;
137
+ visitChildren(root, root.children, []);
138
+ return { links: out, references, blocks, unreadLabels };
139
+ }
140
+ /**
141
+ * Collect inline markdown links (`[text](url)`) from a document tree. Links
142
+ * inside fenced code are not parsed as `link` nodes by mdast, so they are
143
+ * naturally excluded.
144
+ */
145
+ export function collectLinks(root, source) {
146
+ return collectLinkBlocks(root, source).links;
46
147
  }
47
148
  //# sourceMappingURL=links.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/model/links.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAuBrC,sFAAsF;AACtF,MAAM,WAAW,GAAG,6BAA6B,CAAA;AAEjD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,MAAe;IACtD,MAAM,GAAG,GAAgB,EAAE,CAAA;IAC3B,MAAM,KAAK,GAAG,CAAC,IAAW,EAAQ,EAAE;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,yEAAyE;YACzE,wEAAwE;YACxE,2EAA2E;YAC3E,2EAA2E;YAC3E,2CAA2C;YAC3C,IAAI,QAA4B,CAAA;YAChC,IAAI,MAA0B,CAAA;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAA;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAA;YACxC,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACb,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAA;oBACzB,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;gBACrC,CAAC;YACH,CAAC;YACD,GAAG,CAAC,IAAI,CAAC;gBACP,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;gBACpC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpC,QAAQ;gBACR,MAAM;aACP,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;gBAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/model/links.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,15 @@
1
1
  import type { Root } from 'mdast';
2
+ /**
3
+ * Parse markdown — the one parser for eess-md: `corpus()` reads every document with it, and the
4
+ * readers here default to it, so the two cannot disagree about where a code block or a section is.
5
+ *
6
+ * GFM, and YAML front matter, which parses to a `yaml` node. Without it, CommonMark reads the
7
+ * closing `---` as a setext underline and the YAML above it becomes a depth-2 section (bug 0087).
8
+ * A line-1 `---` block that is not front matter by {@link isFrontMatter} is read as Markdown instead,
9
+ * so it fails closed: every reader sees what it holds. Text-line readers — `terms()`, `pointers()`,
10
+ * the ledger — see front-matter lines either way, since only code blocks are set aside.
11
+ */
12
+ export declare function parseMarkdown(text: string): Root;
2
13
  /**
3
14
  * Which code a reader sets aside (bug 0287).
4
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prose.d.ts","sourceRoot":"","sources":["../../src/model/prose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,IAAI,EAAE,MAAM,OAAO,CAAA;AAsHxC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAA;AAEtD;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,IAA0B,GAC/B,MAAM,CAUR;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAA0B,GAAG,MAAM,EAAE,CAIvF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAMzE"}
1
+ {"version":3,"file":"prose.d.ts","sourceRoot":"","sources":["../../src/model/prose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,IAAI,EAAE,MAAM,OAAO,CAAA;AAqDxC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKhD;AA8FD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAA;AAEtD;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,IAA0B,GAC/B,MAAM,CAUR;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAA0B,GAAG,MAAM,EAAE,CAIvF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAMzE"}
@@ -1,6 +1,9 @@
1
1
  import { fromMarkdown } from 'mdast-util-from-markdown';
2
2
  import { gfm } from 'micromark-extension-gfm';
3
3
  import { gfmFromMarkdown } from 'mdast-util-gfm';
4
+ import { frontmatter } from 'micromark-extension-frontmatter';
5
+ import { frontmatterFromMarkdown } from 'mdast-util-frontmatter';
6
+ import { isMap, parseDocument } from 'yaml';
4
7
  /**
5
8
  * Which lines of a markdown document are prose, read with the parser the corpus is read with (bugs 0286
6
9
  * and 0287). A scan for a claim a document makes — a `State:` line, a `Deferred:` summary, a ruling, a
@@ -13,11 +16,53 @@ import { gfmFromMarkdown } from 'mdast-util-gfm';
13
16
  * well as an example of one, so setting whole HTML blocks aside silences real claims; that is bug 0293's
14
17
  * design question, not decided here.
15
18
  */
16
- const GFM = gfm();
17
- const GFM_MDAST = gfmFromMarkdown();
18
- /** Parse markdown as the corpus does. */
19
- function parseMarkdown(text) {
20
- return fromMarkdown(text, { extensions: [GFM], mdastExtensions: [GFM_MDAST] });
19
+ const GFM_ONLY = { extensions: [gfm()], mdastExtensions: [gfmFromMarkdown()] };
20
+ const WITH_FRONT_MATTER = {
21
+ extensions: [gfm(), frontmatter(['yaml'])],
22
+ mdastExtensions: [gfmFromMarkdown(), frontmatterFromMarkdown(['yaml'])],
23
+ };
24
+ // A URL with a scheme or `//` points outside the repository — the same test `MdLink.external` uses.
25
+ const EXTERNAL = /^([a-z][a-z0-9+.-]*:|\/\/)/i;
26
+ /** True when Markdown a reader checks — a task box, or a link into the repository — is in `root`. */
27
+ function holdsCheckedMarkdown(root) {
28
+ const visit = (node) => {
29
+ if (node.type === 'listItem' && typeof node.checked === 'boolean')
30
+ return true;
31
+ if (node.type === 'link' && !EXTERNAL.test(node.url))
32
+ return true;
33
+ return 'children' in node && node.children.some(visit);
34
+ };
35
+ return visit(root);
36
+ }
37
+ /**
38
+ * Whether a line-1 `---` block is front matter (bug 0087). Only if it is a YAML mapping that parses
39
+ * with no error — the yaml library hands back a mapping even beside an error, so the errors decide —
40
+ * and holds nothing a Markdown reader checks: a task box or a link into the repository, which a
41
+ * YAML value can carry on an indented continuation line and still parse. Anything else is read as
42
+ * Markdown, as it was before front matter was parsed, so no box or link is hidden by it.
43
+ */
44
+ function isFrontMatter(value) {
45
+ const doc = parseDocument(value);
46
+ if (doc.errors.length > 0 || !isMap(doc.contents) || doc.contents.items.length === 0)
47
+ return false;
48
+ return !holdsCheckedMarkdown(fromMarkdown(value, GFM_ONLY));
49
+ }
50
+ /**
51
+ * Parse markdown — the one parser for eess-md: `corpus()` reads every document with it, and the
52
+ * readers here default to it, so the two cannot disagree about where a code block or a section is.
53
+ *
54
+ * GFM, and YAML front matter, which parses to a `yaml` node. Without it, CommonMark reads the
55
+ * closing `---` as a setext underline and the YAML above it becomes a depth-2 section (bug 0087).
56
+ * A line-1 `---` block that is not front matter by {@link isFrontMatter} is read as Markdown instead,
57
+ * so it fails closed: every reader sees what it holds. Text-line readers — `terms()`, `pointers()`,
58
+ * the ledger — see front-matter lines either way, since only code blocks are set aside.
59
+ */
60
+ export function parseMarkdown(text) {
61
+ const root = fromMarkdown(text, WITH_FRONT_MATTER);
62
+ const first = root.children[0];
63
+ if (first?.type !== 'yaml' || isFrontMatter(first.value))
64
+ return root;
65
+ return fromMarkdown(text, GFM_ONLY);
21
66
  }
22
67
  /**
23
68
  * A node's last line. A position's end is exclusive, so a block its container closes ends at column 1 of
@@ -1 +1 @@
1
- {"version":3,"file":"prose.js","sourceRoot":"","sources":["../../src/model/prose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prose.js","sourceRoot":"","sources":["../../src/model/prose.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,13 @@
1
1
  import type { MdDocument, MdTable } from './document.js';
2
2
  /** Does the document have a heading matching `name`? */
3
3
  export declare function hasSection(doc: MdDocument, name: string | RegExp): boolean;
4
+ /**
5
+ * Is the element — a table, or a link (plan 0405) — under a heading matching
6
+ * `section` (or is no section required)?
7
+ */
8
+ export declare function inSection(element: {
9
+ readonly sectionPath?: readonly string[];
10
+ }, section?: string | RegExp): boolean;
4
11
  /** Is the table under a heading matching `section` (or is no section required)? */
5
12
  export declare function tableInSection(table: MdTable, section?: string | RegExp): boolean;
6
13
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/model/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAOxD,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAE1E;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAGjF"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/model/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAOxD,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAE1E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,EACrD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GACxB,OAAO,CAGT;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAEjF"}
@@ -6,10 +6,17 @@ function matchName(value, name) {
6
6
  export function hasSection(doc, name) {
7
7
  return doc.sections.some((s) => matchName(s.name, name));
8
8
  }
9
- /** Is the table under a heading matching `section` (or is no section required)? */
10
- export function tableInSection(table, section) {
9
+ /**
10
+ * Is the element — a table, or a link (plan 0405) — under a heading matching
11
+ * `section` (or is no section required)?
12
+ */
13
+ export function inSection(element, section) {
11
14
  if (section === undefined)
12
15
  return true;
13
- return table.sectionPath.some((h) => matchName(h, section));
16
+ return (element.sectionPath ?? []).some((h) => matchName(h, section));
17
+ }
18
+ /** Is the table under a heading matching `section` (or is no section required)? */
19
+ export function tableInSection(table, section) {
20
+ return inSection(table, section);
14
21
  }
15
22
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/model/query.ts"],"names":[],"mappings":"AAEA,qEAAqE;AACrE,SAAS,SAAS,CAAC,KAAa,EAAE,IAAqB;IACrD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,UAAU,CAAC,GAAe,EAAE,IAAqB;IAC/D,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,OAAyB;IACtE,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7D,CAAC"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/model/query.ts"],"names":[],"mappings":"AAEA,qEAAqE;AACrE,SAAS,SAAS,CAAC,KAAa,EAAE,IAAqB;IACrD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACrE,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,UAAU,CAAC,GAAe,EAAE,IAAqB;IAC/D,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,OAAqD,EACrD,OAAyB;IAEzB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AACvE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,OAAyB;IACtE,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAClC,CAAC"}
@@ -0,0 +1,142 @@
1
+ import type { ArchFix } from '@nielspeter/eess';
2
+ import type { Corpus } from '../corpus.js';
3
+ import type { MdDocument } from './document.js';
4
+ import type { MdLink } from './links.js';
5
+ /**
6
+ * Options for resolving a link URL against the repo tree. Covers static-site
7
+ * conventions (VitePress, Docusaurus, MkDocs, GitBook…) generically instead of
8
+ * naming any tool: extensionless links resolve by trying extensions and/or a
9
+ * directory index file.
10
+ */
11
+ export interface LinkResolveOptions {
12
+ /**
13
+ * Extensions to try when the URL as written doesn't resolve, e.g. `['.md']`
14
+ * for sites that link `./guide` meaning `./guide.md`. Tried in order.
15
+ */
16
+ readonly tryExtensions?: readonly string[];
17
+ /**
18
+ * Directory index filename to try, e.g. `'index.md'` for sites where
19
+ * `./guide/` (or `./guide`) means `./guide/index.md`.
20
+ */
21
+ readonly tryIndex?: string;
22
+ /**
23
+ * Content root for site-absolute links (leading `/`). Static-site generators
24
+ * resolve `/page` against the site's content root, not the repo root — e.g.
25
+ * `rootDir: 'docs'` makes `/guide` mean `docs/guide(.md)`. Repo-root
26
+ * resolution is still tried first, so plain repo-absolute links keep working.
27
+ */
28
+ readonly rootDir?: string;
29
+ /**
30
+ * Resolve a link naming a real directory (`./fixed/` or `./fixed`, with or
31
+ * without the trailing slash — both forms occur in this repo's own corpus)
32
+ * even when it has no index file. Correct for a repo-hosted corpus (GitHub,
33
+ * GitLab render a directory link as its listing); wrong for a static-site
34
+ * corpus where a bare directory is not itself a page — there, reach for
35
+ * {@link tryIndex} instead. Off by default: this widens what "resolves"
36
+ * means, and a link resolving that shouldn't is a false green, not a
37
+ * convenience. Default `false`.
38
+ *
39
+ * A link naming a real directory always wins over an unrelated typo — if
40
+ * `./foo` was meant as a deleted `foo.md` but a directory `foo/` happens to
41
+ * exist at that path, it resolves as the directory. Not a new failure mode:
42
+ * GitHub renders that link as the directory listing too, so this only
43
+ * closes the gap between the gate and what the link actually does when
44
+ * followed, it doesn't introduce a new way to be surprised by it.
45
+ *
46
+ * `resolveLink` reports a directory as its own case whatever this says; the
47
+ * option decides whether `resolve()` accepts that case.
48
+ */
49
+ readonly resolveDirectories?: boolean;
50
+ }
51
+ /** The parts of a link that resolution reads. Narrower than `MdLink`, so a caller can build one. */
52
+ export interface LinkToResolve {
53
+ readonly url: string;
54
+ readonly external: boolean;
55
+ readonly doc: {
56
+ readonly relPath: string;
57
+ };
58
+ }
59
+ /** Why an existing file is not a loaded corpus document. Every reason that applies is listed. */
60
+ export type NotInCorpusReason = 'not-markdown' | 'ignored' | 'outside-roots';
61
+ /**
62
+ * Where a link points, as one named case (plan 0404). Each case is a different
63
+ * fact with a different remedy, so a rule over links can say which one it met:
64
+ *
65
+ * - `external`: a URL with a scheme or `//`; not resolved against the repo.
66
+ * - `self`: a pure `#anchor`, or a path back to the linking document itself.
67
+ * - `document`: an existing, loaded corpus document, whose links are parsed.
68
+ * - `not-in-corpus`: an existing file the corpus did not load, with every reason.
69
+ * - `directory`: no candidate is a file, but one names a real directory.
70
+ * - `missing`: nothing exists; `tried` lists every candidate, in order.
71
+ */
72
+ export type LinkTarget = {
73
+ readonly kind: 'external';
74
+ } | {
75
+ readonly kind: 'self';
76
+ } | {
77
+ readonly kind: 'document';
78
+ readonly path: string;
79
+ readonly doc: MdDocument;
80
+ } | {
81
+ readonly kind: 'not-in-corpus';
82
+ readonly path: string;
83
+ readonly reasons: readonly NotInCorpusReason[];
84
+ } | {
85
+ readonly kind: 'directory';
86
+ readonly path: string;
87
+ } | {
88
+ readonly kind: 'missing';
89
+ readonly tried: readonly string[];
90
+ };
91
+ /** How `corpus()` decided which files to load, kept so a resolver can say why one was not. */
92
+ interface CorpusMatchers {
93
+ readonly inRoots: (relPath: string) => boolean;
94
+ readonly ignored: (relPath: string) => boolean;
95
+ }
96
+ /**
97
+ * Record how `corpus()` filtered its files. Called by `corpus()` only; a
98
+ * `Corpus` built any other way has no matchers, and an unloaded `.md` file in
99
+ * it is reported as `outside-roots`.
100
+ */
101
+ export declare function registerCorpusMatchers(corpus: Corpus, matchers: CorpusMatchers): void;
102
+ /**
103
+ * A link URL's base repo-relative target(s), or `[]` for a pure fragment.
104
+ * Site-absolute links (leading `/`) yield the repo-root target, then the
105
+ * content-root target when `rootDir` is set. Throws `URIError` on malformed
106
+ * percent-encoding; `resolveLink` turns that into `missing`.
107
+ *
108
+ * Exported for `linkResolves`, which labels the two site-absolute candidates
109
+ * in its directory hint (bug 0137); not part of the package's public API.
110
+ */
111
+ export declare function linkTargets(link: LinkToResolve, options: LinkResolveOptions): string[];
112
+ /**
113
+ * Resolve a link to the one case it is (plan 0404). Total: it never throws.
114
+ *
115
+ * Candidates are tried in a fixed order — each target (repo-root, then
116
+ * content-root when `rootDir` is set), and within it the URL as written, then
117
+ * `tryExtensions`, then `tryIndex`. The first existing **file** wins. Only when
118
+ * no candidate is a file is a directory reported, the first target's first.
119
+ * When nothing exists, `missing.tried` is every candidate tried, in order.
120
+ *
121
+ * Links into the built-in ignores (`node_modules`, `.git`, `dist`, …) are
122
+ * `missing`: `corpus()` never walks those folders, so their files are not known.
123
+ *
124
+ * The directory and document indexes are built on a corpus's first resolution
125
+ * and cached. A `corpus()` result never changes, so that is exact; a hand-built
126
+ * `Corpus` whose `documents()` returns something different later is not re-read.
127
+ */
128
+ export declare function resolveLink(link: LinkToResolve, corpus: Corpus, options?: LinkResolveOptions): LinkTarget;
129
+ /** Basename → every repo file with it, for {@link movedLinkFix}. Built once per caller. */
130
+ export declare function basenameIndex(corpus: Corpus): ReadonlyMap<string, readonly string[]>;
131
+ /**
132
+ * If a broken link's basename uniquely names one file in the repo (the target
133
+ * moved, not renamed), a deterministic autofix rewriting the URL to a path
134
+ * relative to the linking document (plan 0066). Ambiguous basename, or a URL
135
+ * whose exact span isn't known, → no fix.
136
+ *
137
+ * Lives beside `resolveLink` so that path arithmetic stays in this one module
138
+ * (plan 0404's structural rule keeps `node:path` out of the conditions).
139
+ */
140
+ export declare function movedLinkFix(link: MdLink, byBasename: ReadonlyMap<string, readonly string[]>): ArchFix | undefined;
141
+ export {};
142
+ //# sourceMappingURL=resolve-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-link.d.ts","sourceRoot":"","sources":["../../src/model/resolve-link.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CACtC;AAED,oGAAoG;AACpG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC3C;AAED,iGAAiG;AACjG,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,SAAS,GAAG,eAAe,CAAA;AAE5E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC9E;IACE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAC/C,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAA;AAEnE,8FAA8F;AAC9F,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;CAC/C;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAErF;AAwCD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAYtF;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,UAAU,CA2BZ;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CASpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GACjD,OAAO,GAAG,SAAS,CAoBrB"}