@p-buddy/parkdown 0.0.23 → 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/README.md CHANGED
@@ -44,7 +44,7 @@ populateMarkdownInclusions(file, writeFile);
44
44
 
45
45
  [](./.assets/authoring.md)
46
46
  <!-- p↓ BEGIN -->
47
- <!-- p↓ length lines: 663 chars: 22785 -->
47
+ <!-- p↓ length lines: 663 chars: 22786 -->
48
48
  ## Authoring
49
49
 
50
50
  You author inclusions in your markdown files using a link with no text i.e. `[](<url>)`, where `<url>` points to some local or remote text resource (e.g.`./other.md`, `https://example.com/remote.md`).
@@ -256,7 +256,7 @@ Before...
256
256
 
257
257
  [](.assets/query.md?heading=-1)
258
258
  <!-- p↓ BEGIN -->
259
- <!-- p↓ length lines: 450 chars: 18079 -->
259
+ <!-- p↓ length lines: 450 chars: 18080 -->
260
260
  ### Query parameters
261
261
 
262
262
  You can pass query parameters to your inclusion links to control how their content is processed and included within your markdown.
@@ -320,7 +320,7 @@ Please see the [full explanation](#query-parameters-with-function-like-apis) to
320
320
 
321
321
  [](src/region.ts?region=extract(definition))
322
322
  <!-- p↓ BEGIN -->
323
- <!-- p↓ length lines: 122 chars: 6241 -->
323
+ <!-- p↓ length lines: 122 chars: 6242 -->
324
324
 
325
325
  ```ts
326
326
  const definitions = [
@@ -367,7 +367,7 @@ const definitions = [
367
367
  * @example [](<url>?region=remap(specifier,hello-world,hello-universe))
368
368
  * @example [](<url>?region=remap(specifier,hello_world,hello_universe,_)
369
369
  */
370
- "remap(id: string, from: string, to?: string, space?: string)",
370
+ "remap(id?: string, from: string, to?: string, space?: string)",
371
371
 
372
372
  /**
373
373
  * Make the content of the region a single line (where all whitespace characters, including newlines, are converted to a single space).
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.23", 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();
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 ye = Object.defineProperty;
2
- var Ce = (e, t, n) => t in e ? ye(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
- var _ = (e, t, n) => Ce(e, typeof t != "symbol" ? t + "" : t, n);
4
- import { writeFileSync as le, readFileSync as Ee } from "node:fs";
5
- import { basename as Se, dirname as z, join as T, resolve as ae } from "node:path";
6
- import { URLSearchParams as Z } from "node:url";
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
7
  import { unified as xe } from "unified";
8
8
  import ke from "remark-parse";
9
9
  import { visit as _e } from "unist-util-visit";
10
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 X = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, Re = xe().use(ke), V = {
14
- md: (e) => Re.parse(e)
15
- }, I = (e, t) => {
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
+ }, R = (e, t) => {
16
16
  const n = [];
17
17
  return _e(e, (s, r, o) => {
18
18
  if (s.type !== "root") {
19
19
  if (t && s.type !== t) return;
20
- if (X(s)) {
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
- }, Me = (e) => e.children.length === 0, ce = (e, t, ...n) => {
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
- }, Ae = (e, t, n) => {
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
- }, O = (...e) => e.join(" "), Oe = (...e) => e.join(`
34
+ }, A = (...e) => e.join(" "), Re = (...e) => e.join(`
35
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
- }, Ie = (e) => Te(e)[0], F = /,\s*(?![^()]*\))/, K = {
38
+ }, Ie = (e) => Te(e)[0], J = /,\s*(?![^()]*\))/, Z = {
39
39
  reserved: {
40
40
  semi: ";",
41
41
  slash: "/",
@@ -63,7 +63,7 @@ const X = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
63
63
  line: `
64
64
  `
65
65
  }
66
- }, je = "-", Y = {
66
+ }, Pe = "-", K = {
67
67
  static: [
68
68
  ["'''", '"'],
69
69
  ["''", "'"],
@@ -71,14 +71,14 @@ const X = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
71
71
  [/p↓:\s+/g, ""]
72
72
  ],
73
73
  url: [
74
- ...Object.entries(K.unsafe),
75
- ...Object.entries(K.reserved)
74
+ ...Object.entries(Z.unsafe),
75
+ ...Object.entries(Z.reserved)
76
76
  ]
77
- }, ee = (e, [t, n]) => e.replaceAll(t, n), W = (e, t = je) => {
78
- const n = Y.static.reduce(ee, e);
79
- return Y.url.map(([s, r]) => [t + s + t, r]).reduce(ee, n).replaceAll(t, " ");
80
- }, We = ["string", "number", "boolean"], De = (e) => We.includes(e), Pe = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, Le = (e) => {
81
- const t = e.match(Pe);
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: [] };
@@ -111,11 +111,11 @@ const X = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
111
111
  let l;
112
112
  for (; (l = o.exec(r)) !== null; ) {
113
113
  const [, a, c, u] = l, p = u.trim();
114
- if (!De(p)) throw new Error(`Unsupported type: ${p}`);
114
+ if (!je(p)) throw new Error(`Unsupported type: ${p}`);
115
115
  i.push({ name: a, optional: c === "?", type: p });
116
116
  }
117
117
  return { name: s, parameters: i };
118
- }, R = (e) => {
118
+ }, N = (e) => {
119
119
  const t = e.map(Fe).reduce(
120
120
  (n, { name: s, parameters: r }) => n.set(s, r),
121
121
  /* @__PURE__ */ new Map()
@@ -151,7 +151,7 @@ const X = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
151
151
  return i;
152
152
  }, { name: s });
153
153
  };
154
- }, Q = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), He = [
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,30 +181,30 @@ const X = (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
- ], Qe = R(He), S = (e, t = 1) => `
184
+ ], Qe = N(He), E = (e, t = 1) => `
185
185
  `.repeat(t) + e + `
186
- `.repeat(t), H = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${S(e)}</${t}>`, te = (e, t, n) => {
186
+ `.repeat(t), B = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${E(e)}</${t}>`, ee = (e, t, n) => {
187
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 S(`\`\`\`${o}${i}${S(e)}\`\`\``);
193
+ return E(`\`\`\`${o}${i}${E(e)}\`\`\``);
194
194
  case "quote":
