@p-buddy/parkdown 0.0.10 → 0.0.11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command as t } from "@commander-js/extra-typings";
3
3
  import { populateMarkdownInclusions as l, depopulateMarkdownInclusions as r } from "@p-buddy/parkdown";
4
- const f = "0.0.10", p = new t().version(f).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", (s, o) => (o.push(s), o), new Array()).parse(), { inclusions: c, depopulate: u, file: n, write: i } = p.opts();
4
+ const f = "0.0.11", p = new t().version(f).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", (s, o) => (o.push(s), o), new Array()).parse(), { inclusions: c, depopulate: u, file: n, write: i } = p.opts();
5
5
  n.length === 0 && n.push("README.md");
6
6
  const a = [
7
7
  [l, !c],
package/dist/index.js CHANGED
@@ -1,20 +1,20 @@
1
- var we = Object.defineProperty;
2
- var ve = (e, t, n) => t in e ? we(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
- var U = (e, t, n) => ve(e, typeof t != "symbol" ? t + "" : t, n);
4
- import { writeFileSync as ee, readFileSync as $e } from "node:fs";
5
- import { basename as Ce, dirname as O, join as S, resolve as te } from "node:path";
6
- import { URLSearchParams as ye } from "node:url";
7
- import { unified as Ee } from "unified";
8
- import xe from "remark-parse";
9
- import { visit as Se } from "unist-util-visit";
10
- import { dedent as A } from "ts-dedent";
11
- const f = (e, t) => e.position.start.offset - t.position.start.offset;
12
- f.reverse = (e, t) => f(t, e);
13
- const j = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, be = Ee().use(xe), D = {
14
- md: (e) => be.parse(e)
15
- }, b = (e, t) => {
1
+ var fe = Object.defineProperty;
2
+ var de = (e, t, n) => t in e ? fe(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
+ var B = (e, t, n) => de(e, typeof t != "symbol" ? t + "" : t, n);
4
+ import { writeFileSync as Z, readFileSync as ve } from "node:fs";
5
+ import { basename as we, dirname as O, join as y, resolve as K } from "node:path";
6
+ import { URLSearchParams as $e } from "node:url";
7
+ import { unified as Ce } from "unified";
8
+ import Ee from "remark-parse";
9
+ import { visit as ye } from "unist-util-visit";
10
+ import { dedent as R } from "ts-dedent";
11
+ const g = (e, t) => e.position.start.offset - t.position.start.offset;
12
+ g.reverse = (e, t) => g(t, e);
13
+ const j = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, Se = Ce().use(Ee), A = {
14
+ md: (e) => Se.parse(e)
15
+ }, S = (e, t) => {
16
16
  const n = [];
17
- return Se(e, (s, o, r) => {
17
+ return ye(e, (s, o, r) => {
18
18
  if (s.type !== "root") {
19
19
  if (t && s.type !== t) return;
20
20
  if (j(s)) {
@@ -23,22 +23,22 @@ const j = (e) => e.position !== void 0 && e.position.start.offset !== void 0 &&
23
23
  }
24
24
  }
25
25
  }), n;
26
- }, Ne = (e) => e.children.length === 0, ne = (e, t, ...n) => {
26
+ }, xe = (e) => e.children.length === 0, Y = (e, t, ...n) => {
27
27
  if (n.length === 0) throw new Error("No nodes to replace content from");
28
- n.sort(f);
28
+ n.sort(g);
29
29
  const s = n.at(0), o = n.at(-1);
30
30
  return e.slice(0, s.position.start.offset) + t + e.slice(o.position.end.offset);
31
- }, ke = (e, t, n) => {
31
+ }, Ne = (e, t, n) => {
32
32
  const s = Math.min(t.position.end.offset, n.position.end.offset), o = Math.max(t.position.start.offset, n.position.start.offset);
33
33
  return e.slice(s, o);
34
- }, x = (...e) => e.join(" "), Me = (...e) => e.join(`
35
- `), _e = (e) => {
34
+ }, E = (...e) => e.join(" "), be = (...e) => e.join(`
35
+ `), ke = (e) => {
36
36
  const t = e.split("?");
37
37
  return t.length > 1 ? [t.slice(0, -1).join("?"), t.at(-1)] : [e, ""];
38
- }, Re = (e) => _e(e)[0];
39
- class v {
38
+ }, Me = (e) => ke(e)[0];
39
+ class d {
40
40
  constructor(...t) {
41
- U(this, "intervals", []);
41
+ B(this, "intervals", []);
42
42
  for (const [n, s] of t)
43
43
  this.push(n, s);
44
44
  }
@@ -78,7 +78,7 @@ class v {
78
78
  return this.intervals = o;
79
79
  }
80
80
  }
81
- const T = /,\s*(?![^()]*\))/, Q = {
81
+ const F = /,\s*(?![^()]*\))/, U = {
82
82
  reserved: {
83
83
  semi: ";",
84
84
  slash: "/",
@@ -102,9 +102,11 @@ const T = /,\s*(?![^()]*\))/, Q = {
102
102
  tilde: "~",
103
103
  square: "[",
104
104
  unsquare: "]",
105
- tick: "`"
105
+ tick: "`",
106
+ line: `
107
+ `
106
108
  }
107
- }, Pe = "-", G = {
109
+ }, _e = "-", G = {
108
110
  static: [
109
111
  ["'''", '"'],
110
112
  ["''", "'"],
@@ -112,24 +114,24 @@ const T = /,\s*(?![^()]*\))/, Q = {
112
114
  [/p↓:\s+/g, ""]
113
115
  ],
114
116
  url: [
115
- ...Object.entries(Q.unsafe),
116
- ...Object.entries(Q.reserved)
117
+ ...Object.entries(U.unsafe),
118
+ ...Object.entries(U.reserved)
117
119
  ]
118
- }, H = (e, [t, n]) => e.replaceAll(t, n), se = (e, t = Pe) => {
120
+ }, H = (e, [t, n]) => e.replaceAll(t, n), D = (e, t = _e) => {
119
121
  const n = G.static.reduce(H, e);
120
122
  return G.url.map(([s, o]) => [t + s + t, o]).reduce(H, n).replaceAll(t, " ");
121
- }, Te = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), Oe = ["string", "number", "boolean"], Ae = (e) => Oe.includes(e), je = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, De = (e) => {
123
+ }, Te = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), Oe = ["string", "number", "boolean"], Re = (e) => Oe.includes(e), je = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, Ae = (e) => {
122
124
  const t = e.match(je);
123
125
  if (!t) throw new Error(`Invalid invocation: ${e}`);
124
126
  const [, n, s = ""] = t;
125
127
  if (!s.trim()) return { name: n, parameters: [] };
126
- const o = Le(s);
128
+ const o = Ie(s);
127
129
  return { name: n, parameters: o };
128
- }, Ie = (e, t) => {
130
+ }, De = (e, t) => {
129
131
  for (let n = t + 1; n < e.length; n++)
130
132
  if (e[n] !== void 0) return !1;
131
133
  return !0;
132
- }, Le = (e) => {
134
+ }, Ie = (e) => {
133
135
  const t = [];
134
136
  let n = "", s = !1;
135
137
  for (let o = 0; o < e.length; o++) {
@@ -139,8 +141,8 @@ const T = /,\s*(?![^()]*\))/, Q = {
139
141
  s = !s, n += c ? "'''" : "''", o += c ? 2 : 1;
140
142
  } else i ? (s = !s, n += r) : r === "," && !s ? (t.push(n.trim()), n = "") : n += r;
141
143
  }
142
- return t.push(n.trim()), t.map((o) => o === "" ? void 0 : o ? qe(o) : void 0).filter((o, r, i) => o !== void 0 || !Ie(i, r));
143
- }, qe = (e) => {
144
+ return t.push(n.trim()), t.map((o) => o === "" ? void 0 : o ? Pe(o) : void 0).filter((o, r, i) => o !== void 0 || !De(i, r));
145
+ }, Pe = (e) => {
144
146
  const t = e.length >= 2 && e[0] === "'" && e.at(-1) === "'", n = t && e.length >= 4 && e[1] === "'" && e.at(-2) === "'";
145
147
  return !t || n ? e : e.slice(1, -1);
146
148
  }, We = (e) => {
@@ -151,9 +153,9 @@ const T = /,\s*(?![^()]*\))/, Q = {
151
153
  const r = /(\w+)(\?)?:\s*([^,]+)/g, i = [];
152
154
  let c;
153
155
  for (; (c = r.exec(o)) !== null; ) {
154
- const [, l, a, p] = c, m = p.trim();
155
- if (!Ae(m)) throw new Error(`Unsupported type: ${m}`);
156
- i.push({ name: l, optional: a === "?", type: m });
156
+ const [, l, a, u] = c, p = u.trim();
157
+ if (!Re(p)) throw new Error(`Unsupported type: ${p}`);
158
+ i.push({ name: l, optional: a === "?", type: p });
157
159
  }
158
160
  return { name: s, parameters: i };
159
161
  }, I = (e) => {
@@ -162,7 +164,7 @@ const T = /,\s*(?![^()]*\))/, Q = {
162
164
  /* @__PURE__ */ new Map()
163
165
  );
164
166
  return (n) => {
165
- const { name: s, parameters: o } = De(n);
167
+ const { name: s, parameters: o } = Ae(n);
166
168
  if (!t.has(s))
167
169
  throw new Error(`Unknown method: ${s}`);
168
170
  const r = t.get(s);
@@ -172,19 +174,19 @@ const T = /,\s*(?![^()]*\))/, Q = {
172
174
  const i = r.filter(({ optional: l }) => !l).length, c = i === r.length ? i.toString() : `${i} - ${r.length}`;
173
175
  throw new Error(`Too many parameters: ${o.length} for method '${s}' (expected: ${c})`);
174
176
  }
175
- return r.reduce((i, { name: c, optional: l, type: a }, p) => {
176
- const m = o[p];
177
- if (m === void 0) {
177
+ return r.reduce((i, { name: c, optional: l, type: a }, u) => {
178
+ const p = o[u];
179
+ if (p === void 0) {
178
180
  if (l) return i;
179
181
  throw new Error(`Missing required parameter: ${c} for method '${s}'`);
180
182
  }
181
183
  switch (a) {
182
184
  case "string":
183
- i[c] = m;
185
+ i[c] = p;
184
186
  break;
185
187
  case "number":
186
188
  case "boolean":
187
- i[c] = JSON.parse(m);
189
+ i[c] = JSON.parse(p);
188
190
  break;
189
191
  }
190
192
  if (typeof i[c] !== a)
@@ -192,7 +194,7 @@ const T = /,\s*(?![^()]*\))/, Q = {
192
194
  return i;
193
195
  }, { name: s });
194
196
  };
195
- }, z = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), Be = [
197
+ }, Q = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), Le = [
196
198
  /**
197
199
  * Wraps the content in a markdown-formatted code block.
198
200
  * @param lang The language of the code block (defaults to the file extension).
@@ -222,65 +224,51 @@ const T = /,\s*(?![^()]*\))/, Q = {
222
224
  * @example [](<url>?wrap=dropdown(hello_world,,_))
223
225
  */
224
226
  "dropdown(summary: string, open?: boolean, space?: string)"
225
- ], Fe = I(Be), w = (e, t = 1) => `
227
+ ], qe = I(Le), f = (e, t = 1) => `
226
228
  `.repeat(t) + e + `
227
- `.repeat(t), P = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${w(e)}</${t}>`, X = (e, t, n) => {
228
- const s = Fe(t);
229
+ `.repeat(t), T = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${f(e)}</${t}>`, z = (e, t, n) => {
230
+ const s = qe(t);
229
231
  switch (s.name) {
230
232
  case "code":
231
233
  if (!s.lang && !s.meta && (n == null ? void 0 : n.inline) && !e.includes(`
232
234
  `)) return `\`${e}\``;
233
235
  const r = s.lang ?? (n == null ? void 0 : n.extension) ?? "", i = s.meta ? ` ${s.meta}` : "";
234
- return w(`\`\`\`${r}${i}${w(e)}\`\`\``);
236
+ return f(`\`\`\`${r}${i}${f(e)}\`\`\``);
235
237
  case "quote":
236
238
  return n != null && n.inline && !e.includes(`
237
239
 
238
- `) ? `> ${e}` : w(P(w(e), "blockquote"));
240
+ `) ? `> ${e}` : f(T(f(e), "blockquote"));
239
241
  case "dropdown":
240
- const c = P(se(s.summary), "summary");
241
- return w(P([c, e].join(`
242
+ const c = T(D(s.summary), "summary");
243
+ return f(T([c, e].join(`
242
244
  `), "details", s.open ? "open" : void 0));
243
245
  }
244
- }, L = (e) => {
246
+ }, P = (e) => {
245
247
  const t = /(\/\/[^\n]*|\/\*[\s\S]*?\*\/|<!--[\s\S]*?-->)/gm, n = [];
246
248
  let s;
247
249
  for (; (s = t.exec(e)) !== null; ) {
248
- const o = [s.index, s.index + s[0].length], r = Ue(s[0]).trim();
250
+ const o = [s.index, s.index + s[0].length], r = Be(s[0]).trim();
249
251
  n.push({ range: o, value: r });
250
252
  }
251
253
  return n;
252
- }, Ue = (e) => e.startsWith("//") ? e.slice(2) : e.startsWith("/*") ? e.slice(2, -2) : e.startsWith("<!--") ? e.slice(4, -3) : e, oe = [
254
+ }, Be = (e) => e.startsWith("//") ? e.slice(2) : e.startsWith("/*") ? e.slice(2, -2) : e.startsWith("<!--") ? e.slice(4, -3) : e, ee = [
253
255
  "p↓:",
254
256
  "pd:",
255
257
  "parkdown:"
256
- ], Qe = [
258
+ ], Fe = [
257
259
  "splice(delete?: number, insert?: string)"
258
- ], V = I(Qe), d = (e, t, n) => (n ?? L(e)).filter(({ value: s }) => s.includes(t)).sort((s, o) => s.range[0] - o.range[0]), J = (e) => ({
260
+ ];
261
+ I(Fe);
262
+ const te = (e, t) => e.range[0] - t.range[0], ne = (e, t, n) => (n ?? P(e)).filter(({ value: s }) => s.includes(t)).sort(te), X = (e) => ({
259
263
  isSpace: e === " ",
260
264
  isNewline: e === `
261
265
  ` || e === void 0
262
- }), Z = (e) => oe.flatMap((t) => d(e, t)).sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, s], value: o }) => {
263
- const r = (a, p) => t.slice(0, a) + t.slice(p), i = J(t[n - 1]), c = J(t[s]), l = s === t.length;
266
+ }), V = (e) => ee.flatMap((t) => ne(e, t)).sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, s], value: o }) => {
267
+ const r = (a, u) => t.slice(0, a) + t.slice(u), i = X(t[n - 1]), c = X(t[s]), l = s === t.length;
264
268
  return i.isNewline && c.isNewline ? r(n - (l ? 1 : 0), s + 1) : i.isNewline ? r(n, s + (c.isSpace ? 1 : 0)) : r(n - (i.isSpace ? 1 : 0), s);
265
- }, e), re = oe.map((e) => new RegExp(`^${Te(e)}(\\?[^\\s]+)`)), Ge = (e) => re.map((t) => {
266
- var n;
267
- return (n = t.exec(e)) == null ? void 0 : n[1];
268
- }).filter(Boolean).map((t) => new URLSearchParams(t))[0], q = (e, t) => (Array.isArray(t) ? t.flatMap((n) => d(e, n)) : d(e, t)).filter(({ value: n }) => re.some((s) => s.test(n))).sort((n, s) => n.range[0] - s.range[0]).reverse().reduce((n, { range: [s, o], value: r }) => {
269
- var l, a;
270
- const i = Ge(r), c = ["back", "front"].map((p) => [p, i.get(p)]).filter(([p, m]) => !!m).reduce(
271
- (p, [m, u]) => p.set(m, u.split(T)),
272
- /* @__PURE__ */ new Map()
273
- );
274
- return n = ((l = c.get("back")) == null ? void 0 : l.reduce((p, m) => {
275
- const u = V(m);
276
- if (u.name === "splice")
277
- return p.slice(0, o) + (u.insert ?? "") + p.slice(o + (u.delete ?? 0));
278
- }, n)) ?? n, n = ((a = c.get("front")) == null ? void 0 : a.reduce((p, m) => {
279
- const u = V(m);
280
- if (u.name === "splice")
281
- return p.slice(0, s - (u.delete ?? 0)) + (u.insert ?? "") + p.slice(s);
282
- }, n)) ?? n, n;
283
- }, e), He = [
269
+ }, e);
270
+ ee.map((e) => new RegExp(`^${Te(e)}(\\?[^\\s]+)`));
271
+ const Ue = [
284
272
  /**
285
273
  * Extract regions from the retrieved content between comments that INCLUDE the specified ids.
286
274
  * @param id The id of the comment to extract.
@@ -306,106 +294,130 @@ const T = /,\s*(?![^()]*\))/, Q = {
306
294
  * @param id The id of the comment to replace.
307
295
  * @param with The replacement content (if ommitted, the content of the detected comment will be used).
308
296
  * @param space The space character to use between words in the replacement content (defaults to `-`).
309
- * @param expandLeft ADVANCED: The number of characters to expand the left side of the comment.
310
- * @param expandRight ADVANCED: The number of characters to expand the right side of the comment.
311
297
  * @example [](<url>?region=replace(specifier))
312
298
  * @example [](<url>?region=replace(specifier,new-content))
313
299
  * @example [](<url>?region=replace(specifier,new_content,_)
314
300
  */
315
- "replace(id: string, with?: string, space?: string, expandLeft?: number, expandRight?: number)"
316
- ], ze = I(He), Xe = (e, ...t) => {
301
+ "replace(id: string, with?: string, space?: string)",
302
+ /**
303
+ * Splice the retrieved content at the boundary of a comment region (which must INCLUDE the specified id).
304
+ *
305
+ * **NOTE:** Unlike `extract`, `remove`, and `replace`, `splice` does remove the comment from the content after processing.
306
+ * @param id The id of the comment regions to act on.
307
+ * @param deleteCount The number of characters to delete at either the beginning or end of the comment region.
308
+ * Specifying a number greater than or equal to 0 indicates the action should be taken at the end of the comment region.
309
+ * Specifying undefined or a number less than 0 indicates the action should be taken at the beginning of the comment region.
310
+ * @param insert The content to insert.
311
+ * @param space The space character to use between words in the content to insert (defaults to `-`).
312
+ * @example [](<url>?region=splice(specifier,-1)) // Delete one character at the beginning of the comment region.
313
+ * @example [](<url>?region=splice(specifier,undefined,new-content)) // Insert at the beginning of the comment region.
314
+ * @example [](<url>?region=splice(specifier,0,new-content)) // Insert at the end of the comment region.
315
+ * @example [](<url>?region=splice(specifier,1,new-content)) // Delete one character at the end of the comment region and insert.
316
+ */
317
+ "splice(id: string, deleteCount?: number, insert?: string, space?: string)",
318
+ /**
319
+ * Remap the content within a comment region (which must INCLUDE the specified id).
320
+ *
321
+ * **NOTE:** Unlike `extract`, `remove`, and `replace`, `remap` does not remove the comment from the content after processing.
322
+ * @param id The id of the comment regions to act on.
323
+ * @param from The content to replace.
324
+ * @param to The content to replace with.
325
+ * @param space The space character to use between words in the content to replace (defaults to `-`).
326
+ * @example [](<url>?region=remap(specifier,hello-world,hello-universe))
327
+ * @example [](<url>?region=remap(specifier,hello_world,hello_universe,_)
328
+ */
329
+ "remap(id: string, from: string, to: string, space?: string)"
330
+ ], Ge = I(Ue), C = (e, t, n) => {
331
+ const s = ne(e, t, n), o = [];
332
+ for (let r = 0; r < s.length - 1; r += 2)
333
+ o.push([s[r], s[r + 1]]);
334
+ return o;
335
+ }, He = (e, ...t) => {
317
336
  if (t.length === 0) return e;
318
- e = q(e, t);
319
- const n = L(e), s = ([i, c]) => e.slice(i, c), o = new v(), r = new v();
320
- for (const i of t) {
321
- const c = d(e, i, n);
322
- for (let l = 0; l < c.length - 1; l += 2) {
323
- const a = c[l], p = c[l + 1];
324
- o.push(a.range[1], p.range[0]);
325
- const [m, ...u] = s([a.range[1], p.range[0]]), $ = u[u.length - 1];
326
- r.push(a.range[0], a.range[1] + (m.trim() ? 0 : 1)), r.push(p.range[0], p.range[1] + ($.trim() ? 0 : 1));
337
+ const n = P(e), s = ([i, c]) => e.slice(i, c), o = new d(), r = new d();
338
+ for (const i of t)
339
+ for (const [c, l] of C(e, i, n)) {
340
+ o.push(c.range[1], l.range[0]);
341
+ const [a, ...u] = s([c.range[1], l.range[0]]), p = u[u.length - 1];
342
+ r.push(c.range[0], c.range[1] + (a.trim() ? 0 : 1)), r.push(l.range[0], l.range[1] + (p.trim() ? 0 : 1));
327
343
  }
328
- }
329
- return o.collapse(), r.collapse(), A(
344
+ return o.collapse(), r.collapse(), R(
330
345
  o.subtract(r).map(s).filter(Boolean).join("")
331
346
  ).trim();
332
- }, Ve = (e, ...t) => {
347
+ }, Qe = (e, ...t) => {
333
348
  if (t.length === 0) return e;
334
- e = q(e, t);
335
- const n = L(e), s = ([i, c]) => e.slice(i, c), o = new v();
336
- for (const i of t) {
337
- const c = d(e, i, n);
338
- for (let l = 0; l < c.length - 1; l += 2) {
339
- const a = c[l], p = c[l + 1], m = s([p.range[1], p.range[1] + 1]).at(-1);
340
- o.push(a.range[0], m === `
341
- ` ? p.range[1] + 1 : p.range[1]);
349
+ const n = P(e), s = ([i, c]) => e.slice(i, c), o = new d();
350
+ for (const i of t)
351
+ for (const [c, l] of C(e, i, n)) {
352
+ const a = s([l.range[1], l.range[1] + 1]).at(-1);
353
+ o.push(c.range[0], a === `
354
+ ` ? l.range[1] + 1 : l.range[1]);
342
355
  }
343
- }
344
356
  o.collapse();
345
- const r = new v();
346
- return r.push(0, e.length), r.subtract(o), A(
357
+ const r = new d([0, e.length]);
358
+ return r.subtract(o), R(
347
359
  r.collapse().map(s).filter(Boolean).join("")
348
360
  ).trim();
349
- }, K = (e, t) => {
350
- const n = d(e, t), s = [];
351
- for (let o = 0; o < n.length - 1; o += 2)
352
- s.push([n[o], n[o + 1]]);
353
- return s;
354
- }, Je = (e, t, n) => {
355
- const [s, o] = n;
356
- return e && (s.range[0] -= e), t && (o.range[1] += t), n;
357
- }, Ze = (e, t, n, s, o, r) => {
358
- if (!t || (e = q(e, t), d(e, t).length < 2)) return e;
359
- let c = "", l = 0;
360
- const a = Je.bind(null, o, r);
361
- for (const [m, u] of K(e, t).map(a))
362
- c += e.slice(l, m.range[1]), c += se(n ?? m.value, s), l = u.range[0];
363
- c += e.slice(l);
364
- const p = new v();
365
- return p.push(0, c.length), p.subtract(new v(
366
- ...K(c, t).map(a).flatMap(([m, u]) => [m.range, u.range])
367
- )), A(
368
- p.collapse().map(([m, u]) => c.slice(m, u)).filter(Boolean).join("")
361
+ }, ze = (e, t, n, s) => {
362
+ if (!t) return e;
363
+ let o = "", r = 0;
364
+ for (const [c, l] of C(e, t))
365
+ o += e.slice(r, c.range[1]), o += D(n ?? c.value, s), r = l.range[0];
366
+ o += e.slice(r);
367
+ const i = new d([0, o.length]);
368
+ return i.subtract(new d(
369
+ ...C(o, t).flatMap(([c, l]) => [c.range, l.range])
370
+ )), R(
371
+ i.collapse().map(([c, l]) => o.slice(c, l)).filter(Boolean).join("")
369
372
  ).trim();
370
- }, Ke = (e, t, n) => {
371
- if (!t) return Z(e);
372
- const s = ze(t);
373
+ }, Xe = (e, t, n, s, o) => {
374
+ if (!t) return e;
375
+ const r = n === void 0 ? !1 : n >= 0, i = s ? D(s, o) : "", c = n ?? 0;
376
+ return C(e, t).map((l) => l[r ? 1 : 0]).sort(te).reverse().reduce(
377
+ (l, { range: a }) => r ? l.slice(0, a[1]) + i + l.slice(Math.min(a[1] + c, l.length)) : l.slice(0, Math.max(a[0] + c, 0)) + i + l.slice(a[0]),
378
+ e
379
+ );
380
+ }, Ve = (e, t, n) => {
381
+ if (!t) return V(e);
382
+ const s = Ge(t);
373
383
  switch (s.name) {
374
384
  case "extract":
375
- e = Xe(e, s.id, ...z(s));
385
+ e = He(e, s.id, ...Q(s));
376
386
  break;
377
387
  case "remove":
378
- e = Ve(e, s.id, ...z(s));
388
+ e = Qe(e, s.id, ...Q(s));
379
389
  break;
380
390
  case "replace":
381
- const { with: o, id: r, space: i, expandLeft: c, expandRight: l } = s;
382
- e = Ze(e, r, o, i, c, l);
391
+ e = ze(e, s.id, s.with, s.space);
392
+ break;
393
+ case "splice":
394
+ e = Xe(e, s.id, s.deleteCount, s.insert, s.space);
383
395
  break;
384
396
  }
385
- return n ? Z(e) : e;
386
- }, Ye = ["http", "./", "../"], et = ({ url: e }) => Ye.some((t) => e.startsWith(t)), tt = (e) => j(e) && Ne(e) && et(e), ie = ({ url: e }, t) => `[](${t ? S(t, e) : e})`, h = {
397
+ return n ? V(e) : e;
398
+ }, Je = ["http", "./", "../"], Ze = ({ url: e }) => Je.some((t) => e.startsWith(t)), Ke = (e) => j(e) && xe(e) && Ze(e), se = ({ url: e }, t) => `[](${t ? y(t, e) : e})`, m = {
387
399
  _open: "<!--",
388
400
  _close: "-->",
389
401
  _flag: "p↓",
390
402
  get begin() {
391
- return x(h._open, h._flag, "BEGIN", h._close);
403
+ return E(m._open, m._flag, "BEGIN", m._close);
392
404
  },
393
405
  get end() {
394
- return x(h._open, h._flag, "END", h._close);
406
+ return E(m._open, m._flag, "END", m._close);
395
407
  },
396
408
  lengthOf(e) {
397
409
  const t = `lines: ${e.split(`
398
410
  `).length}`, n = `chars: ${e.length}`;
399
- return x(h._open, h._flag, "length", t, n, h._close);
411
+ return E(m._open, m._flag, "length", t, n, m._close);
400
412
  }
401
- }, Y = (e) => (t) => j(t) && t.value === h[e], nt = ({ position: e, url: t, siblingCount: n }, s) => ({ position: e, url: t, headingDepth: s, inline: n >= 1 }), st = ({ position: { start: e }, url: t, siblingCount: n }, { position: { end: s } }, o) => ({ position: { start: e, end: s }, url: t, headingDepth: o, inline: n >= 1 }), ot = (e, t, n) => (e.inline ? x : Me)(
402
- ie(e, n),
403
- h.begin,
404
- h.lengthOf(t),
413
+ }, J = (e) => (t) => j(t) && t.value === m[e], Ye = ({ position: e, url: t, siblingCount: n }, s) => ({ position: e, url: t, headingDepth: s, inline: n >= 1 }), et = ({ position: { start: e }, url: t, siblingCount: n }, { position: { end: s } }, o) => ({ position: { start: e, end: s }, url: t, headingDepth: o, inline: n >= 1 }), tt = (e, t, n) => (e.inline ? E : be)(
414
+ se(e, n),
415
+ m.begin,
416
+ m.lengthOf(t),
405
417
  t,
406
- h.end
407
- ), rt = (e) => {
408
- const t = b(e, "heading").reduce((n, { position: s, depth: o }) => n.set(s.start.line, o), /* @__PURE__ */ new Map());
418
+ m.end
419
+ ), nt = (e) => {
420
+ const t = S(e, "heading").reduce((n, { position: s, depth: o }) => n.set(s.start.line, o), /* @__PURE__ */ new Map());
409
421
  return (n) => {
410
422
  for (let s = n.position.start.line; s >= 1; s--) {
411
423
  const o = t.get(s);
@@ -413,113 +425,113 @@ const T = /,\s*(?![^()]*\))/, Q = {
413
425
  }
414
426
  return 0;
415
427
  };
416
- }, N = {
428
+ }, x = {
417
429
  openingCommentDoesNotFollowLink: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) does not follow link`),
418
430
  closingCommentNotMatchedToOpening: ({ position: { start: e } }) => new Error(`Closing comment (@${e.line}:${e.column}) does not match to opening comment`),
419
431
  openingCommentNotClosed: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) is not followed by a closing comment`)
420
- }, it = (e, t) => {
432
+ }, st = (e, t) => {
421
433
  const n = [], s = [
422
434
  ...e.map((r) => ({ node: r, type: "open" })),
423
435
  ...t.map((r) => ({ node: r, type: "close" }))
424
- ].sort((r, i) => f(r.node, i.node)), o = [];
436
+ ].sort((r, i) => g(r.node, i.node)), o = [];
425
437
  for (const r of s)
426
438
  if (r.type === "open") o.push(r);
427
439
  else {
428
440
  const i = r.node;
429
441
  if (o.length === 0)
430
- throw N.closingCommentNotMatchedToOpening(i);
442
+ throw x.closingCommentNotMatchedToOpening(i);
431
443
  const c = o.pop().node;
432
444
  if (o.length > 0) continue;
433
445
  n.push({ open: c, close: i });
434
446
  }
435
447
  if (o.length > 0)
436
- throw N.openingCommentNotClosed(o[0].node);
448
+ throw x.openingCommentNotClosed(o[0].node);
437
449
  return n;
438
- }, ct = (e, t, n) => {
439
- const s = [...t].sort(f), o = [];
440
- return [...n].sort((r, i) => f.reverse(r.open, i.open)).forEach((r) => {
450
+ }, ot = (e, t, n) => {
451
+ const s = [...t].sort(g), o = [];
452
+ return [...n].sort((r, i) => g.reverse(r.open, i.open)).forEach((r) => {
441
453
  for (; s.length > 0; ) {
442
454
  const i = s.pop();
443
455
  if (i.position.start.offset < r.open.position.start.offset) {
444
- if (ke(e, i, r.open).trim() !== "")
445
- throw N.openingCommentDoesNotFollowLink(r.open);
456
+ if (Ne(e, i, r.open).trim() !== "")
457
+ throw x.openingCommentDoesNotFollowLink(r.open);
446
458
  return o.push([i, r]);
447
459
  }
448
460
  o.push(i);
449
461
  }
450
- throw N.openingCommentDoesNotFollowLink(r.open);
462
+ throw x.openingCommentDoesNotFollowLink(r.open);
451
463
  }), o.push(...s.reverse()), o.reverse();
452
- }, ce = (e, t) => {
453
- t ?? (t = D.md(e));
454
- const n = rt(t), s = b(t, "link").filter(tt), o = b(t, "html").sort(f), r = o.filter(Y("begin")), i = o.filter(Y("end")), c = it(r, i);
455
- return ct(e, s, c).map((a) => Array.isArray(a) ? st(a[0], a[1].close, n(a[0])) : nt(a, n(a)));
456
- }, lt = (e, { url: t }) => (n) => e(S(O(t), n)), le = (...e) => {
464
+ }, oe = (e, t) => {
465
+ t ?? (t = A.md(e));
466
+ const n = nt(t), s = S(t, "link").filter(Ke), o = S(t, "html").sort(g), r = o.filter(J("begin")), i = o.filter(J("end")), c = st(r, i);
467
+ return ot(e, s, c).map((a) => Array.isArray(a) ? et(a[0], a[1].close, n(a[0])) : Ye(a, n(a)));
468
+ }, rt = (e, { url: t }) => (n) => e(y(O(t), n)), re = (...e) => {
457
469
  const t = e.reduce((n, s) => n + s, 0);
458
470
  return Math.min(Math.max(t, 1), 6);
459
- }, at = (e, t, n) => {
471
+ }, it = (e, t, n) => {
460
472
  if (t === 0) return e;
461
- n ?? (n = D.md(e));
462
- const s = b(n, "heading"), o = e.split(`
473
+ n ?? (n = A.md(e));
474
+ const s = S(n, "heading"), o = e.split(`
463
475
  `);
464
476
  for (const r of s) {
465
- const { depth: i, position: { start: c, end: l } } = r, a = le(i, t), p = o[c.line - 1].slice(i, l.column), m = "#".repeat(a) + p;
466
- o[c.line - 1] = m, r.depth = a;
477
+ const { depth: i, position: { start: c, end: l } } = r, a = re(i, t), u = o[c.line - 1].slice(i, l.column), p = "#".repeat(a) + u;
478
+ o[c.line - 1] = p, r.depth = a;
467
479
  }
468
480
  return o.join(`
469
481
  `);
470
- }, ae = (e) => ce(e).reverse().sort(f.reverse).reduce((t, n) => ne(t, ie(n), n), e), pe = (e, t, n, s, o) => {
482
+ }, ie = (e) => oe(e).reverse().sort(g.reverse).reduce((t, n) => Y(t, se(n), n), e), ce = (e, t, n, s, o) => {
471
483
  try {
472
- e = ae(e), e = at(e, t);
473
- const r = D.md(e);
474
- return ce(e, r).sort(f).reverse().map((i) => {
475
- var B, F;
476
- const { url: c, headingDepth: l } = i, [a, ...p] = Ce(c).split("?"), m = a.split(".").pop() ?? "", u = p.join("?"), $ = O(c), W = S($, a);
484
+ e = ie(e), e = it(e, t);
485
+ const r = A.md(e);
486
+ return oe(e, r).sort(g).reverse().map((i) => {
487
+ var L, q;
488
+ const { url: c, headingDepth: l } = i, [a, ...u] = we(c).split("?"), p = a.split(".").pop() ?? "", pe = u.join("?"), N = O(c), W = y(N, a);
477
489
  if (c.startsWith("./") || c.startsWith("../")) {
478
- let g = n(W);
479
- const C = new ye(u), k = (B = C.get("region")) == null ? void 0 : B.split(T);
480
- g = (k == null ? void 0 : k.reduce(
481
- (y, E, R, { length: de }) => Ke(y, E, R === de - 1),
482
- g
483
- )) ?? g;
484
- const he = C.has("skip"), ge = C.get("heading") ?? 0, fe = C.has("inline");
485
- let { inline: M } = i;
486
- if (fe && (M = !0), !he)
487
- if (m === "md") {
488
- const y = lt(n, i), E = o ? S(o, $) : $, R = le(l, Number(ge));
489
- g = pe(
490
- g,
490
+ let h = n(W);
491
+ const v = new $e(pe), b = (L = v.get("region")) == null ? void 0 : L.split(F);
492
+ h = (b == null ? void 0 : b.reduce(
493
+ (w, $, _, { length: ge }) => Ve(w, $, _ === ge - 1),
494
+ h
495
+ )) ?? h;
496
+ const me = v.has("skip"), ue = v.get("heading") ?? 0, he = v.has("inline");
497
+ let { inline: k } = i;
498
+ if (he && (k = !0), !me)
499
+ if (p === "md") {
500
+ const w = rt(n, i), $ = o ? y(o, N) : N, _ = re(l, Number(ue));
501
+ h = ce(
502
+ h,
491
503
  /** p↓: ... */
492
- R,
493
- y,
504
+ _,
505
+ w,
494
506
  W,
495
- E
507
+ $
496
508
  /** p↓: ... */
497
509
  );
498
- } else /^(js|ts)x?|svelte$/i.test(m) && (g = X(
499
- g,
510
+ } else /^(js|ts)x?|svelte$/i.test(p) && (h = z(
511
+ h,
500
512
  "code",
501
513
  /** p↓: ... */
502
- { extension: m, inline: M }
514
+ { extension: p, inline: k }
503
515
  /** p↓: ... */
504
516
  ));
505
- const _ = (F = C.get("wrap")) == null ? void 0 : F.split(T);
506
- return g = (_ == null ? void 0 : _.reduce((y, E) => X(y, E, { extension: m, inline: M }), g)) ?? g, { target: i, content: ot(i, g, o) };
517
+ const M = (q = v.get("wrap")) == null ? void 0 : q.split(F);
518
+ return h = (M == null ? void 0 : M.reduce((w, $) => z(w, $, { extension: p, inline: k }), h)) ?? h, { target: i, content: tt(i, h, o) };
507
519
  } else throw c.startsWith("http") ? new Error("External web links are not implemented yet") : new Error(`Unsupported link type: ${c}`);
508
- }).reduce((i, { target: c, content: l }) => ne(i, l, c), e);
520
+ }).reduce((i, { target: c, content: l }) => Y(i, l, c), e);
509
521
  } catch (r) {
510
522
  throw new Error(`Error populating inclusions in file ${s ?? "(unknown)"}: ${r}`);
511
523
  }
512
- }, me = (e) => $e(e, "utf-8"), ue = (e) => {
513
- const t = te(e), n = O(t);
514
- return { markdown: me(t), dir: n, path: t };
515
- }, vt = (e, t = !0) => {
516
- const { dir: n, path: s, markdown: o } = ue(e), i = pe(o, 0, (c) => me(te(n, Re(c))), s);
517
- return t && ee(s, i), i;
518
- }, $t = (e, t = !0) => {
519
- const { path: n, markdown: s } = ue(e), o = ae(s);
520
- return t && ee(n, o), o;
524
+ }, le = (e) => ve(e, "utf-8"), ae = (e) => {
525
+ const t = K(e), n = O(t);
526
+ return { markdown: le(t), dir: n, path: t };
527
+ }, ft = (e, t = !0) => {
528
+ const { dir: n, path: s, markdown: o } = ae(e), i = ce(o, 0, (c) => le(K(n, Me(c))), s);
529
+ return t && Z(s, i), i;
530
+ }, dt = (e, t = !0) => {
531
+ const { path: n, markdown: s } = ae(e), o = ie(s);
532
+ return t && Z(n, o), o;
521
533
  };
522
534
  export {
523
- $t as depopulateMarkdownInclusions,
524
- vt as populateMarkdownInclusions
535
+ dt as depopulateMarkdownInclusions,
536
+ ft as populateMarkdownInclusions
525
537
  };
@@ -1,13 +1,14 @@
1
- (function(m,h){typeof exports=="object"&&typeof module<"u"?h(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"],h):(m=typeof globalThis<"u"?globalThis:m||self,h(m.index={},m.node_fs,m.node_path,m.node_url,m.unified,m.remarkParse,m.unistUtilVisit,m.tsDedent))})(this,function(m,h,g,me,de,he,ge,T){"use strict";var on=Object.defineProperty;var rn=(m,h,g)=>h in m?on(m,h,{enumerable:!0,configurable:!0,writable:!0,value:g}):m[h]=g;var ue=(m,h,g)=>rn(m,typeof h!="symbol"?h+"":h,g);const v=(e,n)=>e.position.start.offset-n.position.start.offset;v.reverse=(e,n)=>v(n,e);const j=e=>e.position!==void 0&&e.position.start.offset!==void 0&&e.position.end.offset!==void 0,fe=de.unified().use(he),q={md:e=>fe.parse(e)},N=(e,n)=>{const t=[];return ge.visit(e,(s,o,r)=>{if(s.type!=="root"){if(n&&s.type!==n)return;if(j(s)){const i=((r==null?void 0:r.children.length)??0)-1;t.push({...s,siblingIndex:o,siblingCount:i})}}}),t},we=e=>e.children.length===0,B=(e,n,...t)=>{if(t.length===0)throw new Error("No nodes to replace content from");t.sort(v);const s=t.at(0),o=t.at(-1);return e.slice(0,s.position.start.offset)+n+e.slice(o.position.end.offset)},ve=(e,n,t)=>{const s=Math.min(n.position.end.offset,t.position.end.offset),o=Math.max(n.position.start.offset,t.position.start.offset);return e.slice(s,o)},b=(...e)=>e.join(" "),$e=(...e)=>e.join(`
2
- `),ye=e=>{const n=e.split("?");return n.length>1?[n.slice(0,-1).join("?"),n.at(-1)]:[e,""]},Ce=e=>ye(e)[0];class y{constructor(...n){ue(this,"intervals",[]);for(const[t,s]of n)this.push(t,s)}push(n,t){this.intervals.push([Math.min(n,t),Math.max(n,t)])}combine(n){this.intervals.push(...n.intervals)}collapse(){const{intervals:n}=this;if(!n.length)return this.intervals=[];n.sort((r,i)=>r[0]-i[0]);const t=[];let[s,o]=n[0];for(let r=1;r<n.length;r++){const[i,c]=n[r];i<=o?o=Math.max(o,c):(t.push([s,o]),s=i,o=c)}return t.push([s,o]),this.intervals=t}subtract(n){const{intervals:t}=this,{intervals:s}=n;if(!t.length||!s.length)return t;let o=[...t];for(const[r,i]of s){const c=[];for(const[l,a]of o){if(i<=l||r>=a){c.push([l,a]);continue}r>l&&c.push([l,r]),i<a&&c.push([i,a])}o=c}return this.intervals=o}}const O=/,\s*(?![^()]*\))/,F={reserved:{semi:";",slash:"/",question:"?",colon:":",at:"@",equal:"=",and:"&"},unsafe:{quote:'"',angle:"<",unangle:">",hash:"#",percent:"%",curly:"{",uncurly:"}",pipe:"|",back:"\\",carrot:"^",tilde:"~",square:"[",unsquare:"]",tick:"`"}},xe="-",U={static:[["'''",'"'],["''","'"],[/parkdown:\s+/g,""],[/p↓:\s+/g,""]],url:[...Object.entries(F.unsafe),...Object.entries(F.reserved)]},Q=(e,[n,t])=>e.replaceAll(n,t),G=(e,n=xe)=>{const t=U.static.reduce(Q,e);return U.url.map(([s,o])=>[n+s+n,o]).reduce(Q,t).replaceAll(n," ")},Ee=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Se=["string","number","boolean"],ke=e=>Se.includes(e),Ne=/^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/,be=e=>{const n=e.match(Ne);if(!n)throw new Error(`Invalid invocation: ${e}`);const[,t,s=""]=n;if(!s.trim())return{name:t,parameters:[]};const o=Te(s);return{name:t,parameters:o}},Me=(e,n)=>{for(let t=n+1;t<e.length;t++)if(e[t]!==void 0)return!1;return!0},Te=e=>{const n=[];let t="",s=!1;for(let o=0;o<e.length;o++){const r=e[o],i=r==="'";if(i&&e.at(o+1)==="'"){const c=e.at(o+2)==="'";s=!s,t+=c?"'''":"''",o+=c?2:1}else i?(s=!s,t+=r):r===","&&!s?(n.push(t.trim()),t=""):t+=r}return n.push(t.trim()),n.map(o=>o===""?void 0:o?je(o):void 0).filter((o,r,i)=>o!==void 0||!Me(i,r))},je=e=>{const n=e.length>=2&&e[0]==="'"&&e.at(-1)==="'",t=n&&e.length>=4&&e[1]==="'"&&e.at(-2)==="'";return!n||t?e:e.slice(1,-1)},qe=e=>{const n=/^(\w+)(?:\(([^)]*)\))?/,t=e.match(n);if(!t)return{name:e};const[,s,o]=t;if(!o)return{name:s};const r=/(\w+)(\?)?:\s*([^,]+)/g,i=[];let c;for(;(c=r.exec(o))!==null;){const[,l,a,p]=c,u=p.trim();if(!ke(u))throw new Error(`Unsupported type: ${u}`);i.push({name:l,optional:a==="?",type:u})}return{name:s,parameters:i}},P=e=>{const n=e.map(qe).reduce((t,{name:s,parameters:o})=>t.set(s,o),new Map);return t=>{const{name:s,parameters:o}=be(t);if(!n.has(s))throw new Error(`Unknown method: ${s}`);const r=n.get(s);if(r===void 0)return{name:s};if(o.length>r.length){const i=r.filter(({optional:l})=>!l).length,c=i===r.length?i.toString():`${i} - ${r.length}`;throw new Error(`Too many parameters: ${o.length} for method '${s}' (expected: ${c})`)}return r.reduce((i,{name:c,optional:l,type:a},p)=>{const u=o[p];if(u===void 0){if(l)return i;throw new Error(`Missing required parameter: ${c} for method '${s}'`)}switch(a){case"string":i[c]=u;break;case"number":case"boolean":i[c]=JSON.parse(u);break}if(typeof i[c]!==a)throw new Error(`Invalid type: ${c} must be ${a}, got ${typeof i[c]} for method '${s}'`);return i},{name:s})}},H=e=>Object.entries(e).filter(([n])=>n!=="name"&&!isNaN(Number(n))).map(([n,t])=>t),Oe=P(["code(lang?: string, meta?: string)","quote()","dropdown(summary: string, open?: boolean, space?: string)"]),C=(e,n=1)=>`
1
+ (function(p,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):(p=typeof globalThis<"u"?globalThis:p||self,m(p.index={},p.node_fs,p.node_path,p.node_url,p.unified,p.remarkParse,p.unistUtilVisit,p.tsDedent))})(this,function(p,m,d,ae,pe,ue,me,M){"use strict";var nn=Object.defineProperty;var tn=(p,m,d)=>m in p?nn(p,m,{enumerable:!0,configurable:!0,writable:!0,value:d}):p[m]=d;var le=(p,m,d)=>tn(p,typeof m!="symbol"?m+"":m,d);const v=(e,n)=>e.position.start.offset-n.position.start.offset;v.reverse=(e,n)=>v(n,e);const b=e=>e.position!==void 0&&e.position.start.offset!==void 0&&e.position.end.offset!==void 0,de=pe.unified().use(ue),T={md:e=>de.parse(e)},x=(e,n)=>{const t=[];return me.visit(e,(s,o,r)=>{if(s.type!=="root"){if(n&&s.type!==n)return;if(b(s)){const i=((r==null?void 0:r.children.length)??0)-1;t.push({...s,siblingIndex:o,siblingCount:i})}}}),t},fe=e=>e.children.length===0,_=(e,n,...t)=>{if(t.length===0)throw new Error("No nodes to replace content from");t.sort(v);const s=t.at(0),o=t.at(-1);return e.slice(0,s.position.start.offset)+n+e.slice(o.position.end.offset)},he=(e,n,t)=>{const s=Math.min(n.position.end.offset,t.position.end.offset),o=Math.max(n.position.start.offset,t.position.start.offset);return e.slice(s,o)},k=(...e)=>e.join(" "),ge=(...e)=>e.join(`
2
+ `),ve=e=>{const n=e.split("?");return n.length>1?[n.slice(0,-1).join("?"),n.at(-1)]:[e,""]},we=e=>ve(e)[0];class w{constructor(...n){le(this,"intervals",[]);for(const[t,s]of n)this.push(t,s)}push(n,t){this.intervals.push([Math.min(n,t),Math.max(n,t)])}combine(n){this.intervals.push(...n.intervals)}collapse(){const{intervals:n}=this;if(!n.length)return this.intervals=[];n.sort((r,i)=>r[0]-i[0]);const t=[];let[s,o]=n[0];for(let r=1;r<n.length;r++){const[i,c]=n[r];i<=o?o=Math.max(o,c):(t.push([s,o]),s=i,o=c)}return t.push([s,o]),this.intervals=t}subtract(n){const{intervals:t}=this,{intervals:s}=n;if(!t.length||!s.length)return t;let o=[...t];for(const[r,i]of s){const c=[];for(const[l,a]of o){if(i<=l||r>=a){c.push([l,a]);continue}r>l&&c.push([l,r]),i<a&&c.push([i,a])}o=c}return this.intervals=o}}const L=/,\s*(?![^()]*\))/,F={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
+ `}},$e="-",B={static:[["'''",'"'],["''","'"],[/parkdown:\s+/g,""],[/p↓:\s+/g,""]],url:[...Object.entries(F.unsafe),...Object.entries(F.reserved)]},U=(e,[n,t])=>e.replaceAll(n,t),j=(e,n=$e)=>{const t=B.static.reduce(U,e);return B.url.map(([s,o])=>[n+s+n,o]).reduce(U,t).replaceAll(n," ")},Ce=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),ye=["string","number","boolean"],Ee=e=>ye.includes(e),Se=/^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/,xe=e=>{const n=e.match(Se);if(!n)throw new Error(`Invalid invocation: ${e}`);const[,t,s=""]=n;if(!s.trim())return{name:t,parameters:[]};const o=Ne(s);return{name:t,parameters:o}},ke=(e,n)=>{for(let t=n+1;t<e.length;t++)if(e[t]!==void 0)return!1;return!0},Ne=e=>{const n=[];let t="",s=!1;for(let o=0;o<e.length;o++){const r=e[o],i=r==="'";if(i&&e.at(o+1)==="'"){const c=e.at(o+2)==="'";s=!s,t+=c?"'''":"''",o+=c?2:1}else i?(s=!s,t+=r):r===","&&!s?(n.push(t.trim()),t=""):t+=r}return n.push(t.trim()),n.map(o=>o===""?void 0:o?Me(o):void 0).filter((o,r,i)=>o!==void 0||!ke(i,r))},Me=e=>{const n=e.length>=2&&e[0]==="'"&&e.at(-1)==="'",t=n&&e.length>=4&&e[1]==="'"&&e.at(-2)==="'";return!n||t?e:e.slice(1,-1)},be=e=>{const n=/^(\w+)(?:\(([^)]*)\))?/,t=e.match(n);if(!t)return{name:e};const[,s,o]=t;if(!o)return{name:s};const r=/(\w+)(\?)?:\s*([^,]+)/g,i=[];let c;for(;(c=r.exec(o))!==null;){const[,l,a,h]=c,u=h.trim();if(!Ee(u))throw new Error(`Unsupported type: ${u}`);i.push({name:l,optional:a==="?",type:u})}return{name:s,parameters:i}},O=e=>{const n=e.map(be).reduce((t,{name:s,parameters:o})=>t.set(s,o),new Map);return t=>{const{name:s,parameters:o}=xe(t);if(!n.has(s))throw new Error(`Unknown method: ${s}`);const r=n.get(s);if(r===void 0)return{name:s};if(o.length>r.length){const i=r.filter(({optional:l})=>!l).length,c=i===r.length?i.toString():`${i} - ${r.length}`;throw new Error(`Too many parameters: ${o.length} for method '${s}' (expected: ${c})`)}return r.reduce((i,{name:c,optional:l,type:a},h)=>{const u=o[h];if(u===void 0){if(l)return i;throw new Error(`Missing required parameter: ${c} for method '${s}'`)}switch(a){case"string":i[c]=u;break;case"number":case"boolean":i[c]=JSON.parse(u);break}if(typeof i[c]!==a)throw new Error(`Invalid type: ${c} must be ${a}, got ${typeof i[c]} for method '${s}'`);return i},{name:s})}},G=e=>Object.entries(e).filter(([n])=>n!=="name"&&!isNaN(Number(n))).map(([n,t])=>t),Te=O(["code(lang?: string, meta?: string)","quote()","dropdown(summary: string, open?: boolean, space?: string)"]),$=(e,n=1)=>`
3
4
  `.repeat(n)+e+`
4
- `.repeat(n),R=(e,n,t)=>`<${n}${t?` ${t}`:""}>${C(e)}</${n}>`,z=(e,n,t)=>{const s=Oe(n);switch(s.name){case"code":if(!s.lang&&!s.meta&&(t==null?void 0:t.inline)&&!e.includes(`
5
- `))return`\`${e}\``;const r=s.lang??(t==null?void 0:t.extension)??"",i=s.meta?` ${s.meta}`:"";return C(`\`\`\`${r}${i}${C(e)}\`\`\``);case"quote":return t!=null&&t.inline&&!e.includes(`
5
+ `.repeat(n),q=(e,n,t)=>`<${n}${t?` ${t}`:""}>${$(e)}</${n}>`,H=(e,n,t)=>{const s=Te(n);switch(s.name){case"code":if(!s.lang&&!s.meta&&(t==null?void 0:t.inline)&&!e.includes(`
6
+ `))return`\`${e}\``;const r=s.lang??(t==null?void 0:t.extension)??"",i=s.meta?` ${s.meta}`:"";return $(`\`\`\`${r}${i}${$(e)}\`\`\``);case"quote":return t!=null&&t.inline&&!e.includes(`
6
7
 
7
- `)?`> ${e}`:C(R(C(e),"blockquote"));case"dropdown":const c=R(G(s.summary),"summary");return C(R([c,e].join(`
8
- `),"details",s.open?"open":void 0))}},I=e=>{const n=/(\/\/[^\n]*|\/\*[\s\S]*?\*\/|<!--[\s\S]*?-->)/gm,t=[];let s;for(;(s=n.exec(e))!==null;){const o=[s.index,s.index+s[0].length],r=Pe(s[0]).trim();t.push({range:o,value:r})}return t},Pe=e=>e.startsWith("//")?e.slice(2):e.startsWith("/*")?e.slice(2,-2):e.startsWith("<!--")?e.slice(4,-3):e,V=["p↓:","pd:","parkdown:"],X=P(["splice(delete?: number, insert?: string)"]),$=(e,n,t)=>(t??I(e)).filter(({value:s})=>s.includes(n)).sort((s,o)=>s.range[0]-o.range[0]),J=e=>({isSpace:e===" ",isNewline:e===`
9
- `||e===void 0}),Z=e=>V.flatMap(n=>$(e,n)).sort((n,t)=>n.range[0]-t.range[0]).reverse().reduce((n,{range:[t,s],value:o})=>{const r=(a,p)=>n.slice(0,a)+n.slice(p),i=J(n[t-1]),c=J(n[s]),l=s===n.length;return i.isNewline&&c.isNewline?r(t-(l?1:0),s+1):i.isNewline?r(t,s+(c.isSpace?1:0)):r(t-(i.isSpace?1:0),s)},e),K=V.map(e=>new RegExp(`^${Ee(e)}(\\?[^\\s]+)`)),Re=e=>K.map(n=>{var t;return(t=n.exec(e))==null?void 0:t[1]}).filter(Boolean).map(n=>new URLSearchParams(n))[0],A=(e,n)=>(Array.isArray(n)?n.flatMap(t=>$(e,t)):$(e,n)).filter(({value:t})=>K.some(s=>s.test(t))).sort((t,s)=>t.range[0]-s.range[0]).reverse().reduce((t,{range:[s,o],value:r})=>{var l,a;const i=Re(r),c=["back","front"].map(p=>[p,i.get(p)]).filter(([p,u])=>!!u).reduce((p,[u,d])=>p.set(u,d.split(O)),new Map);return t=((l=c.get("back"))==null?void 0:l.reduce((p,u)=>{const d=X(u);if(d.name==="splice")return p.slice(0,o)+(d.insert??"")+p.slice(o+(d.delete??0))},t))??t,t=((a=c.get("front"))==null?void 0:a.reduce((p,u)=>{const d=X(u);if(d.name==="splice")return p.slice(0,s-(d.delete??0))+(d.insert??"")+p.slice(s)},t))??t,t},e),Ie=P(["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, expandLeft?: number, expandRight?: number)"]),Ae=(e,...n)=>{if(n.length===0)return e;e=A(e,n);const t=I(e),s=([i,c])=>e.slice(i,c),o=new y,r=new y;for(const i of n){const c=$(e,i,t);for(let l=0;l<c.length-1;l+=2){const a=c[l],p=c[l+1];o.push(a.range[1],p.range[0]);const[u,...d]=s([a.range[1],p.range[0]]),x=d[d.length-1];r.push(a.range[0],a.range[1]+(u.trim()?0:1)),r.push(p.range[0],p.range[1]+(x.trim()?0:1))}}return o.collapse(),r.collapse(),T.dedent(o.subtract(r).map(s).filter(Boolean).join("")).trim()},De=(e,...n)=>{if(n.length===0)return e;e=A(e,n);const t=I(e),s=([i,c])=>e.slice(i,c),o=new y;for(const i of n){const c=$(e,i,t);for(let l=0;l<c.length-1;l+=2){const a=c[l],p=c[l+1],u=s([p.range[1],p.range[1]+1]).at(-1);o.push(a.range[0],u===`
10
- `?p.range[1]+1:p.range[1])}}o.collapse();const r=new y;return r.push(0,e.length),r.subtract(o),T.dedent(r.collapse().map(s).filter(Boolean).join("")).trim()},Y=(e,n)=>{const t=$(e,n),s=[];for(let o=0;o<t.length-1;o+=2)s.push([t[o],t[o+1]]);return s},Le=(e,n,t)=>{const[s,o]=t;return e&&(s.range[0]-=e),n&&(o.range[1]+=n),t},We=(e,n,t,s,o,r)=>{if(!n||(e=A(e,n),$(e,n).length<2))return e;let c="",l=0;const a=Le.bind(null,o,r);for(const[u,d]of Y(e,n).map(a))c+=e.slice(l,u.range[1]),c+=G(t??u.value,s),l=d.range[0];c+=e.slice(l);const p=new y;return p.push(0,c.length),p.subtract(new y(...Y(c,n).map(a).flatMap(([u,d])=>[u.range,d.range]))),T.dedent(p.collapse().map(([u,d])=>c.slice(u,d)).filter(Boolean).join("")).trim()},_e=(e,n,t)=>{if(!n)return Z(e);const s=Ie(n);switch(s.name){case"extract":e=Ae(e,s.id,...H(s));break;case"remove":e=De(e,s.id,...H(s));break;case"replace":const{with:o,id:r,space:i,expandLeft:c,expandRight:l}=s;e=We(e,r,o,i,c,l);break}return t?Z(e):e},Be=["http","./","../"],Fe=({url:e})=>Be.some(n=>e.startsWith(n)),Ue=e=>j(e)&&we(e)&&Fe(e),ee=({url:e},n)=>`[](${n?g.join(n,e):e})`,f={_open:"<!--",_close:"-->",_flag:"p↓",get begin(){return b(f._open,f._flag,"BEGIN",f._close)},get end(){return b(f._open,f._flag,"END",f._close)},lengthOf(e){const n=`lines: ${e.split(`
11
- `).length}`,t=`chars: ${e.length}`;return b(f._open,f._flag,"length",n,t,f._close)}},ne=e=>n=>j(n)&&n.value===f[e],Qe=({position:e,url:n,siblingCount:t},s)=>({position:e,url:n,headingDepth:s,inline:t>=1}),Ge=({position:{start:e},url:n,siblingCount:t},{position:{end:s}},o)=>({position:{start:e,end:s},url:n,headingDepth:o,inline:t>=1}),He=(e,n,t)=>(e.inline?b:$e)(ee(e,t),f.begin,f.lengthOf(n),n,f.end),ze=e=>{const n=N(e,"heading").reduce((t,{position:s,depth:o})=>t.set(s.start.line,o),new Map);return t=>{for(let s=t.position.start.line;s>=1;s--){const o=n.get(s);if(o)return o}return 0}},M={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`)},Ve=(e,n)=>{const t=[],s=[...e.map(r=>({node:r,type:"open"})),...n.map(r=>({node:r,type:"close"}))].sort((r,i)=>v(r.node,i.node)),o=[];for(const r of s)if(r.type==="open")o.push(r);else{const i=r.node;if(o.length===0)throw M.closingCommentNotMatchedToOpening(i);const c=o.pop().node;if(o.length>0)continue;t.push({open:c,close:i})}if(o.length>0)throw M.openingCommentNotClosed(o[0].node);return t},Xe=(e,n,t)=>{const s=[...n].sort(v),o=[];return[...t].sort((r,i)=>v.reverse(r.open,i.open)).forEach(r=>{for(;s.length>0;){const i=s.pop();if(i.position.start.offset<r.open.position.start.offset){if(ve(e,i,r.open).trim()!=="")throw M.openingCommentDoesNotFollowLink(r.open);return o.push([i,r])}o.push(i)}throw M.openingCommentDoesNotFollowLink(r.open)}),o.push(...s.reverse()),o.reverse()},te=(e,n)=>{n??(n=q.md(e));const t=ze(n),s=N(n,"link").filter(Ue),o=N(n,"html").sort(v),r=o.filter(ne("begin")),i=o.filter(ne("end")),c=Ve(r,i);return Xe(e,s,c).map(a=>Array.isArray(a)?Ge(a[0],a[1].close,t(a[0])):Qe(a,t(a)))},Je=(e,{url:n})=>t=>e(g.join(g.dirname(n),t)),se=(...e)=>{const n=e.reduce((t,s)=>t+s,0);return Math.min(Math.max(n,1),6)},Ze=(e,n,t)=>{if(n===0)return e;t??(t=q.md(e));const s=N(t,"heading"),o=e.split(`
12
- `);for(const r of s){const{depth:i,position:{start:c,end:l}}=r,a=se(i,n),p=o[c.line-1].slice(i,l.column),u="#".repeat(a)+p;o[c.line-1]=u,r.depth=a}return o.join(`
13
- `)},oe=e=>te(e).reverse().sort(v.reverse).reduce((n,t)=>B(n,ee(t),t),e),re=(e,n,t,s,o)=>{try{e=oe(e),e=Ze(e,n);const r=q.md(e);return te(e,r).sort(v).reverse().map(i=>{var ae,pe;const{url:c,headingDepth:l}=i,[a,...p]=g.basename(c).split("?"),u=a.split(".").pop()??"",d=p.join("?"),x=g.dirname(c),le=g.join(x,a);if(c.startsWith("./")||c.startsWith("../")){let w=t(le);const E=new me.URLSearchParams(d),D=(ae=E.get("region"))==null?void 0:ae.split(O);w=(D==null?void 0:D.reduce((S,k,_,{length:sn})=>_e(S,k,_===sn-1),w))??w;const en=E.has("skip"),nn=E.get("heading")??0,tn=E.has("inline");let{inline:L}=i;if(tn&&(L=!0),!en)if(u==="md"){const S=Je(t,i),k=o?g.join(o,x):x,_=se(l,Number(nn));w=re(w,_,S,le,k)}else/^(js|ts)x?|svelte$/i.test(u)&&(w=z(w,"code",{extension:u,inline:L}));const W=(pe=E.get("wrap"))==null?void 0:pe.split(O);return w=(W==null?void 0:W.reduce((S,k)=>z(S,k,{extension:u,inline:L}),w))??w,{target:i,content:He(i,w,o)}}else throw c.startsWith("http")?new Error("External web links are not implemented yet"):new Error(`Unsupported link type: ${c}`)}).reduce((i,{target:c,content:l})=>B(i,l,c),e)}catch(r){throw new Error(`Error populating inclusions in file ${s??"(unknown)"}: ${r}`)}},ie=e=>h.readFileSync(e,"utf-8"),ce=e=>{const n=g.resolve(e),t=g.dirname(n);return{markdown:ie(n),dir:t,path:n}},Ke=(e,n=!0)=>{const{dir:t,path:s,markdown:o}=ce(e),i=re(o,0,c=>ie(g.resolve(t,Ce(c))),s);return n&&h.writeFileSync(s,i),i},Ye=(e,n=!0)=>{const{path:t,markdown:s}=ce(e),o=oe(s);return n&&h.writeFileSync(t,o),o};m.depopulateMarkdownInclusions=Ye,m.populateMarkdownInclusions=Ke,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
8
+ `)?`> ${e}`:$(q($(e),"blockquote"));case"dropdown":const c=q(j(s.summary),"summary");return $(q([c,e].join(`
9
+ `),"details",s.open?"open":void 0))}},R=e=>{const n=/(\/\/[^\n]*|\/\*[\s\S]*?\*\/|<!--[\s\S]*?-->)/gm,t=[];let s;for(;(s=n.exec(e))!==null;){const o=[s.index,s.index+s[0].length],r=je(s[0]).trim();t.push({range:o,value:r})}return t},je=e=>e.startsWith("//")?e.slice(2):e.startsWith("/*")?e.slice(2,-2):e.startsWith("<!--")?e.slice(4,-3):e,Q=["p↓:","pd:","parkdown:"];O(["splice(delete?: number, insert?: string)"]);const z=(e,n)=>e.range[0]-n.range[0],V=(e,n,t)=>(t??R(e)).filter(({value:s})=>s.includes(n)).sort(z),X=e=>({isSpace:e===" ",isNewline:e===`
10
+ `||e===void 0}),J=e=>Q.flatMap(n=>V(e,n)).sort((n,t)=>n.range[0]-t.range[0]).reverse().reduce((n,{range:[t,s],value:o})=>{const r=(a,h)=>n.slice(0,a)+n.slice(h),i=X(n[t-1]),c=X(n[s]),l=s===n.length;return i.isNewline&&c.isNewline?r(t-(l?1:0),s+1):i.isNewline?r(t,s+(c.isSpace?1:0)):r(t-(i.isSpace?1:0),s)},e);Q.map(e=>new RegExp(`^${Ce(e)}(\\?[^\\s]+)`));const Oe=O(["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)","splice(id: string, deleteCount?: number, insert?: string, space?: string)","remap(id: string, from: string, to: string, space?: string)"]),C=(e,n,t)=>{const s=V(e,n,t),o=[];for(let r=0;r<s.length-1;r+=2)o.push([s[r],s[r+1]]);return o},qe=(e,...n)=>{if(n.length===0)return e;const t=R(e),s=([i,c])=>e.slice(i,c),o=new w,r=new w;for(const i of n)for(const[c,l]of C(e,i,t)){o.push(c.range[1],l.range[0]);const[a,...h]=s([c.range[1],l.range[0]]),u=h[h.length-1];r.push(c.range[0],c.range[1]+(a.trim()?0:1)),r.push(l.range[0],l.range[1]+(u.trim()?0:1))}return o.collapse(),r.collapse(),M.dedent(o.subtract(r).map(s).filter(Boolean).join("")).trim()},Re=(e,...n)=>{if(n.length===0)return e;const t=R(e),s=([i,c])=>e.slice(i,c),o=new w;for(const i of n)for(const[c,l]of C(e,i,t)){const a=s([l.range[1],l.range[1]+1]).at(-1);o.push(c.range[0],a===`
11
+ `?l.range[1]+1:l.range[1])}o.collapse();const r=new w([0,e.length]);return r.subtract(o),M.dedent(r.collapse().map(s).filter(Boolean).join("")).trim()},Ie=(e,n,t,s)=>{if(!n)return e;let o="",r=0;for(const[c,l]of C(e,n))o+=e.slice(r,c.range[1]),o+=j(t??c.value,s),r=l.range[0];o+=e.slice(r);const i=new w([0,o.length]);return i.subtract(new w(...C(o,n).flatMap(([c,l])=>[c.range,l.range]))),M.dedent(i.collapse().map(([c,l])=>o.slice(c,l)).filter(Boolean).join("")).trim()},Pe=(e,n,t,s,o)=>{if(!n)return e;const r=t===void 0?!1:t>=0,i=s?j(s,o):"",c=t??0;return C(e,n).map(l=>l[r?1:0]).sort(z).reverse().reduce((l,{range:a})=>r?l.slice(0,a[1])+i+l.slice(Math.min(a[1]+c,l.length)):l.slice(0,Math.max(a[0]+c,0))+i+l.slice(a[0]),e)},Ae=(e,n,t)=>{if(!n)return J(e);const s=Oe(n);switch(s.name){case"extract":e=qe(e,s.id,...G(s));break;case"remove":e=Re(e,s.id,...G(s));break;case"replace":e=Ie(e,s.id,s.with,s.space);break;case"splice":e=Pe(e,s.id,s.deleteCount,s.insert,s.space);break}return t?J(e):e},De=["http","./","../"],We=({url:e})=>De.some(n=>e.startsWith(n)),_e=e=>b(e)&&fe(e)&&We(e),Z=({url:e},n)=>`[](${n?d.join(n,e):e})`,f={_open:"<!--",_close:"-->",_flag:"p↓",get begin(){return k(f._open,f._flag,"BEGIN",f._close)},get end(){return k(f._open,f._flag,"END",f._close)},lengthOf(e){const n=`lines: ${e.split(`
12
+ `).length}`,t=`chars: ${e.length}`;return k(f._open,f._flag,"length",n,t,f._close)}},K=e=>n=>b(n)&&n.value===f[e],Le=({position:e,url:n,siblingCount:t},s)=>({position:e,url:n,headingDepth:s,inline:t>=1}),Fe=({position:{start:e},url:n,siblingCount:t},{position:{end:s}},o)=>({position:{start:e,end:s},url:n,headingDepth:o,inline:t>=1}),Be=(e,n,t)=>(e.inline?k:ge)(Z(e,t),f.begin,f.lengthOf(n),n,f.end),Ue=e=>{const n=x(e,"heading").reduce((t,{position:s,depth:o})=>t.set(s.start.line,o),new Map);return t=>{for(let s=t.position.start.line;s>=1;s--){const o=n.get(s);if(o)return o}return 0}},N={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`)},Ge=(e,n)=>{const t=[],s=[...e.map(r=>({node:r,type:"open"})),...n.map(r=>({node:r,type:"close"}))].sort((r,i)=>v(r.node,i.node)),o=[];for(const r of s)if(r.type==="open")o.push(r);else{const i=r.node;if(o.length===0)throw N.closingCommentNotMatchedToOpening(i);const c=o.pop().node;if(o.length>0)continue;t.push({open:c,close:i})}if(o.length>0)throw N.openingCommentNotClosed(o[0].node);return t},He=(e,n,t)=>{const s=[...n].sort(v),o=[];return[...t].sort((r,i)=>v.reverse(r.open,i.open)).forEach(r=>{for(;s.length>0;){const i=s.pop();if(i.position.start.offset<r.open.position.start.offset){if(he(e,i,r.open).trim()!=="")throw N.openingCommentDoesNotFollowLink(r.open);return o.push([i,r])}o.push(i)}throw N.openingCommentDoesNotFollowLink(r.open)}),o.push(...s.reverse()),o.reverse()},Y=(e,n)=>{n??(n=T.md(e));const t=Ue(n),s=x(n,"link").filter(_e),o=x(n,"html").sort(v),r=o.filter(K("begin")),i=o.filter(K("end")),c=Ge(r,i);return He(e,s,c).map(a=>Array.isArray(a)?Fe(a[0],a[1].close,t(a[0])):Le(a,t(a)))},Qe=(e,{url:n})=>t=>e(d.join(d.dirname(n),t)),ee=(...e)=>{const n=e.reduce((t,s)=>t+s,0);return Math.min(Math.max(n,1),6)},ze=(e,n,t)=>{if(n===0)return e;t??(t=T.md(e));const s=x(t,"heading"),o=e.split(`
13
+ `);for(const r of s){const{depth:i,position:{start:c,end:l}}=r,a=ee(i,n),h=o[c.line-1].slice(i,l.column),u="#".repeat(a)+h;o[c.line-1]=u,r.depth=a}return o.join(`
14
+ `)},ne=e=>Y(e).reverse().sort(v.reverse).reduce((n,t)=>_(n,Z(t),t),e),te=(e,n,t,s,o)=>{try{e=ne(e),e=ze(e,n);const r=T.md(e);return Y(e,r).sort(v).reverse().map(i=>{var ie,ce;const{url:c,headingDepth:l}=i,[a,...h]=d.basename(c).split("?"),u=a.split(".").pop()??"",Je=h.join("?"),I=d.dirname(c),re=d.join(I,a);if(c.startsWith("./")||c.startsWith("../")){let g=t(re);const y=new ae.URLSearchParams(Je),P=(ie=y.get("region"))==null?void 0:ie.split(L);g=(P==null?void 0:P.reduce((E,S,W,{length:en})=>Ae(E,S,W===en-1),g))??g;const Ze=y.has("skip"),Ke=y.get("heading")??0,Ye=y.has("inline");let{inline:A}=i;if(Ye&&(A=!0),!Ze)if(u==="md"){const E=Qe(t,i),S=o?d.join(o,I):I,W=ee(l,Number(Ke));g=te(g,W,E,re,S)}else/^(js|ts)x?|svelte$/i.test(u)&&(g=H(g,"code",{extension:u,inline:A}));const D=(ce=y.get("wrap"))==null?void 0:ce.split(L);return g=(D==null?void 0:D.reduce((E,S)=>H(E,S,{extension:u,inline:A}),g))??g,{target:i,content:Be(i,g,o)}}else throw c.startsWith("http")?new Error("External web links are not implemented yet"):new Error(`Unsupported link type: ${c}`)}).reduce((i,{target:c,content:l})=>_(i,l,c),e)}catch(r){throw new Error(`Error populating inclusions in file ${s??"(unknown)"}: ${r}`)}},se=e=>m.readFileSync(e,"utf-8"),oe=e=>{const n=d.resolve(e),t=d.dirname(n);return{markdown:se(n),dir:t,path:n}},Ve=(e,n=!0)=>{const{dir:t,path:s,markdown:o}=oe(e),i=te(o,0,c=>se(d.resolve(t,we(c))),s);return n&&m.writeFileSync(s,i),i},Xe=(e,n=!0)=>{const{path:t,markdown:s}=oe(e),o=ne(s);return n&&m.writeFileSync(t,o),o};p.depopulateMarkdownInclusions=Xe,p.populateMarkdownInclusions=Ve,Object.defineProperty(p,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.10",
5
+ "version": "0.0.11",
6
6
  "main": "./dist/index.js",
7
7
  "bin": "./dist/cli.js",
8
8
  "files": [