@p-buddy/parkdown 0.0.9 → 0.0.10

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