@profullstack/readm3 0.1.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.
@@ -0,0 +1,568 @@
1
+ /**
2
+ * A small markdown renderer that produces styled lines instead of a DOM.
3
+ *
4
+ * Spans carry a semantic `role` rather than a color; the viewer maps roles onto
5
+ * the active HQTUI theme. That split keeps this file pure and testable without
6
+ * a terminal, and lets a theme change re-color a document without re-parsing it.
7
+ */
8
+ import { stringWidth } from "@profullstack/hqtui";
9
+ const BULLETS = ["•", "◦", "▪", "·"];
10
+ const HR = /^ {0,3}(?:(?:\*[ \t]*){3,}|(?:-[ \t]*){3,}|(?:_[ \t]*){3,})$/;
11
+ const HEADING = /^ {0,3}(#{1,6})[ \t]+(.*?)[ \t]*#*[ \t]*$/;
12
+ const FENCE = /^ {0,3}(```+|~~~+)[ \t]*([\w+#.-]*)/;
13
+ const QUOTE = /^ {0,3}>[ \t]?(.*)$/;
14
+ const LIST = /^([ \t]*)([-*+]|\d{1,9}[.)])([ \t]+)(.*)$/;
15
+ const TASK = /^\[([ xX])\][ \t]+/;
16
+ const SETEXT_H1 = /^ {0,3}=+[ \t]*$/;
17
+ const SETEXT_H2 = /^ {0,3}-+[ \t]*$/;
18
+ const TABLE_ROW = /^[ \t]*\|/;
19
+ const TABLE_RULE = /^[ \t]*\|?[ \t]*:?-+:?[ \t]*(\|[ \t]*:?-+:?[ \t]*)*\|?[ \t]*$/;
20
+ const INDENTED_CODE = /^(?: {4}|\t)(.*)$/;
21
+ /** The visible text of a line, with all styling dropped. Handy in tests. */
22
+ export function plain(line) {
23
+ return line.spans.map((s) => s.text).join("");
24
+ }
25
+ /** Every line as plain text. */
26
+ export function toText(lines) {
27
+ return lines.map(plain);
28
+ }
29
+ // --------------------------------------------------------------- inline
30
+ function matchLink(src) {
31
+ if (src[0] !== "[")
32
+ return null;
33
+ let depth = 0;
34
+ let i = 0;
35
+ for (; i < src.length; i++) {
36
+ const c = src[i];
37
+ if (c === "\\") {
38
+ i++;
39
+ continue;
40
+ }
41
+ if (c === "[")
42
+ depth++;
43
+ else if (c === "]") {
44
+ depth--;
45
+ if (depth === 0)
46
+ break;
47
+ }
48
+ }
49
+ if (depth !== 0 || i >= src.length)
50
+ return null;
51
+ const text = src.slice(1, i);
52
+ const rest = src.slice(i + 1);
53
+ const inline = /^\([ \t]*(<[^>]*>|[^()\s]*(?:\([^()]*\)[^()\s]*)*)(?:[ \t]+["'(][^\n]*?["')])?[ \t]*\)/.exec(rest);
54
+ if (inline) {
55
+ const href = (inline[1] ?? "").replace(/^<|>$/g, "");
56
+ return { text, href, length: i + 1 + inline[0].length };
57
+ }
58
+ const ref = /^\[([^\]]*)\]/.exec(rest);
59
+ if (ref)
60
+ return { text, href: ref[1] ?? "", length: i + 1 + ref[0].length };
61
+ return null;
62
+ }
63
+ /**
64
+ * Emphasis closers must not sit against a space, and `_` must not fire inside a
65
+ * word — otherwise every snake_case identifier in a README turns italic.
66
+ */
67
+ function findClose(src, from, marker) {
68
+ let j = from;
69
+ while (j < src.length) {
70
+ const k = src.indexOf(marker, j);
71
+ if (k < 0)
72
+ return -1;
73
+ if (k === from || /\s/.test(src[k - 1] ?? "")) {
74
+ j = k + marker.length;
75
+ continue;
76
+ }
77
+ if (marker[0] === "_" && /[\w]/.test(src[k + marker.length] ?? "")) {
78
+ j = k + marker.length;
79
+ continue;
80
+ }
81
+ return k;
82
+ }
83
+ return -1;
84
+ }
85
+ /**
86
+ * Fold the HTML that real READMEs are full of back into markdown.
87
+ *
88
+ * Inline code is held out of this: `Array<string>` must survive tag stripping.
89
+ */
90
+ export function normalizeHtml(src) {
91
+ return src
92
+ .split(/(`+[^`]*`+)/)
93
+ .map((part, i) => (i % 2 === 1 ? part : stripTags(part)))
94
+ .join("");
95
+ }
96
+ function stripTags(src) {
97
+ return src
98
+ .replace(/<br\s*\/?>/gi, " ")
99
+ .replace(/<img\b[^>]*?alt=["']([^"']*)["'][^>]*>/gi, (_m, alt) => `![${alt}]()`)
100
+ .replace(/<img\b[^>]*?src=["']([^"']*)["'][^>]*>/gi, (_m, href) => `![${href}]()`)
101
+ .replace(/<a\b[^>]*?href=["']([^"']*)["'][^>]*>([\s\S]*?)<\/a>/gi, (_m, href, text) => `[${text}](${href})`)
102
+ .replace(/<(?:code|kbd|tt|samp)>([\s\S]*?)<\/(?:code|kbd|tt|samp)>/gi, (_m, text) => `\`${text}\``)
103
+ .replace(/<(?:strong|b)>([\s\S]*?)<\/(?:strong|b)>/gi, (_m, text) => `**${text}**`)
104
+ .replace(/<(?:em|i)>([\s\S]*?)<\/(?:em|i)>/gi, (_m, text) => `*${text}*`)
105
+ .replace(/<\/?[a-zA-Z][^>]*>/g, "")
106
+ .replace(/&nbsp;/g, " ")
107
+ .replace(/&lt;/g, "<")
108
+ .replace(/&gt;/g, ">")
109
+ .replace(/&quot;/g, '"')
110
+ .replace(/&#3[49];/g, "'")
111
+ .replace(/&amp;/g, "&");
112
+ }
113
+ export function parseInline(src, base = {}) {
114
+ return parseSpans(normalizeHtml(src), base);
115
+ }
116
+ function parseSpans(src, base = {}) {
117
+ const spans = [];
118
+ let buf = "";
119
+ const flush = () => {
120
+ if (buf) {
121
+ spans.push({ ...base, text: buf });
122
+ buf = "";
123
+ }
124
+ };
125
+ let i = 0;
126
+ while (i < src.length) {
127
+ const c = src[i];
128
+ if (c === "\\" && /[\\`*_{}[\]()#+\-.!~>|]/.test(src[i + 1] ?? "")) {
129
+ buf += src[i + 1];
130
+ i += 2;
131
+ continue;
132
+ }
133
+ if (c === "`") {
134
+ const m = /^(`+)([\s\S]*?)\1(?!`)/.exec(src.slice(i));
135
+ if (m?.[2] !== undefined) {
136
+ flush();
137
+ const inner = m[2].trim() === "" ? m[2] : m[2].replace(/^ (.*) $/, "$1");
138
+ spans.push({ ...base, text: inner, role: "code" });
139
+ i += m[0].length;
140
+ continue;
141
+ }
142
+ }
143
+ if (c === "!" && src[i + 1] === "[") {
144
+ const m = matchLink(src.slice(i + 1));
145
+ if (m) {
146
+ flush();
147
+ spans.push({ ...base, text: `🖼 ${m.text || m.href}`, role: "meta" });
148
+ i += 1 + m.length;
149
+ continue;
150
+ }
151
+ }
152
+ if (c === "[") {
153
+ const m = matchLink(src.slice(i));
154
+ if (m) {
155
+ flush();
156
+ spans.push(...parseSpans(m.text, { ...base, role: "link", underline: true }));
157
+ i += m.length;
158
+ continue;
159
+ }
160
+ }
161
+ if (c === "<") {
162
+ const m = /^<((?:https?|mailto):[^>\s]+)>/.exec(src.slice(i));
163
+ if (m?.[1]) {
164
+ flush();
165
+ spans.push({ ...base, text: m[1], role: "url", underline: true });
166
+ i += m[0].length;
167
+ continue;
168
+ }
169
+ }
170
+ if (c === "~" && src.startsWith("~~", i)) {
171
+ const close = src.indexOf("~~", i + 2);
172
+ if (close > i + 2) {
173
+ flush();
174
+ spans.push(...parseSpans(src.slice(i + 2, close), { ...base, dim: true }));
175
+ i = close + 2;
176
+ continue;
177
+ }
178
+ }
179
+ if ((c === "*" || c === "_") && !(c === "_" && /[\w]/.test(src[i - 1] ?? ""))) {
180
+ const strong = src.startsWith(c + c, i);
181
+ const marker = strong ? c + c : c;
182
+ if (!/\s/.test(src[i + marker.length] ?? " ")) {
183
+ const close = findClose(src, i + marker.length, marker);
184
+ if (close > 0) {
185
+ flush();
186
+ const inner = src.slice(i + marker.length, close);
187
+ spans.push(...parseSpans(inner, strong ? { ...base, bold: true } : { ...base, italic: true }));
188
+ i = close + marker.length;
189
+ continue;
190
+ }
191
+ }
192
+ }
193
+ buf += c;
194
+ i++;
195
+ }
196
+ flush();
197
+ return spans.length > 0 ? spans : [{ ...base, text: "" }];
198
+ }
199
+ // ---------------------------------------------------------------- wrap
200
+ /** Greedy word wrap that carries each word's styling with it. */
201
+ export function wrapSpans(spans, width, first = 0, hanging = first) {
202
+ const max = Math.max(1, width);
203
+ const lines = [];
204
+ let indent = first;
205
+ let cur = [];
206
+ let len = 0;
207
+ let filled = false;
208
+ const begin = () => {
209
+ cur = indent > 0 ? [{ text: " ".repeat(indent) }] : [];
210
+ len = indent;
211
+ filled = false;
212
+ };
213
+ const flush = () => {
214
+ lines.push({ spans: cur.length > 0 ? cur : [{ text: "" }] });
215
+ indent = hanging;
216
+ begin();
217
+ };
218
+ begin();
219
+ for (const span of spans) {
220
+ const { text, ...style } = span;
221
+ for (const part of text.split(/(\s+)/)) {
222
+ if (part === "")
223
+ continue;
224
+ if (/^\s+$/.test(part)) {
225
+ if (filled) {
226
+ cur.push({ ...style, text: " " });
227
+ len += 1;
228
+ }
229
+ continue;
230
+ }
231
+ let word = part;
232
+ let w = stringWidth(word);
233
+ if (len + w > max && filled)
234
+ flush();
235
+ // A word longer than the line (a bare URL) is cut rather than lost.
236
+ while (stringWidth(word) > max - len && max - len > 0) {
237
+ const take = Math.max(1, max - len);
238
+ cur.push({ ...style, text: word.slice(0, take) });
239
+ word = word.slice(take);
240
+ filled = true;
241
+ flush();
242
+ w = stringWidth(word);
243
+ }
244
+ if (word) {
245
+ cur.push({ ...style, text: word });
246
+ len += stringWidth(word);
247
+ filled = true;
248
+ }
249
+ }
250
+ }
251
+ if (filled || lines.length === 0)
252
+ flush();
253
+ return lines;
254
+ }
255
+ // --------------------------------------------------------------- blocks
256
+ function rule(width, char, style) {
257
+ return { spans: [{ ...style, text: char.repeat(Math.max(1, width)) }] };
258
+ }
259
+ function splitRow(row) {
260
+ const trimmed = row.trim().replace(/^\|/, "").replace(/\|$/, "");
261
+ const cells = [];
262
+ let buf = "";
263
+ for (let i = 0; i < trimmed.length; i++) {
264
+ const c = trimmed[i];
265
+ if (c === "\\" && trimmed[i + 1] === "|") {
266
+ buf += "|";
267
+ i++;
268
+ continue;
269
+ }
270
+ if (c === "|") {
271
+ cells.push(buf.trim());
272
+ buf = "";
273
+ continue;
274
+ }
275
+ buf += c;
276
+ }
277
+ cells.push(buf.trim());
278
+ return cells;
279
+ }
280
+ function pad(spans, target, align) {
281
+ const used = spans.reduce((n, s) => n + stringWidth(s.text), 0);
282
+ const gap = Math.max(0, target - used);
283
+ if (gap === 0)
284
+ return spans;
285
+ if (align === "right")
286
+ return [{ text: " ".repeat(gap) }, ...spans];
287
+ if (align === "center") {
288
+ const left = Math.floor(gap / 2);
289
+ return [{ text: " ".repeat(left) }, ...spans, { text: " ".repeat(gap - left) }];
290
+ }
291
+ return [...spans, { text: " ".repeat(gap) }];
292
+ }
293
+ function renderTable(rows, aligns, width) {
294
+ const columns = Math.max(...rows.map((r) => r.length));
295
+ const cells = rows.map((row) => Array.from({ length: columns }, (_, i) => parseInline(row[i] ?? "")));
296
+ const widths = Array.from({ length: columns }, (_, i) => Math.max(1, ...cells.map((row) => (row[i] ?? []).reduce((n, s) => n + stringWidth(s.text), 0))));
297
+ // Shrink the widest columns first until the table fits the pane.
298
+ const gap = 2;
299
+ let total = widths.reduce((a, b) => a + b, 0) + gap * (columns - 1);
300
+ while (total > width) {
301
+ const widest = widths.indexOf(Math.max(...widths));
302
+ if ((widths[widest] ?? 0) <= 3)
303
+ break;
304
+ widths[widest] = widths[widest] - 1;
305
+ total--;
306
+ }
307
+ const out = [];
308
+ rows.forEach((_, r) => {
309
+ const spans = [];
310
+ cells[r].forEach((cell, c) => {
311
+ if (c > 0)
312
+ spans.push({ text: " ".repeat(gap) });
313
+ const w = widths[c];
314
+ let used = 0;
315
+ const clipped = [];
316
+ for (const span of cell) {
317
+ if (used >= w)
318
+ break;
319
+ const room = w - used;
320
+ const text = stringWidth(span.text) > room ? span.text.slice(0, Math.max(0, room - 1)) + "…" : span.text;
321
+ clipped.push(r === 0 ? { ...span, role: span.role ?? "th", bold: true } : span);
322
+ used += stringWidth(text);
323
+ clipped[clipped.length - 1] = { ...clipped[clipped.length - 1], text };
324
+ }
325
+ spans.push(...pad(clipped, w, aligns[c] ?? "left"));
326
+ });
327
+ out.push({ spans });
328
+ if (r === 0) {
329
+ const spansRule = [];
330
+ widths.forEach((w, c) => {
331
+ if (c > 0)
332
+ spansRule.push({ text: " ".repeat(gap) });
333
+ spansRule.push({ text: "─".repeat(w), role: "rule" });
334
+ });
335
+ out.push({ spans: spansRule });
336
+ }
337
+ });
338
+ return out;
339
+ }
340
+ /**
341
+ * Render markdown to styled lines already wrapped to `width`.
342
+ *
343
+ * `width` is the pane's interior, so a resize re-renders rather than reflows —
344
+ * cheap, and it keeps tables and code gutters honest.
345
+ */
346
+ export function renderMarkdown(source, width) {
347
+ const w = Math.max(20, Math.floor(width));
348
+ const src = source.replace(/\r\n?/g, "\n").replace(/<!--[\s\S]*?-->/g, "");
349
+ const raw = src.split("\n");
350
+ const out = [];
351
+ const blank = () => {
352
+ if (out.length > 0 && plain(out[out.length - 1]).trim() !== "")
353
+ out.push({ spans: [{ text: "" }] });
354
+ };
355
+ let i = 0;
356
+ // YAML front matter, shown rather than hidden: it is usually the metadata a
357
+ // reader opened the file for.
358
+ if (raw[0] === "---") {
359
+ const end = raw.findIndex((l, n) => n > 0 && (l === "---" || l === "..."));
360
+ if (end > 0) {
361
+ for (const line of raw.slice(1, end)) {
362
+ out.push({ spans: [{ text: "▏ ", role: "gutter" }, { text: line, role: "meta", dim: true }] });
363
+ }
364
+ out.push({ spans: [{ text: "" }] });
365
+ i = end + 1;
366
+ }
367
+ }
368
+ let paragraph = [];
369
+ const flushParagraph = () => {
370
+ if (paragraph.length === 0)
371
+ return;
372
+ const text = paragraph.join(" ").trim();
373
+ paragraph = [];
374
+ if (!text)
375
+ return;
376
+ const spans = parseInline(text);
377
+ // A paragraph that was only an HTML wrapper leaves nothing to show.
378
+ if (spans.every((span) => span.text.trim() === ""))
379
+ return;
380
+ out.push(...wrapSpans(spans, w));
381
+ };
382
+ const isBlockStart = (line) => line.trim() === "" ||
383
+ HR.test(line) ||
384
+ HEADING.test(line) ||
385
+ FENCE.test(line) ||
386
+ QUOTE.test(line) ||
387
+ LIST.test(line) ||
388
+ TABLE_ROW.test(line);
389
+ for (; i < raw.length; i++) {
390
+ const line = raw[i];
391
+ if (line.trim() === "") {
392
+ flushParagraph();
393
+ blank();
394
+ continue;
395
+ }
396
+ // Setext headings close the paragraph they underline.
397
+ if (paragraph.length > 0 && (SETEXT_H1.test(line) || SETEXT_H2.test(line))) {
398
+ const text = paragraph.join(" ").trim();
399
+ paragraph = [];
400
+ const h1 = SETEXT_H1.test(line);
401
+ blank();
402
+ out.push(...wrapSpans(parseInline(text, { role: h1 ? "h1" : "h2", bold: true }), w));
403
+ out.push(rule(h1 ? w : Math.min(w, stringWidth(text)), h1 ? "━" : "─", { role: h1 ? "h1" : "h2", dim: true }));
404
+ out.push({ spans: [{ text: "" }] });
405
+ continue;
406
+ }
407
+ const fence = FENCE.exec(line);
408
+ if (fence) {
409
+ flushParagraph();
410
+ const marker = fence[1][0];
411
+ const lang = fence[2] ?? "";
412
+ const body = [];
413
+ i++;
414
+ for (; i < raw.length; i++) {
415
+ const l = raw[i];
416
+ if (new RegExp(`^ {0,3}${marker === "`" ? "```" : "~~~"}+[ \t]*$`).test(l))
417
+ break;
418
+ body.push(l);
419
+ }
420
+ blank();
421
+ const head = lang ? `┌─ ${lang} ` : "┌─ ";
422
+ out.push({
423
+ spans: [
424
+ { text: "┌─ ", role: "gutter" },
425
+ ...(lang ? [{ text: `${lang} `, role: "lang" }] : []),
426
+ { text: "─".repeat(Math.max(0, w - stringWidth(head))), role: "gutter" },
427
+ ],
428
+ });
429
+ for (const l of body) {
430
+ const text = l.replace(/\t/g, " ");
431
+ out.push({
432
+ spans: [
433
+ { text: "│ ", role: "gutter" },
434
+ { text: stringWidth(text) > w - 2 ? text.slice(0, w - 3) + "…" : text, role: "fence" },
435
+ ],
436
+ });
437
+ }
438
+ out.push({ spans: [{ text: "└" + "─".repeat(Math.max(0, w - 1)), role: "gutter" }] });
439
+ out.push({ spans: [{ text: "" }] });
440
+ continue;
441
+ }
442
+ const heading = HEADING.exec(line);
443
+ if (heading) {
444
+ flushParagraph();
445
+ const level = heading[1].length;
446
+ const text = heading[2];
447
+ const role = level === 1 ? "h1" : level === 2 ? "h2" : "h3";
448
+ blank();
449
+ const prefix = level >= 3 ? [{ text: "▸ ", role, dim: true }] : [];
450
+ out.push(...wrapSpans([...prefix, ...parseInline(text, { role, bold: true })], w));
451
+ if (level === 1)
452
+ out.push(rule(w, "━", { role, dim: true }));
453
+ else if (level === 2)
454
+ out.push(rule(Math.min(w, stringWidth(text) + 2), "─", { role, dim: true }));
455
+ out.push({ spans: [{ text: "" }] });
456
+ continue;
457
+ }
458
+ if (HR.test(line)) {
459
+ flushParagraph();
460
+ blank();
461
+ out.push(rule(w, "─", { role: "rule" }));
462
+ out.push({ spans: [{ text: "" }] });
463
+ continue;
464
+ }
465
+ if (QUOTE.test(line)) {
466
+ flushParagraph();
467
+ const body = [];
468
+ for (; i < raw.length; i++) {
469
+ const m = QUOTE.exec(raw[i]);
470
+ if (m)
471
+ body.push(m[1] ?? "");
472
+ else if (raw[i].trim() !== "" && body.length > 0)
473
+ body.push(raw[i]);
474
+ else
475
+ break;
476
+ }
477
+ i--;
478
+ blank();
479
+ for (const inner of renderMarkdown(body.join("\n"), w - 2)) {
480
+ out.push({ spans: [{ text: "▌ ", role: "quote" }, ...inner.spans.map((s) => ({ dim: true, ...s }))] });
481
+ }
482
+ out.push({ spans: [{ text: "" }] });
483
+ continue;
484
+ }
485
+ const list = LIST.exec(line);
486
+ if (list) {
487
+ flushParagraph();
488
+ const lead = list[1].replace(/\t/g, " ");
489
+ const depth = Math.min(3, Math.floor(lead.length / 2));
490
+ const marker = list[2];
491
+ let rest = list[4];
492
+ // Lazy continuation: fold following plain lines into this item.
493
+ const parts = [rest];
494
+ while (i + 1 < raw.length && !isBlockStart(raw[i + 1])) {
495
+ parts.push(raw[i + 1].trim());
496
+ i++;
497
+ }
498
+ rest = parts.join(" ");
499
+ const task = TASK.exec(rest);
500
+ let checked = false;
501
+ if (task) {
502
+ checked = task[1].toLowerCase() === "x";
503
+ rest = rest.slice(task[0].length);
504
+ }
505
+ const ordered = /\d/.test(marker);
506
+ const glyph = task ? (checked ? "☑" : "☐") : ordered ? marker : BULLETS[depth];
507
+ const indent = depth * 2;
508
+ const bullet = { text: `${glyph} `, role: "bullet", bold: ordered };
509
+ const body = parseInline(rest, checked ? { dim: true } : {});
510
+ const lines = wrapSpans([bullet, ...body], w, indent, indent + stringWidth(glyph) + 1);
511
+ out.push(...lines);
512
+ continue;
513
+ }
514
+ if (TABLE_ROW.test(line) && TABLE_RULE.test(raw[i + 1] ?? "")) {
515
+ flushParagraph();
516
+ const header = splitRow(line);
517
+ const aligns = splitRow(raw[i + 1]).map((cell) => {
518
+ const left = cell.startsWith(":");
519
+ const right = cell.endsWith(":");
520
+ return left && right ? "center" : right ? "right" : "left";
521
+ });
522
+ const rows = [header];
523
+ i += 2;
524
+ for (; i < raw.length && TABLE_ROW.test(raw[i]); i++)
525
+ rows.push(splitRow(raw[i]));
526
+ i--;
527
+ blank();
528
+ out.push(...renderTable(rows, aligns, w));
529
+ out.push({ spans: [{ text: "" }] });
530
+ continue;
531
+ }
532
+ // Indented code, but only where a fresh block can start.
533
+ const indented = INDENTED_CODE.exec(line);
534
+ if (indented && paragraph.length === 0) {
535
+ const body = [];
536
+ for (; i < raw.length; i++) {
537
+ const l = raw[i];
538
+ const m = INDENTED_CODE.exec(l);
539
+ if (m)
540
+ body.push(m[1]);
541
+ else if (l.trim() === "")
542
+ body.push("");
543
+ else
544
+ break;
545
+ }
546
+ i--;
547
+ while (body.length > 0 && body[body.length - 1].trim() === "")
548
+ body.pop();
549
+ blank();
550
+ for (const l of body) {
551
+ out.push({
552
+ spans: [
553
+ { text: "│ ", role: "gutter" },
554
+ { text: stringWidth(l) > w - 2 ? l.slice(0, w - 3) + "…" : l, role: "fence" },
555
+ ],
556
+ });
557
+ }
558
+ out.push({ spans: [{ text: "" }] });
559
+ continue;
560
+ }
561
+ paragraph.push(line.trim());
562
+ }
563
+ flushParagraph();
564
+ while (out.length > 0 && plain(out[out.length - 1]).trim() === "")
565
+ out.pop();
566
+ return out;
567
+ }
568
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
package/dist/tree.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ export interface Entry {
2
+ name: string;
3
+ path: string;
4
+ dir: boolean;
5
+ children: Entry[];
6
+ expanded: boolean;
7
+ }
8
+ export interface FlatEntry {
9
+ entry: Entry;
10
+ depth: number;
11
+ /** Index of the parent in the same flattened array, or -1 at the top level. */
12
+ parent: number;
13
+ }
14
+ export interface ScanOptions {
15
+ /** Descend into dot-directories and show dotfiles. Default false. */
16
+ all?: boolean;
17
+ /** Directory names never descended into. */
18
+ ignore?: string[];
19
+ /** Depth cap, counted from the root. Default 12. */
20
+ maxDepth?: number;
21
+ /** Stop after this many entries, so a huge tree cannot hang the UI. */
22
+ maxEntries?: number;
23
+ }
24
+ export declare const MARKDOWN: RegExp;
25
+ export declare const DEFAULT_IGNORE: string[];
26
+ export declare function scan(root: string, options?: ScanOptions): Entry[];
27
+ /**
28
+ * Depth-first order of what is currently visible. Matches HQTUI's own tree
29
+ * flattening, so a selected index means the same thing to both.
30
+ */
31
+ export declare function flatten(entries: Entry[], depth?: number, parent?: number, out?: FlatEntry[]): FlatEntry[];
32
+ /** Every markdown file in the tree, in display order. */
33
+ export declare function files(entries: Entry[], out?: Entry[]): Entry[];
34
+ /**
35
+ * A copy of the tree keeping only files whose path matches `query`, with every
36
+ * surviving directory expanded. Matching is a case-insensitive subsequence, so
37
+ * "gsg" finds "getting-started-guide.md".
38
+ */
39
+ export declare function filterTree(entries: Entry[], query: string, root: string): Entry[];
40
+ /** Case-insensitive subsequence match, with a substring hit always winning. */
41
+ export declare function matches(haystack: string, needle: string): boolean;
42
+ /** Expand every directory on the way to `path`, so a file can be revealed. */
43
+ export declare function reveal(entries: Entry[], path: string): boolean;
44
+ /** Index of `path` in the flattened list, or -1. */
45
+ export declare function indexOfPath(flat: FlatEntry[], path: string): number;
46
+ /** A short label for the header: the path relative to the root. */
47
+ export declare function label(root: string, path: string): string;
48
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,QAAsC,CAAC;AAE5D,eAAO,MAAM,cAAc,UAmB1B,CAAC;AAaF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,KAAK,EAAE,CAuCrE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,SAAI,EAAE,MAAM,SAAK,EAAE,GAAG,GAAE,SAAS,EAAO,GAAG,SAAS,EAAE,CAOpG;AAED,yDAAyD;AACzD,wBAAgB,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,GAAE,KAAK,EAAO,GAAG,KAAK,EAAE,CAMlE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAgBjF;AAED,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWjE;AAED,8EAA8E;AAC9E,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAS9D;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,mEAAmE;AACnE,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD"}