195
195
  return n != null && n.inline && !e.includes(`
196
196
 
197
- `) ? `> ${e}` : S(H(S(e), "blockquote"));
197
+ `) ? `> ${e}` : E(B(E(e), "blockquote"));
198
198
  case "dropdown":
199
- const l = H(W(s.summary), "summary");
200
- return S(H([l, e].join(`
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
  };
204
204
  class d {
205
205
  constructor(...t) {
206
- _(this, "_intervals", []);
207
- _(this, "collapsed", !0);
206
+ k(this, "_intervals", []);
207
+ k(this, "collapsed", !0);
208
208
  for (const [n, s] of t)
209
209
  this.push(n, s);
210
210
  }
@@ -275,7 +275,7 @@ class d {
275
275
  return this;
276
276
  }
277
277
  }
278
- const D = (e) => {
278
+ 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; ) {
@@ -290,13 +290,13 @@ const D = (e) => {
290
290
  ], Xe = [
291
291
  "splice(delete?: number, insert?: string)"
292
292
  ];
293
- R(Xe);
294
- const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filter(({ value: s }) => s.split(" ").includes(t)).sort(pe), ne = (e) => ({
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
- }), se = (e) => ze.flatMap((t) => J(e, t)).sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, s], value: r }) => {
299
- const o = (w, $) => t.slice(0, w) + t.slice($), i = ne(t[n - 1]), l = ne(t[s]), a = s === t.length;
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--;
@@ -345,7 +345,7 @@ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filte
345
345
  * @example [](<url>?region=remap(specifier,hello-world,hello-universe))
346
346
  * @example [](<url>?region=remap(specifier,hello_world,hello_universe,_)
347
347
  */
348
- "remap(id: string, from: string, to?: string, space?: string)",
348
+ "remap(id?: string, from: string, to?: string, space?: string)",
349
349
  /**
350
350
  * Make the content of the region a single line (where all whitespace characters, including newlines, are converted to a single space).
351
351
  * @param id The id of the comment regions to act on.
@@ -410,67 +410,67 @@ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filte
410
410
  * Helpful when trying to determine fine-grained edits (e.g. trimming, splicing, etc.).
411
411
  */
412
412
  "debug()"
413
- ], Je = R(Ve), C = (e, t, n) => {
414
- const s = J(e, t, n), r = [];
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
- }, Ze = (e, t, n) => new d(...J(e, t, n).map(({ range: s }) => s)), P = (e) => Ne(e).trim(), Ke = (e, ...t) => {
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
- const n = D(e), s = new d(), r = new d();
420
+ const n = P(e), s = new d(), r = new d();
421
421
  for (const o of t)
422
- for (const [i, l] of C(e, o, n)) {
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 P(s.subtract(r).slice(e));
427
+ return W(s.subtract(r).slice(e));
428
428
  }, Ye = (e, ...t) => {
429
429
  if (t.length === 0) return e;
430
- const n = D(e), s = ([o, i]) => e.slice(o, i), r = new d();
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 C(e, o, n)) {
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 P(new d([0, e.length]).subtract(r).slice(e));
437
+ return W(new d([0, e.length]).subtract(r).slice(e));
438
438
  }, et = (e, t, n, s) => {
439
439
  if (!t) return e;
440
440
  let r = "", o = 0;
441
- for (const [i, l] of C(e, t))
442
- r += e.slice(o, i.range[1]), r += W(n ?? i.value, s), o = l.range[0];
443
- return r += e.slice(o), P(
441
+ for (const [i, l] of $(e, t))
442
+ r += e.slice(o, i.range[1]), r += I(n ?? i.value, s), o = l.range[0];
443
+ return r += e.slice(o), W(
444
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
- const i = !(s === void 0 || s < 0), l = r ? W(r, o) : "", a = s ?? 0, c = D(e), u = new d(...c.map(({ range: p }) => p));
449
- return C(e, t, c).map((p) => p[n === "start" ? 0 : 1]).sort(pe).reverse().reduce((p, { range: w }) => {
450
- const $ = new d(), M = i ? 1 : -1;
451
- let x = Math.abs(a), m = i ? w[1] : w[0];
452
- for (; x > 0 && m < p.length && m >= 0; )
453
- u.test(m) || ($.push(m), x--), 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($.offset(i ? 0 : l.length)).slice(p);
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 $(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
- if (!t) return e;
458
457
  let o = "", i = 0;
459
- [n, s] = [n, s ?? ""].map((l) => W(l, r));
460
- for (const [l, a] of C(e, t))
461
- o += e.slice(i, l.range[1]), o += e.slice(l.range[1], a.range[0]).replaceAll(n, s), i = a.range[0];
458
+ [n, s] = [n, s ?? ""].map((a) => I(a, r));
459
+ const l = t ? $(e, t) : [[{ range: [0, 0] }, { range: [e.length, e.length] }]];
460
+ for (const [a, c] of l)
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 C(e, t))
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
- }, re = (e, t, n) => {
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 C(e, t)) {
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--);
@@ -490,14 +490,14 @@ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filte
490
490
  }
491
491
  return new d([0, e.length]).subtract(r).slice(e);
492
492
  }, rt = (e, t, n) => {
493
- if (!t) return se(e);
493
+ if (!t) return ne(e);
494
494
  const s = Je(t);
495
495
  switch (s.name) {
496
496
  case "extract":
497
- e = Ke(e, s.id, ...Q(s));
497
+ e = Ke(e, s.id, ...F(s));
498
498
  break;
499
499
  case "remove":
500
- e = Ye(e, s.id, ...Q(s));
500
+ e = Ye(e, s.id, ...F(s));
501
501
  break;
502
502
  case "replace":
503
503
  e = et(e, s.id, s.with, s.space);
@@ -511,12 +511,12 @@ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filte
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 = re(e, i, { [l]: { left: r ?? !0, right: o ?? !0 } });
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 = re(e, i, { start: { left: o ?? !0, right: r ?? !0 }, end: { left: r ?? !0, right: o ?? !0 } });
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":
@@ -526,24 +526,24 @@ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filte
526
526
  e = nt(e, s.id, s.from, s.to, s.space);
527
527
  break;
528
528
  }
529
- return e = n && s.name !== "debug" ? se(e) : e, n ? P(e) : e;
529
+ return e = n && s.name !== "debug" ? ne(e) : e, n ? W(e) : e;
530
530
  }, ot = [
531
531
  "recipe(id: string)"
532
532
  ], it = [
533
533
  "recipe(id: string, 0?: string, 1?: string, 2?: string)"
534
- ], oe = {
535
- register: R(ot),
536
- apply: R(it)
537
- }, N = class N {
534
+ ], re = {
535
+ register: N(ot),
536
+ apply: N(it)
537
+ }, _ = class _ {
538
538
  constructor() {
539
- _(this, "recipes", /* @__PURE__ */ new Map());
539
+ k(this, "recipes", /* @__PURE__ */ new Map());
540
540
  }
541
- tryRegister(t) {
542
- const n = N.Entries(t);
541
+ tryStore(t) {
542
+ const n = _.Entries(t);
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 = oe.register(o);
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("&");
@@ -555,17 +555,17 @@ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filte
555
555
  }
556
556
  }
557
557
  apply(t) {
558
- const n = N.Entries(t), s = [];
558
+ const n = _.Entries(t), s = [];
559
559
  for (let r = 0; r < n.length; r++) {
560
560
  const [o, i] = n[r];
561
561
  if (o !== "apply") {
562
562
  s.push(`${o}=${i}`);
563
563
  continue;
564
564
  }
565
- const l = oe.apply(i);
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(...Q(l).map((a) => this.recipes.get(a)));
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}`);
@@ -574,31 +574,31 @@ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filte
574
574
  return s.join("&");
575
575
  }
576
576
  };
577
- _(N, "Entries", (t) => Array.from(new URLSearchParams(t).entries()));
578
- let G = N;
579
- const lt = ["http", "./", "../", "?"], at = ({ url: e }) => lt.some((t) => e.startsWith(t)), ct = (e) => X(e) && Me(e) && at(e), ue = ({ url: e }, t) => `[](${t ? T(t, e) : e})`, g = {
577
+ k(_, "Entries", (t) => Array.from(new URLSearchParams(t).entries()));
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↓",
583
583
  get begin() {
584
- return O(g._open, g._flag, "BEGIN", g._close);
584
+ return A(g._open, g._flag, "BEGIN", g._close);
585
585
  },
586
586
  get end() {
587
- return O(g._open, g._flag, "END", g._close);
587
+ return A(g._open, g._flag, "END", g._close);
588
588
  },
589
589
  lengthOf(e) {
590
590
  const t = `lines: ${e.split(`
591
591
  `).length}`, n = `chars: ${e.length}`;
592
- return O(g._open, g._flag, "length", t, n, g._close);
592
+ return A(g._open, g._flag, "length", t, n, g._close);
593
593
  }
594
- }, ie = (e) => (t) => X(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 ? O : Oe)(
595
- ue(e, n),
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
- const t = I(e, "heading").reduce((n, { position: s, depth: r }) => n.set(s.start.line, r), /* @__PURE__ */ new Map());
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--) {
604
604
  const r = t.get(s);
@@ -606,7 +606,7 @@ const lt = ["http", "./", "../", "?"], at = ({ url: e }) => lt.some((t) => e.sta
606
606
  }
607
607
  return 0;
608
608
  };
609
- }, j = {
609
+ }, T = {
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`)
@@ -620,13 +620,13 @@ const lt = ["http", "./", "../", "?"], at = ({ url: e }) => lt.some((t) => e.sta
620
620
  else {
621
621
  const i = o.node;
622
622
  if (r.length === 0)
623
- throw j.closingCommentNotMatchedToOpening(i);
623
+ throw T.closingCommentNotMatchedToOpening(i);
624
624
  const l = r.pop().node;
625
625
  if (r.length > 0) continue;
626
626
  n.push({ open: l, close: i });
627
627
  }
628
628
  if (r.length > 0)
629
- throw j.openingCommentNotClosed(r[0].node);
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 = [];
@@ -634,97 +634,95 @@ const lt = ["http", "./", "../", "?"], at = ({ url: e }) => lt.some((t) => e.sta
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 (Ae(e, i, o.open).trim() !== "")
638
- throw j.openingCommentDoesNotFollowLink(o.open);
637
+ if (Oe(e, i, o.open).trim() !== "")
638
+ throw T.openingCommentDoesNotFollowLink(o.open);
639
639
  return r.push([i, o]);
640
640
  }
641
641
  r.push(i);
642
642
  }
643
- throw j.openingCommentDoesNotFollowLink(o.open);
643
+ throw T.openingCommentDoesNotFollowLink(o.open);
644
644
  }), r.push(...s.reverse()), r.reverse();
645
- }, me = (e, t) => {
646
- t ?? (t = V.md(e));
647
- const n = gt(t), s = I(t, "link").filter(ct), r = I(t, "html").sort(f), o = r.filter(ie("begin")), i = r.filter(ie("end")), l = ht(o, i);
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
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(T(z(t), n)), ge = (...e) => {
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 = V.md(e));
655
- const s = I(n, "heading"), r = e.split(`
654
+ n ?? (n = z.md(e));
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 = ge(i, t), u = r[l.line - 1].slice(i, a.column), p = "#".repeat(c) + u;
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
- }, he = (e) => me(e).reverse().sort(f.reverse).reduce((t, n) => ce(t, ue(n), n), e), de = (e, t, n, s, r) => {
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 = he(e), e = vt(e, t);
666
- const o = V.md(e), i = new G();
667
- return me(e, o).sort(f).reverse().map((l) => {
668
- var $, M, x;
669
- const { url: a, headingDepth: c } = l, [u, ...p] = Se(a).split("?"), w = i.apply(p.join("?"));
670
- if (a.startsWith("?")) {
671
- const b = ($ = new Z(w).get("register")) == null ? void 0 : $.split(F);
672
- b == null || b.forEach((A) => i.tryRegister(A));
673
- } else if (a.startsWith("./") || a.startsWith("../")) {
674
- const m = u.split(".").pop() ?? "", b = z(a), A = T(b, u);
675
- let h = n(A);
676
- const k = new Z(w), L = (M = ((y) => {
677
- const v = Array.from(k.entries()).filter(([E]) => E === y).map(([E, B]) => B);
678
- return v.length >= 1 ? v.join(",") : void 0;
679
- })("region")) == null ? void 0 : M.split(F);
680
- h = (L == null ? void 0 : L.reduce(
681
- (y, v, E, { length: B }) => rt(y, v, E === B - 1),
682
- h
683
- )) ?? h;
684
- const we = k.has("skip"), $e = k.get("heading") ?? 0, be = k.has("inline");
685
- let { inline: U } = l;
686
- if (be && (U = !0), !we)
687
- if (m === "md") {
688
- const y = ft(n, l), v = r ? T(r, b) : b, E = ge(c, Number($e));
689
- h = de(
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(
690
697
  h,
698
+ "code",
691
699
  /** p↓: ... */
692
- E,
693
- y,
694
- A,
695
- v
700
+ { extension: m, inline: L }
696
701
  /** p↓: ... */
697
- );
698
- } else /^(js|ts)x?|svelte$/i.test(m) && (h = te(
699
- h,
700
- "code",
701
- /** p↓: ... */
702
- { extension: m, inline: U }
703
- /** p↓: ... */
704
- ));
705
- const q = (x = k.get("wrap")) == null ? void 0 : x.split(F);
706
- return h = (q == null ? void 0 : q.reduce((y, v) => te(y, v, { extension: m, inline: U }), h)) ?? h, { target: l, content: mt(l, h, r) };
707
- } else throw a.startsWith("http") ? new Error("External web links are not implemented yet") : new Error(`Unsupported link type: ${a}`);
708
- }).filter(Boolean).reduce((l, { target: a, content: c }) => ce(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);
709
707
  } catch (o) {
710
708
  throw new Error(`Error populating inclusions in file ${s ?? "(unknown)"}: ${o}`);
711
709
  }
712
- }, fe = (e) => Ee(e, "utf-8"), ve = (e) => {
713
- const t = ae(e), n = z(t);
714
- return { content: fe(t), dir: n, path: t };
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 };
715
713
  }, wt = (e, t = !0, n) => {
716
- const { dir: s, path: r, content: o } = ve(e);
714
+ const { dir: s, path: r, content: o } = fe(e);
717
715
  n == null || n.unwatch(r), n == null || n.once("change", (a, c) => {
718
716
  console.log(`Change detected in "${a}". Regenerating "${r}"...`), wt(e, t, n);
719
717
  });
720
- const l = de(o, 0, (a) => {
721
- const c = ae(s, Ie(a));
722
- return n == null || n.add(c), fe(c);
718
+ const l = he(o, 0, (a) => {
719
+ const c = le(s, Ie(a));
720
+ return n == null || n.add(c), de(c);
723
721
  }, r);
724
- return t && le(r, l), n == null || n.add(r), l;
722
+ return t && ie(r, l), n == null || n.add(r), l;
725
723
  }, Nt = (e, t = !0, n) => {
726
- const { path: s, content: r } = ve(e), o = he(r);
727
- return t && le(s, o), o;
724
+ const { path: s, content: r } = fe(e), o = ge(r);
725
+ return t && ie(s, o), o;
728
726
  };
729
727
  export {
730
728
  Nt as depopulateMarkdownInclusions,
@@ -1,16 +1,16 @@
1
- (function(u,d){typeof exports=="object"&&typeof module<"u"?d(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"],d):(u=typeof globalThis<"u"?globalThis:u||self,d(u.index={},u.node_fs,u.node_path,u.node_url,u.unified,u.remarkParse,u.unistUtilVisit,u.tsDedent))})(this,function(u,d,g,K,we,$e,ye,Ce){"use strict";var mt=Object.defineProperty;var dt=(u,d,g)=>d in u?mt(u,d,{enumerable:!0,configurable:!0,writable:!0,value:g}):u[d]=g;var _=(u,d,g)=>dt(u,typeof d!="symbol"?d+"":d,g);const $=(e,t)=>e.position.start.offset-t.position.start.offset;$.reverse=(e,t)=>$(t,e);const U=e=>e.position!==void 0&&e.position.start.offset!==void 0&&e.position.end.offset!==void 0,be=we.unified().use($e),B={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(U(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,Y=(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],F=/,\s*(?![^()]*\))/,ee={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="-",te={static:[["'''",'"'],["''","'"],[/parkdown:\s+/g,""],[/p↓:\s+/g,""]],url:[...Object.entries(ee.unsafe),...Object.entries(ee.reserved)]},ne=(e,[t,n])=>e.replaceAll(t,n),I=(e,t=Me)=>{const n=te.static.reduce(ne,e);return te.url.map(([s,r])=>[t+s+t,r]).reduce(ne,n).replaceAll(t," ")},Re=["string","number","boolean"],Te=e=>Re.includes(e),je=/^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/,_e=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=Oe(s);return{name:n,parameters:r}},Ae=(e,t)=>{for(let n=t+1;n<e.length;n++)if(e[n]!==void 0)return!1;return!0},Oe=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?Ie(r):void 0).filter((r,i,o)=>r!==void 0||!Ae(o,i))},Ie=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)},qe=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[,c,a,m]=l,p=m.trim();if(!Te(p))throw new Error(`Unsupported type: ${p}`);o.push({name:c,optional:a==="?",type:p})}return{name:s,parameters:o}},M=e=>{const t=e.map(qe).reduce((n,{name:s,parameters:r})=>n.set(s,r),new Map);return n=>{const{name:s,parameters:r}=_e(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:c})=>!c).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:c,type:a},m)=>{const p=r[m];if(p===void 0){if(c)return o;throw new Error(`Missing required parameter: ${l} for method '${s}'`)}switch(a){case"string":o[l]=p;break;case"number":case"boolean":o[l]=JSON.parse(p);break}if(typeof o[l]!==a)throw new Error(`Invalid type: ${l} must be ${a}, got ${typeof o[l]} for method '${s}'`);return o},{name:s})}},H=e=>Object.entries(e).filter(([t])=>t!=="name"&&!isNaN(Number(t))).map(([t,n])=>n),De=M(["code(lang?: string, meta?: string)","quote()","dropdown(summary: string, open?: boolean, space?: string)"]),x=(e,t=1)=>`
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),Q=(e,t,n)=>`<${t}${n?` ${n}`:""}>${x(e)}</${t}>`,se=(e,t,n)=>{const s=De(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 x(`\`\`\`${i}${o}${x(e)}\`\`\``);case"quote":return n!=null&&n.inline&&!e.includes(`
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}`:x(Q(x(e),"blockquote"));case"dropdown":const l=Q(I(s.summary),"summary");return x(Q([l,e].join(`
9
- `),"details",s.open?"open":void 0))}};class v{constructor(...t){_(this,"_intervals",[]);_(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,c)=>l[0]-c[0]);const r=[];let[i,o]=n[0];for(let l=1;l<n.length;l++){const[c,a]=n[l];c<=o?o=Math.max(o,a):(r.push([i,o]),i=c,o=a)}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[c,a]of r){if(o<=c||i>=a){l.push([c,a]);continue}i>c&&l.push([c,i]),o<a&&l.push([o,a])}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=Pe(s[0]).trim();n.push({range:r,value:i})}return n},Pe=e=>e.startsWith("//")?e.slice(2):e.startsWith("/*")?e.slice(2,-2):e.startsWith("<!--")?e.slice(4,-3):e,We=["p↓:","pd:","parkdown:"];M(["splice(delete?: number, insert?: string)"]);const re=(e,t)=>e.range[0]-t.range[0],G=(e,t,n)=>(n??q(e)).filter(({value:s})=>s.split(" ").includes(t)).sort(re),ie=e=>({isSpace:e===" ",isNewline:e===`
10
- `||e===void 0}),oe=e=>We.flatMap(t=>G(e,t)).sort((t,n)=>t.range[0]-n.range[0]).reverse().reduce((t,{range:[n,s],value:r})=>{const i=(b,E)=>t.slice(0,b)+t.slice(E),o=ie(t[n-1]),l=ie(t[s]),c=s===t.length;let a=n;for(;a>0&&t[a-1]!==`
11
- `;)a--;let m=s;for(;m<t.length&&t[m]!==`
12
- `;)m++;const p=t.slice(a,n).trim()===""&&t.slice(s,m).trim()==="";return o.isNewline&&l.isNewline?i(n-(c?1:0),s+1):o.isNewline||p?i(a,s+(l.isSpace||l.isNewline?1:0)):i(n-(o.isSpace?1:0),s)},e),Le=M(["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=G(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(...G(e,t,n).map(({range:s})=>s)),D=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[c,...a]=e.slice(o.range[1],l.range[0]),m=a[a.length-1];r.push(o.range[0],o.range[1]+(c.trim()?0:1)),r.push(l.range[0],l.range[1]+(m.trim()?0:1))}return D(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 c=s([l.range[1],l.range[1]+1]).at(-1);r.push(o.range[0],c===`
13
- `?l.range[1]+1:l.range[1])}return D(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),D(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):"",c=s??0,a=q(e),m=new v(...a.map(({range:p})=>p));return C(e,t,a).map(p=>p[n==="start"?0:1]).sort(re).reverse().reduce((p,{range:b})=>{const E=new v,W=o?1:-1;let T=Math.abs(c),h=o?b[1]:b[0];for(;T>0&&h<p.length&&h>=0;)m.test(h)||(E.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(E.offset(o?0:l.length)).slice(p)},e)},Ge=(e,t,n,s,r)=>{if(!t)return e;let i="",o=0;[n,s]=[n,s??""].map(l=>I(l,r));for(const[l,c]of C(e,t))i+=e.slice(o,l.range[1]),i+=e.slice(l.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},le=(e,t,n)=>{var i,o,l,c;if(!t)return e;const s=a=>/\s/.test(e[a]),r=new v;for(const[a,m]of C(e,t)){if((i=n.start)!=null&&i.left){let p=a.range[0]-1;for(;s(p);)r.push(p--)}if((o=n.start)!=null&&o.right){let p=a.range[1];for(;s(p);)r.push(p++)}if((l=n.end)!=null&&l.left){let p=m.range[0]-1;for(;s(p);)r.push(p--)}if((c=n.end)!=null&&c.right){let p=m.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 oe(e);const s=Le(t);switch(s.name){case"extract":e=Be(e,s.id,...H(s));break;case"remove":e=Fe(e,s.id,...H(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,c=s.name==="splice-start"?"start":"end";e=Qe(e,l,c,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=le(e,o,{[l]:{left:r??!0,right:i??!0}});break}case"trim":{const{inside:r,outside:i,id:o}=s;e=le(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"?oe(e):e,n?D(e):e},Xe=["recipe(id: string)"],Je=["recipe(id: string, 0?: string, 1?: string, 2?: string)"],ce={register:M(Xe),apply:M(Je)},R=class R{constructor(){_(this,"recipes",new Map)}tryRegister(t){const n=R.Entries(t);for(let s=0;s<n.length;s++){const[r,i]=n[s];if(r!=="register")continue;const o=ce.register(i);switch(o.name){case"recipe":const l=n.slice(s+1).filter(([c])=>c!=="register").map(([c,a])=>`${c}=${a}`).join("&");this.recipes.set(o.id,l);break;default:throw new Error(`Unknown registration: ${o.name}`)}}}apply(t){const n=R.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=ce.apply(o);switch(l.name){case"recipe":s.push(this.recipes.get(l.id)),s.push(...H(l).map(c=>this.recipes.get(c)));break;default:throw new Error(`Unknown registration: ${l.name}`)}}return s.join("&")}};_(R,"Entries",t=>Array.from(new URLSearchParams(t).entries()));let z=R;const Ze=["http","./","../","?"],Ke=({url:e})=>Ze.some(t=>e.startsWith(t)),Ye=e=>U(e)&&Ee(e)&&Ke(e),ae=({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)}},pe=e=>t=>U(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)(ae(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()},ue=(e,t)=>{t??(t=B.md(e));const n=st(t),s=A(t,"link").filter(Ye),r=A(t,"html").sort($),i=r.filter(pe("begin")),o=r.filter(pe("end")),l=rt(i,o);return it(e,s,l).map(a=>Array.isArray(a)?tt(a[0],a[1].close,n(a[0])):et(a,n(a)))},ot=(e,{url:t})=>n=>e(g.join(g.dirname(t),n)),me=(...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=B.md(e));const s=A(n,"heading"),r=e.split(`
15
- `);for(const i of s){const{depth:o,position:{start:l,end:c}}=i,a=me(o,t),m=r[l.line-1].slice(o,c.column),p="#".repeat(a)+m;r[l.line-1]=p,i.depth=a}return r.join(`
16
- `)},de=e=>ue(e).reverse().sort($.reverse).reduce((t,n)=>Y(t,ae(n),n),e),ge=(e,t,n,s,r)=>{try{e=de(e),e=lt(e,t);const i=B.md(e),o=new z;return ue(e,i).sort($).reverse().map(l=>{var E,W,T;const{url:c,headingDepth:a}=l,[m,...p]=g.basename(c).split("?"),b=o.apply(p.join("?"));if(c.startsWith("?")){const S=(E=new K.URLSearchParams(b).get("register"))==null?void 0:E.split(F);S==null||S.forEach(L=>o.tryRegister(L))}else if(c.startsWith("./")||c.startsWith("../")){const h=m.split(".").pop()??"",S=g.dirname(c),L=g.join(S,m);let w=n(L);const j=new K.URLSearchParams(b),V=(W=(k=>{const y=Array.from(j.entries()).filter(([N])=>N===k).map(([N,Z])=>Z);return y.length>=1?y.join(","):void 0})("region"))==null?void 0:W.split(F);w=(V==null?void 0:V.reduce((k,y,N,{length:Z})=>Ve(k,y,N===Z-1),w))??w;const at=j.has("skip"),pt=j.get("heading")??0,ut=j.has("inline");let{inline:X}=l;if(ut&&(X=!0),!at)if(h==="md"){const k=ot(n,l),y=r?g.join(r,S):S,N=me(a,Number(pt));w=ge(w,N,k,L,y)}else/^(js|ts)x?|svelte$/i.test(h)&&(w=se(w,"code",{extension:h,inline:X}));const J=(T=j.get("wrap"))==null?void 0:T.split(F);return w=(J==null?void 0:J.reduce((k,y)=>se(k,y,{extension:h,inline:X}),w))??w,{target:l,content:nt(l,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((l,{target:c,content:a})=>Y(l,a,c),e)}catch(i){throw new Error(`Error populating inclusions in file ${s??"(unknown)"}: ${i}`)}},he=e=>d.readFileSync(e,"utf-8"),fe=e=>{const t=g.resolve(e),n=g.dirname(t);return{content:he(t),dir:n,path:t}},ve=(e,t=!0,n)=>{const{dir:s,path:r,content:i}=fe(e);n==null||n.unwatch(r),n==null||n.once("change",(c,a)=>{console.log(`Change detected in "${c}". Regenerating "${r}"...`),ve(e,t,n)});const l=ge(i,0,c=>{const a=g.resolve(s,Ne(c));return n==null||n.add(a),he(a)},r);return t&&d.writeFileSync(r,l),n==null||n.add(r),l},ct=(e,t=!0,n)=>{const{path:s,content:r}=fe(e),i=de(r);return t&&d.writeFileSync(s,i),i};u.depopulateMarkdownInclusions=ct,u.populateMarkdownInclusions=ve,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"})});
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"})});
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@p-buddy/parkdown",
3
3
  "type": "module",
4
4
  "private": false,
5
- "version": "0.0.23",
5
+ "version": "0.0.25",
6
6
  "main": "./dist/index.js",
7
7
  "bin": "./dist/cli.js",
8
8
  "files": [