@p-buddy/parkdown 0.0.24 → 0.0.25
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/cli.js +1 -1
- package/dist/index.js +167 -167
- package/dist/index.umd.cjs +14 -14
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Command as r } from "@commander-js/extra-typings";
|
|
3
3
|
import { populateMarkdownInclusions as l, depopulateMarkdownInclusions as a } from "@p-buddy/parkdown";
|
|
4
4
|
import f from "chokidar";
|
|
5
|
-
const c = "0.0.
|
|
5
|
+
const c = "0.0.25", p = new r().version(c).option("--nw, --no-write", "Do NOT write result to file (defaults to false)", !1).option("--ni, --no-inclusions", "Do NOT process file inclusions (defaults to false)", !1).option("-d, --depopulate", "Remove populated inclusions from the file", !1).option("-f, --file <flag>", "The file(s) to process", (e, o) => (o.push(e), o), new Array()).option("-w, --watch", "Watch the file(s) for changes and update automatically", !1).parse(), { inclusions: u, depopulate: d, file: t, write: n, watch: h } = p.opts();
|
|
6
6
|
t.length === 0 && t.push("README.md");
|
|
7
7
|
const m = [
|
|
8
8
|
[l, !u],
|
package/dist/index.js
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var k = (e, t, n) =>
|
|
4
|
-
import { writeFileSync as
|
|
5
|
-
import { basename as
|
|
6
|
-
import { URLSearchParams as
|
|
7
|
-
import { unified as
|
|
8
|
-
import
|
|
9
|
-
import { visit as
|
|
10
|
-
import { dedent as
|
|
1
|
+
var be = Object.defineProperty;
|
|
2
|
+
var ye = (e, t, n) => t in e ? be(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
|
|
3
|
+
var k = (e, t, n) => ye(e, typeof t != "symbol" ? t + "" : t, n);
|
|
4
|
+
import { writeFileSync as ie, readFileSync as Ce } from "node:fs";
|
|
5
|
+
import { basename as Ee, dirname as Q, join as O, resolve as le } from "node:path";
|
|
6
|
+
import { URLSearchParams as Se } from "node:url";
|
|
7
|
+
import { unified as xe } from "unified";
|
|
8
|
+
import ke from "remark-parse";
|
|
9
|
+
import { visit as _e } from "unist-util-visit";
|
|
10
|
+
import { dedent as Ne } from "ts-dedent";
|
|
11
11
|
const f = (e, t) => e.position.start.offset - t.position.start.offset;
|
|
12
12
|
f.reverse = (e, t) => f(t, e);
|
|
13
|
-
const
|
|
14
|
-
md: (e) =>
|
|
13
|
+
const G = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, Me = xe().use(ke), z = {
|
|
14
|
+
md: (e) => Me.parse(e)
|
|
15
15
|
}, R = (e, t) => {
|
|
16
16
|
const n = [];
|
|
17
|
-
return
|
|
17
|
+
return _e(e, (s, r, o) => {
|
|
18
18
|
if (s.type !== "root") {
|
|
19
19
|
if (t && s.type !== t) return;
|
|
20
|
-
if (
|
|
20
|
+
if (G(s)) {
|
|
21
21
|
const i = ((o == null ? void 0 : o.children.length) ?? 0) - 1;
|
|
22
22
|
n.push({ ...s, siblingIndex: r, siblingCount: i });
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
}), n;
|
|
26
|
-
},
|
|
26
|
+
}, Ae = (e) => e.children.length === 0, ae = (e, t, ...n) => {
|
|
27
27
|
if (n.length === 0) throw new Error("No nodes to replace content from");
|
|
28
28
|
n.sort(f);
|
|
29
29
|
const s = n.at(0), r = n.at(-1);
|
|
30
30
|
return e.slice(0, s.position.start.offset) + t + e.slice(r.position.end.offset);
|
|
31
|
-
},
|
|
31
|
+
}, Oe = (e, t, n) => {
|
|
32
32
|
const s = Math.min(t.position.end.offset, n.position.end.offset), r = Math.max(t.position.start.offset, n.position.start.offset);
|
|
33
33
|
return e.slice(s, r);
|
|
34
|
-
}, A = (...e) => e.join(" "),
|
|
35
|
-
`),
|
|
34
|
+
}, A = (...e) => e.join(" "), Re = (...e) => e.join(`
|
|
35
|
+
`), Te = (e) => {
|
|
36
36
|
const t = e.split("?");
|
|
37
37
|
return t.length > 1 ? [t.slice(0, -1).join("?"), t.at(-1)] : [e, ""];
|
|
38
|
-
},
|
|
38
|
+
}, Ie = (e) => Te(e)[0], J = /,\s*(?![^()]*\))/, Z = {
|
|
39
39
|
reserved: {
|
|
40
40
|
semi: ";",
|
|
41
41
|
slash: "/",
|
|
@@ -63,7 +63,7 @@ const Q = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
|
|
|
63
63
|
line: `
|
|
64
64
|
`
|
|
65
65
|
}
|
|
66
|
-
},
|
|
66
|
+
}, Pe = "-", K = {
|
|
67
67
|
static: [
|
|
68
68
|
["'''", '"'],
|
|
69
69
|
["''", "'"],
|
|
@@ -71,24 +71,24 @@ const Q = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
|
|
|
71
71
|
[/p↓:\s+/g, ""]
|
|
72
72
|
],
|
|
73
73
|
url: [
|
|
74
|
-
...Object.entries(
|
|
75
|
-
...Object.entries(
|
|
74
|
+
...Object.entries(Z.unsafe),
|
|
75
|
+
...Object.entries(Z.reserved)
|
|
76
76
|
]
|
|
77
|
-
},
|
|
78
|
-
const n =
|
|
79
|
-
return
|
|
80
|
-
},
|
|
81
|
-
const t = e.match(
|
|
77
|
+
}, Y = (e, [t, n]) => e.replaceAll(t, n), I = (e, t = Pe) => {
|
|
78
|
+
const n = K.static.reduce(Y, e);
|
|
79
|
+
return K.url.map(([s, r]) => [t + s + t, r]).reduce(Y, n).replaceAll(t, " ");
|
|
80
|
+
}, We = ["string", "number", "boolean"], je = (e) => We.includes(e), De = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, Le = (e) => {
|
|
81
|
+
const t = e.match(De);
|
|
82
82
|
if (!t) throw new Error(`Invalid invocation: ${e}`);
|
|
83
83
|
const [, n, s = ""] = t;
|
|
84
84
|
if (!s.trim()) return { name: n, parameters: [] };
|
|
85
|
-
const r =
|
|
85
|
+
const r = qe(s);
|
|
86
86
|
return { name: n, parameters: r };
|
|
87
|
-
},
|
|
87
|
+
}, Ue = (e, t) => {
|
|
88
88
|
for (let n = t + 1; n < e.length; n++)
|
|
89
89
|
if (e[n] !== void 0) return !1;
|
|
90
90
|
return !0;
|
|
91
|
-
},
|
|
91
|
+
}, qe = (e) => {
|
|
92
92
|
const t = [];
|
|
93
93
|
let n = "", s = !1;
|
|
94
94
|
for (let r = 0; r < e.length; r++) {
|
|
@@ -98,11 +98,11 @@ const Q = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
|
|
|
98
98
|
s = !s, n += l ? "'''" : "''", r += l ? 2 : 1;
|
|
99
99
|
} else i ? (s = !s, n += o) : o === "," && !s ? (t.push(n.trim()), n = "") : n += o;
|
|
100
100
|
}
|
|
101
|
-
return t.push(n.trim()), t.map((r) => r === "" ? void 0 : r ?
|
|
102
|
-
},
|
|
101
|
+
return t.push(n.trim()), t.map((r) => r === "" ? void 0 : r ? Be(r) : void 0).filter((r, o, i) => r !== void 0 || !Ue(i, o));
|
|
102
|
+
}, Be = (e) => {
|
|
103
103
|
const t = e.length >= 2 && e[0] === "'" && e.at(-1) === "'", n = t && e.length >= 4 && e[1] === "'" && e.at(-2) === "'";
|
|
104
104
|
return !t || n ? e : e.slice(1, -1);
|
|
105
|
-
},
|
|
105
|
+
}, Fe = (e) => {
|
|
106
106
|
const t = /^(\w+)(?:\(([^)]*)\))?/, n = e.match(t);
|
|
107
107
|
if (!n) return { name: e };
|
|
108
108
|
const [, s, r] = n;
|
|
@@ -116,12 +116,12 @@ const Q = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
|
|
|
116
116
|
}
|
|
117
117
|
return { name: s, parameters: i };
|
|
118
118
|
}, N = (e) => {
|
|
119
|
-
const t = e.map(
|
|
119
|
+
const t = e.map(Fe).reduce(
|
|
120
120
|
(n, { name: s, parameters: r }) => n.set(s, r),
|
|
121
121
|
/* @__PURE__ */ new Map()
|
|
122
122
|
);
|
|
123
123
|
return (n) => {
|
|
124
|
-
const { name: s, parameters: r } =
|
|
124
|
+
const { name: s, parameters: r } = Le(n);
|
|
125
125
|
if (!t.has(s))
|
|
126
126
|
throw new Error(`Unknown method: ${s}`);
|
|
127
127
|
const o = t.get(s);
|
|
@@ -151,7 +151,7 @@ const Q = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
|
|
|
151
151
|
return i;
|
|
152
152
|
}, { name: s });
|
|
153
153
|
};
|
|
154
|
-
},
|
|
154
|
+
}, F = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), He = [
|
|
155
155
|
/**
|
|
156
156
|
* Wraps the content in a markdown-formatted code block.
|
|
157
157
|
* @param lang The language of the code block (defaults to the file extension).
|
|
@@ -181,23 +181,23 @@ const Q = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
|
|
|
181
181
|
* @example [](<url>?wrap=dropdown(hello_world,,_))
|
|
182
182
|
*/
|
|
183
183
|
"dropdown(summary: string, open?: boolean, space?: string)"
|
|
184
|
-
],
|
|
184
|
+
], Qe = N(He), E = (e, t = 1) => `
|
|
185
185
|
`.repeat(t) + e + `
|
|
186
|
-
`.repeat(t),
|
|
187
|
-
const s =
|
|
186
|
+
`.repeat(t), B = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${E(e)}</${t}>`, ee = (e, t, n) => {
|
|
187
|
+
const s = Qe(t);
|
|
188
188
|
switch (s.name) {
|
|
189
189
|
case "code":
|
|
190
190
|
if (!s.lang && !s.meta && (n == null ? void 0 : n.inline) && !e.includes(`
|
|
191
191
|
`)) return `\`${e}\``;
|
|
192
192
|
const o = s.lang ?? (n == null ? void 0 : n.extension) ?? "", i = s.meta ? ` ${s.meta}` : "";
|
|
193
|
-
return
|
|
193
|
+
return E(`\`\`\`${o}${i}${E(e)}\`\`\``);
|
|
194
194
|
case "quote":
|
|
195
195
|
return n != null && n.inline && !e.includes(`
|
|
196
196
|
|
|
197
|
-
`) ? `> ${e}` :
|
|
197
|
+
`) ? `> ${e}` : E(B(E(e), "blockquote"));
|
|
198
198
|
case "dropdown":
|
|
199
|
-
const l =
|
|
200
|
-
return
|
|
199
|
+
const l = B(I(s.summary), "summary");
|
|
200
|
+
return E(B([l, e].join(`
|
|
201
201
|
`), "details", s.open ? "open" : void 0));
|
|
202
202
|
}
|
|
203
203
|
};
|
|
@@ -279,24 +279,24 @@ const P = (e) => {
|
|
|
279
279
|
const t = /(\/\/[^\n]*|\/\*[\s\S]*?\*\/|<!--[\s\S]*?-->)/gm, n = [];
|
|
280
280
|
let s;
|
|
281
281
|
for (; (s = t.exec(e)) !== null; ) {
|
|
282
|
-
const r = [s.index, s.index + s[0].length], o =
|
|
282
|
+
const r = [s.index, s.index + s[0].length], o = Ge(s[0]).trim();
|
|
283
283
|
n.push({ range: r, value: o });
|
|
284
284
|
}
|
|
285
285
|
return n;
|
|
286
|
-
},
|
|
286
|
+
}, Ge = (e) => e.startsWith("//") ? e.slice(2) : e.startsWith("/*") ? e.slice(2, -2) : e.startsWith("<!--") ? e.slice(4, -3) : e, ze = [
|
|
287
287
|
"p↓:",
|
|
288
288
|
"pd:",
|
|
289
289
|
"parkdown:"
|
|
290
|
-
],
|
|
290
|
+
], Xe = [
|
|
291
291
|
"splice(delete?: number, insert?: string)"
|
|
292
292
|
];
|
|
293
|
-
N(
|
|
294
|
-
const
|
|
293
|
+
N(Xe);
|
|
294
|
+
const ce = (e, t) => e.range[0] - t.range[0], X = (e, t, n) => (n ?? P(e)).filter(({ value: s }) => s.split(" ").includes(t)).sort(ce), te = (e) => ({
|
|
295
295
|
isSpace: e === " ",
|
|
296
296
|
isNewline: e === `
|
|
297
297
|
` || e === void 0
|
|
298
|
-
}),
|
|
299
|
-
const o = (
|
|
298
|
+
}), ne = (e) => ze.flatMap((t) => X(e, t)).sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, s], value: r }) => {
|
|
299
|
+
const o = (b, y) => t.slice(0, b) + t.slice(y), i = te(t[n - 1]), l = te(t[s]), a = s === t.length;
|
|
300
300
|
let c = n;
|
|
301
301
|
for (; c > 0 && t[c - 1] !== `
|
|
302
302
|
`; ) c--;
|
|
@@ -305,7 +305,7 @@ const ae = (e, t) => e.range[0] - t.range[0], z = (e, t, n) => (n ?? P(e)).filte
|
|
|
305
305
|
`; ) u++;
|
|
306
306
|
const p = t.slice(c, n).trim() === "" && t.slice(s, u).trim() === "";
|
|
307
307
|
return i.isNewline && l.isNewline ? o(n - (a ? 1 : 0), s + 1) : i.isNewline || p ? o(c, s + (l.isSpace || l.isNewline ? 1 : 0)) : o(n - (i.isSpace ? 1 : 0), s);
|
|
308
|
-
}, e),
|
|
308
|
+
}, e), Ve = [
|
|
309
309
|
/**
|
|
310
310
|
* Extract regions from the retrieved content between comments that INCLUDE the specified ids.
|
|
311
311
|
* @param id The id of the comment to extract.
|
|
@@ -410,67 +410,67 @@ const ae = (e, t) => e.range[0] - t.range[0], z = (e, t, n) => (n ?? P(e)).filte
|
|
|
410
410
|
* Helpful when trying to determine fine-grained edits (e.g. trimming, splicing, etc.).
|
|
411
411
|
*/
|
|
412
412
|
"debug()"
|
|
413
|
-
],
|
|
414
|
-
const s =
|
|
413
|
+
], Je = N(Ve), $ = (e, t, n) => {
|
|
414
|
+
const s = X(e, t, n), r = [];
|
|
415
415
|
for (let o = 0; o < s.length - 1; o += 2)
|
|
416
416
|
r.push([s[o], s[o + 1]]);
|
|
417
417
|
return r;
|
|
418
|
-
},
|
|
418
|
+
}, Ze = (e, t, n) => new d(...X(e, t, n).map(({ range: s }) => s)), W = (e) => Ne(e).trim(), Ke = (e, ...t) => {
|
|
419
419
|
if (t.length === 0) return e;
|
|
420
420
|
const n = P(e), s = new d(), r = new d();
|
|
421
421
|
for (const o of t)
|
|
422
|
-
for (const [i, l] of
|
|
422
|
+
for (const [i, l] of $(e, o, n)) {
|
|
423
423
|
s.push(i.range[1], l.range[0]);
|
|
424
424
|
const [a, ...c] = e.slice(i.range[1], l.range[0]), u = c[c.length - 1];
|
|
425
425
|
r.push(i.range[0], i.range[1] + (a.trim() ? 0 : 1)), r.push(l.range[0], l.range[1] + (u.trim() ? 0 : 1));
|
|
426
426
|
}
|
|
427
|
-
return
|
|
428
|
-
},
|
|
427
|
+
return W(s.subtract(r).slice(e));
|
|
428
|
+
}, Ye = (e, ...t) => {
|
|
429
429
|
if (t.length === 0) return e;
|
|
430
430
|
const n = P(e), s = ([o, i]) => e.slice(o, i), r = new d();
|
|
431
431
|
for (const o of t)
|
|
432
|
-
for (const [i, l] of
|
|
432
|
+
for (const [i, l] of $(e, o, n)) {
|
|
433
433
|
const a = s([l.range[1], l.range[1] + 1]).at(-1);
|
|
434
434
|
r.push(i.range[0], a === `
|
|
435
435
|
` ? l.range[1] + 1 : l.range[1]);
|
|
436
436
|
}
|
|
437
|
-
return
|
|
438
|
-
},
|
|
437
|
+
return W(new d([0, e.length]).subtract(r).slice(e));
|
|
438
|
+
}, et = (e, t, n, s) => {
|
|
439
439
|
if (!t) return e;
|
|
440
440
|
let r = "", o = 0;
|
|
441
|
-
for (const [i, l] of
|
|
441
|
+
for (const [i, l] of $(e, t))
|
|
442
442
|
r += e.slice(o, i.range[1]), r += I(n ?? i.value, s), o = l.range[0];
|
|
443
|
-
return r += e.slice(o),
|
|
444
|
-
new d([0, r.length]).subtract(
|
|
443
|
+
return r += e.slice(o), W(
|
|
444
|
+
new d([0, r.length]).subtract(Ze(r, t)).slice(r)
|
|
445
445
|
);
|
|
446
|
-
},
|
|
446
|
+
}, tt = (e, t, n, s, r, o) => {
|
|
447
447
|
if (!t) return e;
|
|
448
448
|
const i = !(s === void 0 || s < 0), l = r ? I(r, o) : "", a = s ?? 0, c = P(e), u = new d(...c.map(({ range: p }) => p));
|
|
449
|
-
return
|
|
450
|
-
const
|
|
451
|
-
let
|
|
452
|
-
for (;
|
|
453
|
-
u.test(m) || (
|
|
454
|
-
return m = Math.min(Math.max(0, m), p.length), p = p.slice(0, m) + l + p.slice(m), new d([0, p.length]).subtract(
|
|
449
|
+
return $(e, t, c).map((p) => p[n === "start" ? 0 : 1]).sort(ce).reverse().reduce((p, { range: b }) => {
|
|
450
|
+
const y = new d(), M = i ? 1 : -1;
|
|
451
|
+
let S = Math.abs(a), m = i ? b[1] : b[0];
|
|
452
|
+
for (; S > 0 && m < p.length && m >= 0; )
|
|
453
|
+
u.test(m) || (y.push(m), S--), m += M;
|
|
454
|
+
return m = Math.min(Math.max(0, m), p.length), p = p.slice(0, m) + l + p.slice(m), new d([0, p.length]).subtract(y.offset(i ? 0 : l.length)).slice(p);
|
|
455
455
|
}, e);
|
|
456
|
-
},
|
|
456
|
+
}, nt = (e, t, n, s, r) => {
|
|
457
457
|
let o = "", i = 0;
|
|
458
458
|
[n, s] = [n, s ?? ""].map((a) => I(a, r));
|
|
459
|
-
const l = t ?
|
|
459
|
+
const l = t ? $(e, t) : [[{ range: [0, 0] }, { range: [e.length, e.length] }]];
|
|
460
460
|
for (const [a, c] of l)
|
|
461
461
|
o += e.slice(i, a.range[1]), o += e.slice(a.range[1], c.range[0]).replaceAll(n, s), i = c.range[0];
|
|
462
462
|
return o += e.slice(i), o;
|
|
463
|
-
},
|
|
463
|
+
}, st = (e, t) => {
|
|
464
464
|
if (!t) return e;
|
|
465
465
|
let n = "", s = 0;
|
|
466
|
-
for (const [r, o] of
|
|
466
|
+
for (const [r, o] of $(e, t))
|
|
467
467
|
n += e.slice(s, r.range[1]), n += e.slice(r.range[1], o.range[0]).replaceAll(/[\s\n]+/g, " "), s = o.range[0];
|
|
468
468
|
return n += e.slice(s), n;
|
|
469
|
-
},
|
|
469
|
+
}, se = (e, t, n) => {
|
|
470
470
|
var o, i, l, a;
|
|
471
471
|
if (!t) return e;
|
|
472
472
|
const s = (c) => /\s/.test(e[c]), r = new d();
|
|
473
|
-
for (const [c, u] of
|
|
473
|
+
for (const [c, u] of $(e, t)) {
|
|
474
474
|
if ((o = n.start) != null && o.left) {
|
|
475
475
|
let p = c.range[0] - 1;
|
|
476
476
|
for (; s(p); ) r.push(p--);
|
|
@@ -489,51 +489,51 @@ const ae = (e, t) => e.range[0] - t.range[0], z = (e, t, n) => (n ?? P(e)).filte
|
|
|
489
489
|
}
|
|
490
490
|
}
|
|
491
491
|
return new d([0, e.length]).subtract(r).slice(e);
|
|
492
|
-
},
|
|
493
|
-
if (!t) return
|
|
494
|
-
const s =
|
|
492
|
+
}, rt = (e, t, n) => {
|
|
493
|
+
if (!t) return ne(e);
|
|
494
|
+
const s = Je(t);
|
|
495
495
|
switch (s.name) {
|
|
496
496
|
case "extract":
|
|
497
|
-
e =
|
|
497
|
+
e = Ke(e, s.id, ...F(s));
|
|
498
498
|
break;
|
|
499
499
|
case "remove":
|
|
500
|
-
e =
|
|
500
|
+
e = Ye(e, s.id, ...F(s));
|
|
501
501
|
break;
|
|
502
502
|
case "replace":
|
|
503
|
-
e =
|
|
503
|
+
e = et(e, s.id, s.with, s.space);
|
|
504
504
|
break;
|
|
505
505
|
case "splice-start":
|
|
506
506
|
case "splice-end": {
|
|
507
507
|
const { deleteCount: r, insert: o, space: i, id: l } = s, a = s.name === "splice-start" ? "start" : "end";
|
|
508
|
-
e =
|
|
508
|
+
e = tt(e, l, a, r, o, i);
|
|
509
509
|
break;
|
|
510
510
|
}
|
|
511
511
|
case "trim-start":
|
|
512
512
|
case "trim-end": {
|
|
513
513
|
const { left: r, right: o, id: i } = s, l = s.name === "trim-start" ? "start" : "end";
|
|
514
|
-
e =
|
|
514
|
+
e = se(e, i, { [l]: { left: r ?? !0, right: o ?? !0 } });
|
|
515
515
|
break;
|
|
516
516
|
}
|
|
517
517
|
case "trim": {
|
|
518
518
|
const { inside: r, outside: o, id: i } = s;
|
|
519
|
-
e =
|
|
519
|
+
e = se(e, i, { start: { left: o ?? !0, right: r ?? !0 }, end: { left: r ?? !0, right: o ?? !0 } });
|
|
520
520
|
break;
|
|
521
521
|
}
|
|
522
522
|
case "single-line":
|
|
523
|
-
e =
|
|
523
|
+
e = st(e, s.id);
|
|
524
524
|
break;
|
|
525
525
|
case "remap":
|
|
526
|
-
e =
|
|
526
|
+
e = nt(e, s.id, s.from, s.to, s.space);
|
|
527
527
|
break;
|
|
528
528
|
}
|
|
529
|
-
return e = n && s.name !== "debug" ?
|
|
530
|
-
},
|
|
529
|
+
return e = n && s.name !== "debug" ? ne(e) : e, n ? W(e) : e;
|
|
530
|
+
}, ot = [
|
|
531
531
|
"recipe(id: string)"
|
|
532
|
-
],
|
|
532
|
+
], it = [
|
|
533
533
|
"recipe(id: string, 0?: string, 1?: string, 2?: string)"
|
|
534
|
-
],
|
|
535
|
-
register: N(
|
|
536
|
-
apply: N(
|
|
534
|
+
], re = {
|
|
535
|
+
register: N(ot),
|
|
536
|
+
apply: N(it)
|
|
537
537
|
}, _ = class _ {
|
|
538
538
|
constructor() {
|
|
539
539
|
k(this, "recipes", /* @__PURE__ */ new Map());
|
|
@@ -543,7 +543,7 @@ const ae = (e, t) => e.range[0] - t.range[0], z = (e, t, n) => (n ?? P(e)).filte
|
|
|
543
543
|
for (let s = 0; s < n.length; s++) {
|
|
544
544
|
const [r, o] = n[s];
|
|
545
545
|
if (r !== "register") continue;
|
|
546
|
-
const i =
|
|
546
|
+
const i = re.register(o);
|
|
547
547
|
switch (i.name) {
|
|
548
548
|
case "recipe":
|
|
549
549
|
const l = n.slice(s + 1).filter(([a]) => a !== "register").map(([a, c]) => `${a}=${c}`).join("&");
|
|
@@ -562,10 +562,10 @@ const ae = (e, t) => e.range[0] - t.range[0], z = (e, t, n) => (n ?? P(e)).filte
|
|
|
562
562
|
s.push(`${o}=${i}`);
|
|
563
563
|
continue;
|
|
564
564
|
}
|
|
565
|
-
const l =
|
|
565
|
+
const l = re.apply(i);
|
|
566
566
|
switch (l.name) {
|
|
567
567
|
case "recipe":
|
|
568
|
-
s.push(this.recipes.get(l.id)), s.push(...
|
|
568
|
+
s.push(this.recipes.get(l.id)), s.push(...F(l).map((a) => this.recipes.get(a)));
|
|
569
569
|
break;
|
|
570
570
|
default:
|
|
571
571
|
throw new Error(`Unknown registration: ${l.name}`);
|
|
@@ -575,8 +575,8 @@ const ae = (e, t) => e.range[0] - t.range[0], z = (e, t, n) => (n ?? P(e)).filte
|
|
|
575
575
|
}
|
|
576
576
|
};
|
|
577
577
|
k(_, "Entries", (t) => Array.from(new URLSearchParams(t).entries()));
|
|
578
|
-
let
|
|
579
|
-
const
|
|
578
|
+
let H = _;
|
|
579
|
+
const lt = ["http", "./", "../", "?"], at = ({ url: e }) => lt.some((t) => e.startsWith(t)), ct = (e) => G(e) && Ae(e) && at(e), pe = ({ url: e }, t) => `[](${t ? O(t, e) : e})`, g = {
|
|
580
580
|
_open: "<!--",
|
|
581
581
|
_close: "-->",
|
|
582
582
|
_flag: "p↓",
|
|
@@ -591,13 +591,13 @@ const it = ["http", "./", "../", "?"], lt = ({ url: e }) => it.some((t) => e.sta
|
|
|
591
591
|
`).length}`, n = `chars: ${e.length}`;
|
|
592
592
|
return A(g._open, g._flag, "length", t, n, g._close);
|
|
593
593
|
}
|
|
594
|
-
},
|
|
595
|
-
|
|
594
|
+
}, oe = (e) => (t) => G(t) && t.value === g[e], pt = ({ position: e, url: t, siblingCount: n }, s) => ({ position: e, url: t, headingDepth: s, inline: n >= 1 }), ut = ({ position: { start: e }, url: t, siblingCount: n }, { position: { end: s } }, r) => ({ position: { start: e, end: s }, url: t, headingDepth: r, inline: n >= 1 }), mt = (e, t, n) => (e.inline ? A : Re)(
|
|
595
|
+
pe(e, n),
|
|
596
596
|
g.begin,
|
|
597
597
|
g.lengthOf(t),
|
|
598
598
|
t,
|
|
599
599
|
g.end
|
|
600
|
-
),
|
|
600
|
+
), gt = (e) => {
|
|
601
601
|
const t = R(e, "heading").reduce((n, { position: s, depth: r }) => n.set(s.start.line, r), /* @__PURE__ */ new Map());
|
|
602
602
|
return (n) => {
|
|
603
603
|
for (let s = n.position.start.line; s >= 1; s--) {
|
|
@@ -610,7 +610,7 @@ const it = ["http", "./", "../", "?"], lt = ({ url: e }) => it.some((t) => e.sta
|
|
|
610
610
|
openingCommentDoesNotFollowLink: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) does not follow link`),
|
|
611
611
|
closingCommentNotMatchedToOpening: ({ position: { start: e } }) => new Error(`Closing comment (@${e.line}:${e.column}) does not match to opening comment`),
|
|
612
612
|
openingCommentNotClosed: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) is not followed by a closing comment`)
|
|
613
|
-
},
|
|
613
|
+
}, ht = (e, t) => {
|
|
614
614
|
const n = [], s = [
|
|
615
615
|
...e.map((o) => ({ node: o, type: "open" })),
|
|
616
616
|
...t.map((o) => ({ node: o, type: "close" }))
|
|
@@ -628,13 +628,13 @@ const it = ["http", "./", "../", "?"], lt = ({ url: e }) => it.some((t) => e.sta
|
|
|
628
628
|
if (r.length > 0)
|
|
629
629
|
throw T.openingCommentNotClosed(r[0].node);
|
|
630
630
|
return n;
|
|
631
|
-
},
|
|
631
|
+
}, dt = (e, t, n) => {
|
|
632
632
|
const s = [...t].sort(f), r = [];
|
|
633
633
|
return [...n].sort((o, i) => f.reverse(o.open, i.open)).forEach((o) => {
|
|
634
634
|
for (; s.length > 0; ) {
|
|
635
635
|
const i = s.pop();
|
|
636
636
|
if (i.position.start.offset < o.open.position.start.offset) {
|
|
637
|
-
if (
|
|
637
|
+
if (Oe(e, i, o.open).trim() !== "")
|
|
638
638
|
throw T.openingCommentDoesNotFollowLink(o.open);
|
|
639
639
|
return r.push([i, o]);
|
|
640
640
|
}
|
|
@@ -642,89 +642,89 @@ const it = ["http", "./", "../", "?"], lt = ({ url: e }) => it.some((t) => e.sta
|
|
|
642
642
|
}
|
|
643
643
|
throw T.openingCommentDoesNotFollowLink(o.open);
|
|
644
644
|
}), r.push(...s.reverse()), r.reverse();
|
|
645
|
-
},
|
|
646
|
-
t ?? (t =
|
|
647
|
-
const n =
|
|
648
|
-
return
|
|
649
|
-
},
|
|
645
|
+
}, ue = (e, t) => {
|
|
646
|
+
t ?? (t = z.md(e));
|
|
647
|
+
const n = gt(t), s = R(t, "link").filter(ct), r = R(t, "html").sort(f), o = r.filter(oe("begin")), i = r.filter(oe("end")), l = ht(o, i);
|
|
648
|
+
return dt(e, s, l).map((c) => Array.isArray(c) ? ut(c[0], c[1].close, n(c[0])) : pt(c, n(c)));
|
|
649
|
+
}, ft = (e, { url: t }) => (n) => e(O(Q(t), n)), me = (...e) => {
|
|
650
650
|
const t = e.reduce((n, s) => n + s, 0);
|
|
651
651
|
return Math.min(Math.max(t, 1), 6);
|
|
652
|
-
},
|
|
652
|
+
}, vt = (e, t, n) => {
|
|
653
653
|
if (t === 0) return e;
|
|
654
|
-
n ?? (n =
|
|
654
|
+
n ?? (n = z.md(e));
|
|
655
655
|
const s = R(n, "heading"), r = e.split(`
|
|
656
656
|
`);
|
|
657
657
|
for (const o of s) {
|
|
658
|
-
const { depth: i, position: { start: l, end: a } } = o, c =
|
|
658
|
+
const { depth: i, position: { start: l, end: a } } = o, c = me(i, t), u = r[l.line - 1].slice(i, a.column), p = "#".repeat(c) + u;
|
|
659
659
|
r[l.line - 1] = p, o.depth = c;
|
|
660
660
|
}
|
|
661
661
|
return r.join(`
|
|
662
662
|
`);
|
|
663
|
-
},
|
|
663
|
+
}, ge = (e) => ue(e).reverse().sort(f.reverse).reduce((t, n) => ae(t, pe(n), n), e), he = (e, t, n, s, r) => {
|
|
664
664
|
try {
|
|
665
|
-
e =
|
|
666
|
-
const o =
|
|
667
|
-
return
|
|
668
|
-
var
|
|
669
|
-
const { url:
|
|
670
|
-
if (
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
665
|
+
e = ge(e), e = vt(e, t);
|
|
666
|
+
const o = z.md(e), i = new H(), l = ue(e, o).sort(f);
|
|
667
|
+
return l.filter(({ url: a }) => a.startsWith("?")).forEach(({ url: a }) => i.tryStore(a)), l.reverse().map((a) => {
|
|
668
|
+
var M, S;
|
|
669
|
+
const { url: c, headingDepth: u } = a, [p, ...b] = Ee(c).split("?"), y = i.apply(b.join("?"));
|
|
670
|
+
if (!c.startsWith("?"))
|
|
671
|
+
if (c.startsWith("./") || c.startsWith("../")) {
|
|
672
|
+
const m = p.split(".").pop() ?? "", j = Q(c), V = O(j, p);
|
|
673
|
+
let h = n(V);
|
|
674
|
+
const x = new Se(y), D = (M = ((w) => {
|
|
675
|
+
const v = Array.from(x.entries()).filter(([C]) => C === w).map(([C, q]) => q);
|
|
676
|
+
return v.length >= 1 ? v.join(",") : void 0;
|
|
677
|
+
})("region")) == null ? void 0 : M.split(J);
|
|
678
|
+
h = (D == null ? void 0 : D.reduce(
|
|
679
|
+
(w, v, C, { length: q }) => rt(w, v, C === q - 1),
|
|
680
|
+
h
|
|
681
|
+
)) ?? h;
|
|
682
|
+
const ve = x.has("skip"), we = x.get("heading") ?? 0, $e = x.has("inline");
|
|
683
|
+
let { inline: L } = a;
|
|
684
|
+
if ($e && (L = !0), !ve)
|
|
685
|
+
if (m === "md") {
|
|
686
|
+
const w = ft(n, a), v = r ? O(r, j) : j, C = me(u, Number(we));
|
|
687
|
+
h = he(
|
|
688
|
+
h,
|
|
689
|
+
/** p↓: ... */
|
|
690
|
+
C,
|
|
691
|
+
w,
|
|
692
|
+
V,
|
|
693
|
+
v
|
|
694
|
+
/** p↓: ... */
|
|
695
|
+
);
|
|
696
|
+
} else /^(js|ts)x?|svelte$/i.test(m) && (h = ee(
|
|
688
697
|
h,
|
|
698
|
+
"code",
|
|
689
699
|
/** p↓: ... */
|
|
690
|
-
|
|
691
|
-
y,
|
|
692
|
-
X,
|
|
693
|
-
v
|
|
700
|
+
{ extension: m, inline: L }
|
|
694
701
|
/** p↓: ... */
|
|
695
|
-
);
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
{ extension: b, inline: D }
|
|
701
|
-
/** p↓: ... */
|
|
702
|
-
));
|
|
703
|
-
const L = (M = x.get("wrap")) == null ? void 0 : M.split(V);
|
|
704
|
-
return h = (L == null ? void 0 : L.reduce((y, v) => Y(y, v, { extension: b, inline: D }), h)) ?? h, { target: l, content: ut(l, h, r) };
|
|
705
|
-
} else throw a.startsWith("http") ? new Error("External web links are not implemented yet") : new Error(`Unsupported link type: ${a}`);
|
|
706
|
-
}).filter(Boolean).reduce((l, { target: a, content: c }) => le(l, c, a), e);
|
|
702
|
+
));
|
|
703
|
+
const U = (S = x.get("wrap")) == null ? void 0 : S.split(J);
|
|
704
|
+
return h = (U == null ? void 0 : U.reduce((w, v) => ee(w, v, { extension: m, inline: L }), h)) ?? h, { target: a, content: mt(a, h, r) };
|
|
705
|
+
} else throw c.startsWith("http") ? new Error("External web links are not implemented yet") : new Error(`Unsupported link type: ${c}`);
|
|
706
|
+
}).filter(Boolean).reduce((a, { target: c, content: u }) => ae(a, u, c), e);
|
|
707
707
|
} catch (o) {
|
|
708
708
|
throw new Error(`Error populating inclusions in file ${s ?? "(unknown)"}: ${o}`);
|
|
709
709
|
}
|
|
710
|
-
},
|
|
711
|
-
const t =
|
|
712
|
-
return { content:
|
|
713
|
-
},
|
|
714
|
-
const { dir: s, path: r, content: o } =
|
|
710
|
+
}, de = (e) => Ce(e, "utf-8"), fe = (e) => {
|
|
711
|
+
const t = le(e), n = Q(t);
|
|
712
|
+
return { content: de(t), dir: n, path: t };
|
|
713
|
+
}, wt = (e, t = !0, n) => {
|
|
714
|
+
const { dir: s, path: r, content: o } = fe(e);
|
|
715
715
|
n == null || n.unwatch(r), n == null || n.once("change", (a, c) => {
|
|
716
|
-
console.log(`Change detected in "${a}". Regenerating "${r}"...`),
|
|
716
|
+
console.log(`Change detected in "${a}". Regenerating "${r}"...`), wt(e, t, n);
|
|
717
717
|
});
|
|
718
|
-
const l =
|
|
719
|
-
const c =
|
|
720
|
-
return n == null || n.add(c),
|
|
718
|
+
const l = he(o, 0, (a) => {
|
|
719
|
+
const c = le(s, Ie(a));
|
|
720
|
+
return n == null || n.add(c), de(c);
|
|
721
721
|
}, r);
|
|
722
|
-
return t &&
|
|
723
|
-
},
|
|
724
|
-
const { path: s, content: r } =
|
|
725
|
-
return t &&
|
|
722
|
+
return t && ie(r, l), n == null || n.add(r), l;
|
|
723
|
+
}, Nt = (e, t = !0, n) => {
|
|
724
|
+
const { path: s, content: r } = fe(e), o = ge(r);
|
|
725
|
+
return t && ie(s, o), o;
|
|
726
726
|
};
|
|
727
727
|
export {
|
|
728
|
-
|
|
729
|
-
|
|
728
|
+
Nt as depopulateMarkdownInclusions,
|
|
729
|
+
wt as populateMarkdownInclusions
|
|
730
730
|
};
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
(function(
|
|
2
|
-
`),
|
|
3
|
-
`}},
|
|
1
|
+
(function(d,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("node:fs"),require("node:path"),require("node:url"),require("unified"),require("remark-parse"),require("unist-util-visit"),require("ts-dedent")):typeof define=="function"&&define.amd?define(["exports","node:fs","node:path","node:url","unified","remark-parse","unist-util-visit","ts-dedent"],m):(d=typeof globalThis<"u"?globalThis:d||self,m(d.index={},d.node_fs,d.node_path,d.node_url,d.unified,d.remarkParse,d.unistUtilVisit,d.tsDedent))})(this,function(d,m,g,ve,we,$e,ye,Ce){"use strict";var dt=Object.defineProperty;var mt=(d,m,g)=>m in d?dt(d,m,{enumerable:!0,configurable:!0,writable:!0,value:g}):d[m]=g;var j=(d,m,g)=>mt(d,typeof m!="symbol"?m+"":m,g);const $=(e,t)=>e.position.start.offset-t.position.start.offset;$.reverse=(e,t)=>$(t,e);const D=e=>e.position!==void 0&&e.position.start.offset!==void 0&&e.position.end.offset!==void 0,be=we.unified().use($e),L={md:e=>be.parse(e)},A=(e,t)=>{const n=[];return ye.visit(e,(s,r,i)=>{if(s.type!=="root"){if(t&&s.type!==t)return;if(D(s)){const o=((i==null?void 0:i.children.length)??0)-1;n.push({...s,siblingIndex:r,siblingCount:o})}}}),n},Ee=e=>e.children.length===0,J=(e,t,...n)=>{if(n.length===0)throw new Error("No nodes to replace content from");n.sort($);const s=n.at(0),r=n.at(-1);return e.slice(0,s.position.start.offset)+t+e.slice(r.position.end.offset)},Se=(e,t,n)=>{const s=Math.min(t.position.end.offset,n.position.end.offset),r=Math.max(t.position.start.offset,n.position.start.offset);return e.slice(s,r)},O=(...e)=>e.join(" "),ke=(...e)=>e.join(`
|
|
2
|
+
`),xe=e=>{const t=e.split("?");return t.length>1?[t.slice(0,-1).join("?"),t.at(-1)]:[e,""]},Ne=e=>xe(e)[0],Z=/,\s*(?![^()]*\))/,K={reserved:{semi:";",slash:"/",question:"?",colon:":",at:"@",equal:"=",and:"&"},unsafe:{quote:'"',angle:"<",unangle:">",hash:"#",percent:"%",curly:"{",uncurly:"}",pipe:"|",back:"\\",carrot:"^",tilde:"~",square:"[",unsquare:"]",tick:"`",line:`
|
|
3
|
+
`}},Me="-",Y={static:[["'''",'"'],["''","'"],[/parkdown:\s+/g,""],[/p↓:\s+/g,""]],url:[...Object.entries(K.unsafe),...Object.entries(K.reserved)]},ee=(e,[t,n])=>e.replaceAll(t,n),I=(e,t=Me)=>{const n=Y.static.reduce(ee,e);return Y.url.map(([s,r])=>[t+s+t,r]).reduce(ee,n).replaceAll(t," ")},Te=["string","number","boolean"],_e=e=>Te.includes(e),je=/^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/,Ae=e=>{const t=e.match(je);if(!t)throw new Error(`Invalid invocation: ${e}`);const[,n,s=""]=t;if(!s.trim())return{name:n,parameters:[]};const r=Ie(s);return{name:n,parameters:r}},Oe=(e,t)=>{for(let n=t+1;n<e.length;n++)if(e[n]!==void 0)return!1;return!0},Ie=e=>{const t=[];let n="",s=!1;for(let r=0;r<e.length;r++){const i=e[r],o=i==="'";if(o&&e.at(r+1)==="'"){const l=e.at(r+2)==="'";s=!s,n+=l?"'''":"''",r+=l?2:1}else o?(s=!s,n+=i):i===","&&!s?(t.push(n.trim()),n=""):n+=i}return t.push(n.trim()),t.map(r=>r===""?void 0:r?qe(r):void 0).filter((r,i,o)=>r!==void 0||!Oe(o,i))},qe=e=>{const t=e.length>=2&&e[0]==="'"&&e.at(-1)==="'",n=t&&e.length>=4&&e[1]==="'"&&e.at(-2)==="'";return!t||n?e:e.slice(1,-1)},Re=e=>{const t=/^(\w+)(?:\(([^)]*)\))?/,n=e.match(t);if(!n)return{name:e};const[,s,r]=n;if(!r)return{name:s};const i=/(\w+)(\?)?:\s*([^,]+)/g,o=[];let l;for(;(l=i.exec(r))!==null;){const[,a,c,u]=l,p=u.trim();if(!_e(p))throw new Error(`Unsupported type: ${p}`);o.push({name:a,optional:c==="?",type:p})}return{name:s,parameters:o}},N=e=>{const t=e.map(Re).reduce((n,{name:s,parameters:r})=>n.set(s,r),new Map);return n=>{const{name:s,parameters:r}=Ae(n);if(!t.has(s))throw new Error(`Unknown method: ${s}`);const i=t.get(s);if(i===void 0)return{name:s};if(r.length>i.length){const o=i.filter(({optional:a})=>!a).length,l=o===i.length?o.toString():`${o} - ${i.length}`;throw new Error(`Too many parameters: ${r.length} for method '${s}' (expected: ${l})`)}return i.reduce((o,{name:l,optional:a,type:c},u)=>{const p=r[u];if(p===void 0){if(a)return o;throw new Error(`Missing required parameter: ${l} for method '${s}'`)}switch(c){case"string":o[l]=p;break;case"number":case"boolean":o[l]=JSON.parse(p);break}if(typeof o[l]!==c)throw new Error(`Invalid type: ${l} must be ${c}, got ${typeof o[l]} for method '${s}'`);return o},{name:s})}},U=e=>Object.entries(e).filter(([t])=>t!=="name"&&!isNaN(Number(t))).map(([t,n])=>n),Pe=N(["code(lang?: string, meta?: string)","quote()","dropdown(summary: string, open?: boolean, space?: string)"]),E=(e,t=1)=>`
|
|
4
4
|
`.repeat(t)+e+`
|
|
5
|
-
`.repeat(t),B=(e,t,n)=>`<${t}${n?` ${n}`:""}>${
|
|
6
|
-
`))return`\`${e}\``;const i=s.lang??(n==null?void 0:n.extension)??"",o=s.meta?` ${s.meta}`:"";return
|
|
5
|
+
`.repeat(t),B=(e,t,n)=>`<${t}${n?` ${n}`:""}>${E(e)}</${t}>`,te=(e,t,n)=>{const s=Pe(t);switch(s.name){case"code":if(!s.lang&&!s.meta&&(n==null?void 0:n.inline)&&!e.includes(`
|
|
6
|
+
`))return`\`${e}\``;const i=s.lang??(n==null?void 0:n.extension)??"",o=s.meta?` ${s.meta}`:"";return E(`\`\`\`${i}${o}${E(e)}\`\`\``);case"quote":return n!=null&&n.inline&&!e.includes(`
|
|
7
7
|
|
|
8
|
-
`)?`> ${e}`:
|
|
9
|
-
`),"details",s.open?"open":void 0))}};class v{constructor(...t){j(this,"_intervals",[]);j(this,"collapsed",!0);for(const[n,s]of t)this.push(n,s)}get intervals(){return this._intervals}push(t,n){return n??(n=t+1),this._intervals.push([Math.min(t,n),Math.max(t,n)]),this.collapsed=!1,this}combine(t){for(const[n,s]of t.intervals)this.push(n,s);return this}collapse(t=!1){const{_intervals:n,collapsed:s}=this;if(s&&!t||!n.length)return this;n.sort((l,
|
|
10
|
-
`||e===void 0}),
|
|
11
|
-
`;)
|
|
12
|
-
`;)
|
|
13
|
-
`?l.range[1]+1:l.range[1])}return R(new v([0,e.length]).subtract(r).slice(e))},
|
|
14
|
-
`).length}`,n=`chars: ${e.length}`;return O(
|
|
15
|
-
`);for(const i of s){const{depth:o,position:{start:l,end:
|
|
16
|
-
`)},
|
|
8
|
+
`)?`> ${e}`:E(B(E(e),"blockquote"));case"dropdown":const l=B(I(s.summary),"summary");return E(B([l,e].join(`
|
|
9
|
+
`),"details",s.open?"open":void 0))}};class v{constructor(...t){j(this,"_intervals",[]);j(this,"collapsed",!0);for(const[n,s]of t)this.push(n,s)}get intervals(){return this._intervals}push(t,n){return n??(n=t+1),this._intervals.push([Math.min(t,n),Math.max(t,n)]),this.collapsed=!1,this}combine(t){for(const[n,s]of t.intervals)this.push(n,s);return this}collapse(t=!1){const{_intervals:n,collapsed:s}=this;if(s&&!t||!n.length)return this;n.sort((l,a)=>l[0]-a[0]);const r=[];let[i,o]=n[0];for(let l=1;l<n.length;l++){const[a,c]=n[l];a<=o?o=Math.max(o,c):(r.push([i,o]),i=a,o=c)}return r.push([i,o]),this._intervals=r,this.collapsed=!0,this}subtract(t){this.collapse(),t.collapse();const{_intervals:n}=this,{_intervals:s}=t;if(!n.length||!s.length)return this;let r=[...n];for(const[i,o]of s){const l=[];for(const[a,c]of r){if(o<=a||i>=c){l.push([a,c]);continue}i>a&&l.push([a,i]),o<c&&l.push([o,c])}r=l}return this._intervals=r,this.collapse(!0),this}test(t,n="head"){const{_intervals:s}=this;switch(n){case"head":return s.some(([r,i])=>t>=r&&t<i);case"tail":return s.some(([r,i])=>t>r&&t<=i);case"both":return s.some(([r,i])=>t>=r&&t<=i);case"none":return s.some(([r,i])=>t>r&&t<i)}}slice(t){this.collapse();const n=[];for(const[s,r]of this._intervals)n.push(t.slice(s,r));return n.filter(Boolean).join("")}offset(t){for(const n of this._intervals)n[0]+=t,n[1]+=t;return this}}const q=e=>{const t=/(\/\/[^\n]*|\/\*[\s\S]*?\*\/|<!--[\s\S]*?-->)/gm,n=[];let s;for(;(s=t.exec(e))!==null;){const r=[s.index,s.index+s[0].length],i=We(s[0]).trim();n.push({range:r,value:i})}return n},We=e=>e.startsWith("//")?e.slice(2):e.startsWith("/*")?e.slice(2,-2):e.startsWith("<!--")?e.slice(4,-3):e,De=["p↓:","pd:","parkdown:"];N(["splice(delete?: number, insert?: string)"]);const ne=(e,t)=>e.range[0]-t.range[0],F=(e,t,n)=>(n??q(e)).filter(({value:s})=>s.split(" ").includes(t)).sort(ne),se=e=>({isSpace:e===" ",isNewline:e===`
|
|
10
|
+
`||e===void 0}),re=e=>De.flatMap(t=>F(e,t)).sort((t,n)=>t.range[0]-n.range[0]).reverse().reduce((t,{range:[n,s],value:r})=>{const i=(S,k)=>t.slice(0,S)+t.slice(k),o=se(t[n-1]),l=se(t[s]),a=s===t.length;let c=n;for(;c>0&&t[c-1]!==`
|
|
11
|
+
`;)c--;let u=s;for(;u<t.length&&t[u]!==`
|
|
12
|
+
`;)u++;const p=t.slice(c,n).trim()===""&&t.slice(s,u).trim()==="";return o.isNewline&&l.isNewline?i(n-(a?1:0),s+1):o.isNewline||p?i(c,s+(l.isSpace||l.isNewline?1:0)):i(n-(o.isSpace?1:0),s)},e),Le=N(["extract(id: string, 0?: string, 1?: string, 2?: string)","remove(id: string, 0?: string, 1?: string, 2?: string)","replace(id: string, with?: string, space?: string)","remap(id?: string, from: string, to?: string, space?: string)","single-line(id: string, includeBoundaries?: boolean)","trim(id: string, inside?: boolean, outside?: boolean)","trim-start(id: string, left?: boolean, right?: boolean)","trim-end(id: string, left?: boolean, right?: boolean)","splice-start(id: string, deleteCount?: number, insert?: string, space?: string)","splice-end(id: string, deleteCount?: number, insert?: string, space?: string)","debug()"]),C=(e,t,n)=>{const s=F(e,t,n),r=[];for(let i=0;i<s.length-1;i+=2)r.push([s[i],s[i+1]]);return r},Ue=(e,t,n)=>new v(...F(e,t,n).map(({range:s})=>s)),R=e=>Ce.dedent(e).trim(),Be=(e,...t)=>{if(t.length===0)return e;const n=q(e),s=new v,r=new v;for(const i of t)for(const[o,l]of C(e,i,n)){s.push(o.range[1],l.range[0]);const[a,...c]=e.slice(o.range[1],l.range[0]),u=c[c.length-1];r.push(o.range[0],o.range[1]+(a.trim()?0:1)),r.push(l.range[0],l.range[1]+(u.trim()?0:1))}return R(s.subtract(r).slice(e))},Fe=(e,...t)=>{if(t.length===0)return e;const n=q(e),s=([i,o])=>e.slice(i,o),r=new v;for(const i of t)for(const[o,l]of C(e,i,n)){const a=s([l.range[1],l.range[1]+1]).at(-1);r.push(o.range[0],a===`
|
|
13
|
+
`?l.range[1]+1:l.range[1])}return R(new v([0,e.length]).subtract(r).slice(e))},He=(e,t,n,s)=>{if(!t)return e;let r="",i=0;for(const[o,l]of C(e,t))r+=e.slice(i,o.range[1]),r+=I(n??o.value,s),i=l.range[0];return r+=e.slice(i),R(new v([0,r.length]).subtract(Ue(r,t)).slice(r))},Qe=(e,t,n,s,r,i)=>{if(!t)return e;const o=!(s===void 0||s<0),l=r?I(r,i):"",a=s??0,c=q(e),u=new v(...c.map(({range:p})=>p));return C(e,t,c).map(p=>p[n==="start"?0:1]).sort(ne).reverse().reduce((p,{range:S})=>{const k=new v,W=o?1:-1;let T=Math.abs(a),h=o?S[1]:S[0];for(;T>0&&h<p.length&&h>=0;)u.test(h)||(k.push(h),T--),h+=W;return h=Math.min(Math.max(0,h),p.length),p=p.slice(0,h)+l+p.slice(h),new v([0,p.length]).subtract(k.offset(o?0:l.length)).slice(p)},e)},Ge=(e,t,n,s,r)=>{let i="",o=0;[n,s]=[n,s??""].map(a=>I(a,r));const l=t?C(e,t):[[{range:[0,0]},{range:[e.length,e.length]}]];for(const[a,c]of l)i+=e.slice(o,a.range[1]),i+=e.slice(a.range[1],c.range[0]).replaceAll(n,s),o=c.range[0];return i+=e.slice(o),i},ze=(e,t)=>{if(!t)return e;let n="",s=0;for(const[r,i]of C(e,t))n+=e.slice(s,r.range[1]),n+=e.slice(r.range[1],i.range[0]).replaceAll(/[\s\n]+/g," "),s=i.range[0];return n+=e.slice(s),n},ie=(e,t,n)=>{var i,o,l,a;if(!t)return e;const s=c=>/\s/.test(e[c]),r=new v;for(const[c,u]of C(e,t)){if((i=n.start)!=null&&i.left){let p=c.range[0]-1;for(;s(p);)r.push(p--)}if((o=n.start)!=null&&o.right){let p=c.range[1];for(;s(p);)r.push(p++)}if((l=n.end)!=null&&l.left){let p=u.range[0]-1;for(;s(p);)r.push(p--)}if((a=n.end)!=null&&a.right){let p=u.range[1];for(;s(p);)r.push(p++)}}return new v([0,e.length]).subtract(r).slice(e)},Ve=(e,t,n)=>{if(!t)return re(e);const s=Le(t);switch(s.name){case"extract":e=Be(e,s.id,...U(s));break;case"remove":e=Fe(e,s.id,...U(s));break;case"replace":e=He(e,s.id,s.with,s.space);break;case"splice-start":case"splice-end":{const{deleteCount:r,insert:i,space:o,id:l}=s,a=s.name==="splice-start"?"start":"end";e=Qe(e,l,a,r,i,o);break}case"trim-start":case"trim-end":{const{left:r,right:i,id:o}=s,l=s.name==="trim-start"?"start":"end";e=ie(e,o,{[l]:{left:r??!0,right:i??!0}});break}case"trim":{const{inside:r,outside:i,id:o}=s;e=ie(e,o,{start:{left:i??!0,right:r??!0},end:{left:r??!0,right:i??!0}});break}case"single-line":e=ze(e,s.id);break;case"remap":e=Ge(e,s.id,s.from,s.to,s.space);break}return e=n&&s.name!=="debug"?re(e):e,n?R(e):e},Xe=["recipe(id: string)"],Je=["recipe(id: string, 0?: string, 1?: string, 2?: string)"],oe={register:N(Xe),apply:N(Je)},M=class M{constructor(){j(this,"recipes",new Map)}tryStore(t){const n=M.Entries(t);for(let s=0;s<n.length;s++){const[r,i]=n[s];if(r!=="register")continue;const o=oe.register(i);switch(o.name){case"recipe":const l=n.slice(s+1).filter(([a])=>a!=="register").map(([a,c])=>`${a}=${c}`).join("&");this.recipes.set(o.id,l);break;default:throw new Error(`Unknown registration: ${o.name}`)}}}apply(t){const n=M.Entries(t),s=[];for(let r=0;r<n.length;r++){const[i,o]=n[r];if(i!=="apply"){s.push(`${i}=${o}`);continue}const l=oe.apply(o);switch(l.name){case"recipe":s.push(this.recipes.get(l.id)),s.push(...U(l).map(a=>this.recipes.get(a)));break;default:throw new Error(`Unknown registration: ${l.name}`)}}return s.join("&")}};j(M,"Entries",t=>Array.from(new URLSearchParams(t).entries()));let H=M;const Ze=["http","./","../","?"],Ke=({url:e})=>Ze.some(t=>e.startsWith(t)),Ye=e=>D(e)&&Ee(e)&&Ke(e),le=({url:e},t)=>`[](${t?g.join(t,e):e})`,f={_open:"<!--",_close:"-->",_flag:"p↓",get begin(){return O(f._open,f._flag,"BEGIN",f._close)},get end(){return O(f._open,f._flag,"END",f._close)},lengthOf(e){const t=`lines: ${e.split(`
|
|
14
|
+
`).length}`,n=`chars: ${e.length}`;return O(f._open,f._flag,"length",t,n,f._close)}},ae=e=>t=>D(t)&&t.value===f[e],et=({position:e,url:t,siblingCount:n},s)=>({position:e,url:t,headingDepth:s,inline:n>=1}),tt=({position:{start:e},url:t,siblingCount:n},{position:{end:s}},r)=>({position:{start:e,end:s},url:t,headingDepth:r,inline:n>=1}),nt=(e,t,n)=>(e.inline?O:ke)(le(e,n),f.begin,f.lengthOf(t),t,f.end),st=e=>{const t=A(e,"heading").reduce((n,{position:s,depth:r})=>n.set(s.start.line,r),new Map);return n=>{for(let s=n.position.start.line;s>=1;s--){const r=t.get(s);if(r)return r}return 0}},P={openingCommentDoesNotFollowLink:({position:{start:e}})=>new Error(`Opening comment (@${e.line}:${e.column}) does not follow link`),closingCommentNotMatchedToOpening:({position:{start:e}})=>new Error(`Closing comment (@${e.line}:${e.column}) does not match to opening comment`),openingCommentNotClosed:({position:{start:e}})=>new Error(`Opening comment (@${e.line}:${e.column}) is not followed by a closing comment`)},rt=(e,t)=>{const n=[],s=[...e.map(i=>({node:i,type:"open"})),...t.map(i=>({node:i,type:"close"}))].sort((i,o)=>$(i.node,o.node)),r=[];for(const i of s)if(i.type==="open")r.push(i);else{const o=i.node;if(r.length===0)throw P.closingCommentNotMatchedToOpening(o);const l=r.pop().node;if(r.length>0)continue;n.push({open:l,close:o})}if(r.length>0)throw P.openingCommentNotClosed(r[0].node);return n},it=(e,t,n)=>{const s=[...t].sort($),r=[];return[...n].sort((i,o)=>$.reverse(i.open,o.open)).forEach(i=>{for(;s.length>0;){const o=s.pop();if(o.position.start.offset<i.open.position.start.offset){if(Se(e,o,i.open).trim()!=="")throw P.openingCommentDoesNotFollowLink(i.open);return r.push([o,i])}r.push(o)}throw P.openingCommentDoesNotFollowLink(i.open)}),r.push(...s.reverse()),r.reverse()},ce=(e,t)=>{t??(t=L.md(e));const n=st(t),s=A(t,"link").filter(Ye),r=A(t,"html").sort($),i=r.filter(ae("begin")),o=r.filter(ae("end")),l=rt(i,o);return it(e,s,l).map(c=>Array.isArray(c)?tt(c[0],c[1].close,n(c[0])):et(c,n(c)))},ot=(e,{url:t})=>n=>e(g.join(g.dirname(t),n)),pe=(...e)=>{const t=e.reduce((n,s)=>n+s,0);return Math.min(Math.max(t,1),6)},lt=(e,t,n)=>{if(t===0)return e;n??(n=L.md(e));const s=A(n,"heading"),r=e.split(`
|
|
15
|
+
`);for(const i of s){const{depth:o,position:{start:l,end:a}}=i,c=pe(o,t),u=r[l.line-1].slice(o,a.column),p="#".repeat(c)+u;r[l.line-1]=p,i.depth=c}return r.join(`
|
|
16
|
+
`)},ue=e=>ce(e).reverse().sort($.reverse).reduce((t,n)=>J(t,le(n),n),e),de=(e,t,n,s,r)=>{try{e=ue(e),e=lt(e,t);const i=L.md(e),o=new H,l=ce(e,i).sort($);return l.filter(({url:a})=>a.startsWith("?")).forEach(({url:a})=>o.tryStore(a)),l.reverse().map(a=>{var W,T;const{url:c,headingDepth:u}=a,[p,...S]=g.basename(c).split("?"),k=o.apply(S.join("?"));if(!c.startsWith("?"))if(c.startsWith("./")||c.startsWith("../")){const h=p.split(".").pop()??"",Q=g.dirname(c),fe=g.join(Q,p);let w=n(fe);const _=new ve.URLSearchParams(k),G=(W=(b=>{const y=Array.from(_.entries()).filter(([x])=>x===b).map(([x,X])=>X);return y.length>=1?y.join(","):void 0})("region"))==null?void 0:W.split(Z);w=(G==null?void 0:G.reduce((b,y,x,{length:X})=>Ve(b,y,x===X-1),w))??w;const ct=_.has("skip"),pt=_.get("heading")??0,ut=_.has("inline");let{inline:z}=a;if(ut&&(z=!0),!ct)if(h==="md"){const b=ot(n,a),y=r?g.join(r,Q):Q,x=pe(u,Number(pt));w=de(w,x,b,fe,y)}else/^(js|ts)x?|svelte$/i.test(h)&&(w=te(w,"code",{extension:h,inline:z}));const V=(T=_.get("wrap"))==null?void 0:T.split(Z);return w=(V==null?void 0:V.reduce((b,y)=>te(b,y,{extension:h,inline:z}),w))??w,{target:a,content:nt(a,w,r)}}else throw c.startsWith("http")?new Error("External web links are not implemented yet"):new Error(`Unsupported link type: ${c}`)}).filter(Boolean).reduce((a,{target:c,content:u})=>J(a,u,c),e)}catch(i){throw new Error(`Error populating inclusions in file ${s??"(unknown)"}: ${i}`)}},me=e=>m.readFileSync(e,"utf-8"),ge=e=>{const t=g.resolve(e),n=g.dirname(t);return{content:me(t),dir:n,path:t}},he=(e,t=!0,n)=>{const{dir:s,path:r,content:i}=ge(e);n==null||n.unwatch(r),n==null||n.once("change",(a,c)=>{console.log(`Change detected in "${a}". Regenerating "${r}"...`),he(e,t,n)});const l=de(i,0,a=>{const c=g.resolve(s,Ne(a));return n==null||n.add(c),me(c)},r);return t&&m.writeFileSync(r,l),n==null||n.add(r),l},at=(e,t=!0,n)=>{const{path:s,content:r}=ge(e),i=ue(r);return t&&m.writeFileSync(s,i),i};d.depopulateMarkdownInclusions=at,d.populateMarkdownInclusions=he,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
|