@p-buddy/parkdown 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -44,7 +44,7 @@ populateMarkdownInclusions(file, writeFile);
44
44
 
45
45
  [](./.assets/authoring.md)
46
46
  <!-- p↓ BEGIN -->
47
- <!-- p↓ length lines: 572 chars: 17752 -->
47
+ <!-- p↓ length lines: 574 chars: 17955 -->
48
48
  ## Authoring
49
49
 
50
50
  You author inclusions in your markdown files using a link with no text i.e. `[](<url>)`, where `<url>` points to some local or remote text resource (e.g.`./other.md`, `https://example.com/remote.md`).
@@ -55,6 +55,8 @@ These links can be rendered either [inline](#inline) or [block](#block), dependi
55
55
 
56
56
  Inline inclusions occur when your _text-less_ link has 1 or more siblings (meaning it's **not** the only node in a [paragraph](https://www.markdownguide.org/basic-syntax/#paragraphs-1)).
57
57
 
58
+ > **CAUTION:** [parkdown](https://www.npmjs.com/package/@p-buddy/parkdown) will not protect you from authoring inline inclusions that should actually be [block](#block) inclusions to be valid markdown.
59
+
58
60
  There are two equivalent ways to author inline inclusions, [single-line](#single-line) or [multi-line](#multi-line), and which you choose depends solely on how you want your raw markdown to look (it will **not** affect the rendered output).
59
61
 
60
62
  #### Single-line
package/dist/cli.js CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command as t } from "@commander-js/extra-typings";
3
- import { populateMarkdownInclusions as r, depopulateMarkdownInclusions as l } from "@p-buddy/parkdown";
4
- const p = "0.0.6", f = new t().version(p).option("--nw, --no-write", "Do NOT write result to file (defaults to false)", !1).option("--ni, --no-inclusions", "Do NOT process file inclusions (defaults to false)", !1).option("-d, --depopulate", "Remove populated inclusions from the file", !1).option("-f, --file <flag>", "The file(s) to process", (e, o) => (o.push(e), o), new Array()).option("-r, --remap-imports", "Remap import specifiers in code blocks from one destination to another").parse(), { inclusions: a, depopulate: c, file: n, write: i } = f.opts();
3
+ import { populateMarkdownInclusions as l, depopulateMarkdownInclusions as r } from "@p-buddy/parkdown";
4
+ const f = "0.0.7", 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
- const u = [
7
- [r, !a],
8
- [l, c]
6
+ const a = [
7
+ [l, !c],
8
+ [r, u]
9
9
  ];
10
- for (const [e] of u.filter(([o, s]) => s))
10
+ for (const [s] of a.filter(([o, e]) => e))
11
11
  for (const o of n) {
12
- const s = e(o, !i);
13
- i && console.log(s);
12
+ const e = s(o, !i);
13
+ i && console.log(e);
14
14
  }
package/dist/index.js CHANGED
@@ -1,46 +1,44 @@
1
- var ue = Object.defineProperty;
2
- var me = (e, t, n) => t in e ? ue(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
- var q = (e, t, n) => me(e, typeof t != "symbol" ? t + "" : t, n);
4
- import { writeFileSync as J, readFileSync as he } from "node:fs";
5
- import { basename as fe, dirname as O, join as x, resolve as V } from "node:path";
6
- import { URLSearchParams as ge } from "node:url";
1
+ var me = Object.defineProperty;
2
+ var ue = (e, t, n) => t in e ? me(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
+ var L = (e, t, n) => ue(e, typeof t != "symbol" ? t + "" : t, n);
4
+ import { writeFileSync as V, readFileSync as he } from "node:fs";
5
+ import { basename as ge, dirname as M, join as S, resolve as J } from "node:path";
6
+ import { URLSearchParams as fe } from "node:url";
7
7
  import { unified as de } from "unified";
8
- import ve from "remark-parse";
9
- import { visit as we } from "unist-util-visit";
10
- import $e from "stable-hash";
11
- import { dedent as D } from "ts-dedent";
12
- import Ce from "extract-comments";
13
- const f = (e, t) => e.position.start.offset - t.position.start.offset;
14
- f.reverse = (e, t) => f(t, e);
15
- const I = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, ye = de().use(ve), j = {
16
- md: (e) => ye.parse(e)
17
- }, S = (e, t) => {
8
+ import we from "remark-parse";
9
+ import { visit as ve } from "unist-util-visit";
10
+ import { dedent as j } 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 D = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, $e = de().use(we), I = {
14
+ md: (e) => $e.parse(e)
15
+ }, N = (e, t) => {
18
16
  const n = [];
19
- return we(e, (o, s, r) => {
20
- if (o.type !== "root") {
21
- if (t && o.type !== t) return;
22
- if (I(o)) {
23
- const i = $e(r), c = ((r == null ? void 0 : r.children.length) ?? 0) - 1;
24
- n.push({ ...o, parentID: i, siblingIndex: s, siblingCount: c });
17
+ return ve(e, (s, o, r) => {
18
+ if (s.type !== "root") {
19
+ if (t && s.type !== t) return;
20
+ if (D(s)) {
21
+ const i = ((r == null ? void 0 : r.children.length) ?? 0) - 1;
22
+ n.push({ ...s, siblingIndex: o, siblingCount: i });
25
23
  }
26
24
  }
27
25
  }), n;
28
- }, Ee = (e) => e.children.length === 0, Z = (e, t, ...n) => {
26
+ }, Ce = (e) => e.children.length === 0, Z = (e, t, ...n) => {
29
27
  if (n.length === 0) throw new Error("No nodes to replace content from");
30
- n.sort(f);
31
- const o = n.at(0), s = n.at(-1);
32
- return e.slice(0, o.position.start.offset) + t + e.slice(s.position.end.offset);
33
- }, xe = (e, t, n) => {
34
- const o = Math.min(t.position.end.offset, n.position.end.offset), s = Math.max(t.position.start.offset, n.position.start.offset);
35
- return e.slice(o, s);
36
- }, E = (...e) => e.join(" "), Se = (...e) => e.join(`
37
- `), be = (e) => {
28
+ n.sort(g);
29
+ const s = n.at(0), o = n.at(-1);
30
+ return e.slice(0, s.position.start.offset) + t + e.slice(o.position.end.offset);
31
+ }, ye = (e, t, n) => {
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
+ return e.slice(s, o);
34
+ }, E = (...e) => e.join(" "), Ee = (...e) => e.join(`
35
+ `), Se = (e) => {
38
36
  const t = e.split("?");
39
37
  return t.length > 1 ? [t.slice(0, -1).join("?"), t.at(-1)] : [e, ""];
40
- }, ke = (e) => be(e)[0];
38
+ }, Ne = (e) => Se(e)[0];
41
39
  class d {
42
40
  constructor() {
43
- q(this, "intervals", []);
41
+ L(this, "intervals", []);
44
42
  }
45
43
  push(t, n) {
46
44
  this.intervals.push([Math.min(t, n), Math.max(t, n)]);
@@ -53,32 +51,32 @@ class d {
53
51
  if (!t.length) return this.intervals = [];
54
52
  t.sort((r, i) => r[0] - i[0]);
55
53
  const n = [];
56
- let [o, s] = t[0];
54
+ let [s, o] = t[0];
57
55
  for (let r = 1; r < t.length; r++) {
58
56
  const [i, c] = t[r];
59
- i <= s ? s = Math.max(s, c) : (n.push([o, s]), o = i, s = c);
57
+ i <= o ? o = Math.max(o, c) : (n.push([s, o]), s = i, o = c);
60
58
  }
61
- return n.push([o, s]), this.intervals = n;
59
+ return n.push([s, o]), this.intervals = n;
62
60
  }
63
61
  subtract(t) {
64
- const { intervals: n } = this, { intervals: o } = t;
65
- if (!n.length || !o.length) return n;
66
- let s = [...n];
67
- for (const [r, i] of o) {
62
+ const { intervals: n } = this, { intervals: s } = t;
63
+ if (!n.length || !s.length) return n;
64
+ let o = [...n];
65
+ for (const [r, i] of s) {
68
66
  const c = [];
69
- for (const [l, a] of s) {
67
+ for (const [l, a] of o) {
70
68
  if (i <= l || r >= a) {
71
69
  c.push([l, a]);
72
70
  continue;
73
71
  }
74
72
  r > l && c.push([l, r]), i < a && c.push([i, a]);
75
73
  }
76
- s = c;
74
+ o = c;
77
75
  }
78
- return this.intervals = s;
76
+ return this.intervals = o;
79
77
  }
80
78
  }
81
- const W = /,\s*(?![^()]*\))/, B = {
79
+ const q = /,\s*(?![^()]*\))/, B = {
82
80
  reserved: {
83
81
  semi: ";",
84
82
  slash: "/",
@@ -104,7 +102,7 @@ const W = /,\s*(?![^()]*\))/, B = {
104
102
  unsquare: "]",
105
103
  tick: "`"
106
104
  }
107
- }, Ne = "-", F = {
105
+ }, xe = "-", F = {
108
106
  static: [
109
107
  ["'''", '"'],
110
108
  ["''", "'"],
@@ -115,84 +113,84 @@ const W = /,\s*(?![^()]*\))/, B = {
115
113
  ...Object.entries(B.unsafe),
116
114
  ...Object.entries(B.reserved)
117
115
  ]
118
- }, U = (e, [t, n]) => e.replaceAll(t, n), K = (e, t = Ne) => {
116
+ }, U = (e, [t, n]) => e.replaceAll(t, n), K = (e, t = xe) => {
119
117
  const n = F.static.reduce(U, e);
120
- return F.url.map(([o, s]) => [t + o + t, s]).reduce(U, n).replaceAll(t, " ");
121
- }, Me = ["string", "number", "boolean"], _e = (e) => Me.includes(e), Te = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, Oe = (e) => {
122
- const t = e.match(Te);
118
+ return F.url.map(([s, o]) => [t + s + t, o]).reduce(U, n).replaceAll(t, " ");
119
+ }, ke = ["string", "number", "boolean"], be = (e) => ke.includes(e), _e = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, Te = (e) => {
120
+ const t = e.match(_e);
123
121
  if (!t) throw new Error(`Invalid invocation: ${e}`);
124
- const [, n, o = ""] = t;
125
- if (!o.trim()) return { name: n, parameters: [] };
126
- const s = Ie(o);
127
- return { name: n, parameters: s };
128
- }, De = (e, t) => {
122
+ const [, n, s = ""] = t;
123
+ if (!s.trim()) return { name: n, parameters: [] };
124
+ const o = Me(s);
125
+ return { name: n, parameters: o };
126
+ }, Oe = (e, t) => {
129
127
  for (let n = t + 1; n < e.length; n++)
130
128
  if (e[n] !== void 0) return !1;
131
129
  return !0;
132
- }, Ie = (e) => {
130
+ }, Me = (e) => {
133
131
  const t = [];
134
- let n = "", o = !1;
135
- for (let s = 0; s < e.length; s++) {
136
- const r = e[s], i = r === "'";
137
- if (i && e.at(s + 1) === "'") {
138
- const c = e.at(s + 2) === "'";
139
- o = !o, n += c ? "'''" : "''", s += c ? 2 : 1;
140
- } else i ? (o = !o, n += r) : r === "," && !o ? (t.push(n.trim()), n = "") : n += r;
132
+ let n = "", s = !1;
133
+ for (let o = 0; o < e.length; o++) {
134
+ const r = e[o], i = r === "'";
135
+ if (i && e.at(o + 1) === "'") {
136
+ const c = e.at(o + 2) === "'";
137
+ s = !s, n += c ? "'''" : "''", o += c ? 2 : 1;
138
+ } else i ? (s = !s, n += r) : r === "," && !s ? (t.push(n.trim()), n = "") : n += r;
141
139
  }
142
- return t.push(n.trim()), t.map((s) => s === "" ? void 0 : s ? je(s) : void 0).filter((s, r, i) => s !== void 0 || !De(i, r));
140
+ return t.push(n.trim()), t.map((o) => o === "" ? void 0 : o ? je(o) : void 0).filter((o, r, i) => o !== void 0 || !Oe(i, r));
143
141
  }, je = (e) => {
144
142
  const t = e.length >= 2 && e[0] === "'" && e.at(-1) === "'", n = t && e.length >= 4 && e[1] === "'" && e.at(-2) === "'";
145
143
  return !t || n ? e : e.slice(1, -1);
146
- }, Le = (e) => {
144
+ }, De = (e) => {
147
145
  const t = /^(\w+)(?:\(([^)]*)\))?/, n = e.match(t);
148
146
  if (!n) return { name: e };
149
- const [, o, s] = n;
150
- if (!s) return { name: o };
147
+ const [, s, o] = n;
148
+ if (!o) return { name: s };
151
149
  const r = /(\w+)(\?)?:\s*([^,]+)/g, i = [];
152
150
  let c;
153
- for (; (c = r.exec(s)) !== null; ) {
154
- const [, l, a, p] = c, u = p.trim();
155
- if (!_e(u)) throw new Error(`Unsupported type: ${u}`);
156
- i.push({ name: l, optional: a === "?", type: u });
151
+ for (; (c = r.exec(o)) !== null; ) {
152
+ const [, l, a, p] = c, m = p.trim();
153
+ if (!be(m)) throw new Error(`Unsupported type: ${m}`);
154
+ i.push({ name: l, optional: a === "?", type: m });
157
155
  }
158
- return { name: o, parameters: i };
156
+ return { name: s, parameters: i };
159
157
  }, Y = (e) => {
160
- const t = e.map(Le).reduce(
161
- (n, { name: o, parameters: s }) => n.set(o, s),
158
+ const t = e.map(De).reduce(
159
+ (n, { name: s, parameters: o }) => n.set(s, o),
162
160
  /* @__PURE__ */ new Map()
163
161
  );
164
162
  return (n) => {
165
- const { name: o, parameters: s } = Oe(n);
166
- if (!t.has(o))
167
- throw new Error(`Unknown method: ${o}`);
168
- const r = t.get(o);
163
+ const { name: s, parameters: o } = Te(n);
164
+ if (!t.has(s))
165
+ throw new Error(`Unknown method: ${s}`);
166
+ const r = t.get(s);
169
167
  if (r === void 0)
170
- return { name: o };
171
- if (s.length > r.length) {
168
+ return { name: s };
169
+ if (o.length > r.length) {
172
170
  const i = r.filter(({ optional: l }) => !l).length, c = i === r.length ? i.toString() : `${i} - ${r.length}`;
173
- throw new Error(`Too many parameters: ${s.length} for method '${o}' (expected: ${c})`);
171
+ throw new Error(`Too many parameters: ${o.length} for method '${s}' (expected: ${c})`);
174
172
  }
175
173
  return r.reduce((i, { name: c, optional: l, type: a }, p) => {
176
- const u = s[p];
177
- if (u === void 0) {
174
+ const m = o[p];
175
+ if (m === void 0) {
178
176
  if (l) return i;
179
- throw new Error(`Missing required parameter: ${c} for method '${o}'`);
177
+ throw new Error(`Missing required parameter: ${c} for method '${s}'`);
180
178
  }
181
179
  switch (a) {
182
180
  case "string":
183
- i[c] = u;
181
+ i[c] = m;
184
182
  break;
185
183
  case "number":
186
184
  case "boolean":
187
- i[c] = JSON.parse(u);
185
+ i[c] = JSON.parse(m);
188
186
  break;
189
187
  }
190
188
  if (typeof i[c] !== a)
191
- throw new Error(`Invalid type: ${c} must be ${a}, got ${typeof i[c]} for method '${o}'`);
189
+ throw new Error(`Invalid type: ${c} must be ${a}, got ${typeof i[c]} for method '${s}'`);
192
190
  return i;
193
- }, { name: o });
191
+ }, { name: s });
194
192
  };
195
- }, G = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), Ae = [
193
+ }, G = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), Ie = [
196
194
  /**
197
195
  * Wraps the content in a markdown-formatted code block.
198
196
  * @param lang The language of the code block (defaults to the file extension).
@@ -222,26 +220,34 @@ const W = /,\s*(?![^()]*\))/, B = {
222
220
  * @example [](<url>?wrap=dropdown(hello_world,,_))
223
221
  */
224
222
  "dropdown(summary: string, open?: boolean, space?: string)"
225
- ], Pe = Y(Ae), g = (e, t = 1) => `
223
+ ], Re = Y(Ie), f = (e, t = 1) => `
226
224
  `.repeat(t) + e + `
227
- `.repeat(t), T = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${g(e)}</${t}>`, H = (e, t, n) => {
228
- const o = Pe(t);
229
- switch (o.name) {
225
+ `.repeat(t), O = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${f(e)}</${t}>`, H = (e, t, n) => {
226
+ const s = Re(t);
227
+ switch (s.name) {
230
228
  case "code":
231
- if (!o.lang && !o.meta && (n == null ? void 0 : n.inline) && !e.includes(`
229
+ if (!s.lang && !s.meta && (n == null ? void 0 : n.inline) && !e.includes(`
232
230
  `)) return `\`${e}\``;
233
- const r = o.lang ?? (n == null ? void 0 : n.extension) ?? "", i = o.meta ? ` ${o.meta}` : "";
234
- return g(`\`\`\`${r}${i}${g(e)}\`\`\``);
231
+ const r = s.lang ?? (n == null ? void 0 : n.extension) ?? "", i = s.meta ? ` ${s.meta}` : "";
232
+ return f(`\`\`\`${r}${i}${f(e)}\`\`\``);
235
233
  case "quote":
236
234
  return n != null && n.inline && !e.includes(`
237
235
 
238
- `) ? `> ${e}` : g(T(g(e), "blockquote"));
236
+ `) ? `> ${e}` : f(O(f(e), "blockquote"));
239
237
  case "dropdown":
240
- const c = T(K(o.summary), "summary");
241
- return g(T([c, e].join(`
242
- `), "details", o.open ? "open" : void 0));
238
+ const c = O(K(s.summary), "summary");
239
+ return f(O([c, e].join(`
240
+ `), "details", s.open ? "open" : void 0));
243
241
  }
244
- }, Re = [
242
+ }, R = (e) => {
243
+ const t = /(\/\/[^\n]*|\/\*[\s\S]*?\*\/|<!--[\s\S]*?-->)/gm, n = [];
244
+ let s;
245
+ for (; (s = t.exec(e)) !== null; ) {
246
+ const o = [s.index, s.index + s[0].length], r = Ae(s[0]).trim();
247
+ n.push({ range: o, value: r });
248
+ }
249
+ return n;
250
+ }, Ae = (e) => e.startsWith("//") ? e.slice(2) : e.startsWith("/*") ? e.slice(2, -2) : e.startsWith("<!--") ? e.slice(4, -3) : e, Pe = [
245
251
  /**
246
252
  * Extract regions from the retrieved content between comments that INCLUDE the specified ids.
247
253
  * @param id The id of the comment to extract.
@@ -272,107 +278,102 @@ const W = /,\s*(?![^()]*\))/, B = {
272
278
  * @example [](<url>?region=replace(specifier,new_content,_)
273
279
  */
274
280
  "replace(id: string, with?: string, space?: string)"
275
- ], qe = Y(Re), L = (e) => Ce(e), b = (e, t) => L(e).filter(({ value: n }) => n.includes(t)).sort((n, o) => n.range[0] - o.range[0]), We = (e, ...t) => {
281
+ ], We = Y(Pe), x = (e, t) => R(e).filter(({ value: n }) => n.includes(t)).sort((n, s) => n.range[0] - s.range[0]), Le = (e, ...t) => {
276
282
  if (t.length === 0) return e;
277
- const n = ([i, c]) => e.slice(i, c), o = L(e), s = new d(), r = new d();
283
+ const n = ([i, c]) => e.slice(i, c), s = R(e), o = new d(), r = new d();
278
284
  for (const i of t) {
279
- const c = o.filter(({ value: l }) => l.includes(i)).sort((l, a) => l.range[0] - a.range[0]);
285
+ const c = s.filter(({ value: l }) => l.includes(i)).sort((l, a) => l.range[0] - a.range[0]);
280
286
  for (let l = 0; l < c.length - 1; l += 2) {
281
287
  const a = c[l], p = c[l + 1];
282
- s.push(a.range[1], p.range[0]);
283
- const [u, ...y] = n([a.range[1], p.range[0]]), v = y[y.length - 1];
284
- r.push(a.range[0], a.range[1] + (u.trim() ? 0 : 1)), r.push(p.range[0], p.range[1] + (v.trim() ? 0 : 1));
288
+ o.push(a.range[1], p.range[0]);
289
+ const [m, ...y] = n([a.range[1], p.range[0]]), w = y[y.length - 1];
290
+ r.push(a.range[0], a.range[1] + (m.trim() ? 0 : 1)), r.push(p.range[0], p.range[1] + (w.trim() ? 0 : 1));
285
291
  }
286
292
  }
287
- return s.collapse(), r.collapse(), D(
288
- s.subtract(r).map(n).filter(Boolean).join("")
293
+ return o.collapse(), r.collapse(), j(
294
+ o.subtract(r).map(n).filter(Boolean).join("")
289
295
  ).trim();
290
- }, Be = (e, ...t) => {
296
+ }, qe = (e, ...t) => {
291
297
  if (t.length === 0) return e;
292
- const n = ([i, c]) => e.slice(i, c), o = L(e), s = new d();
298
+ const n = ([i, c]) => e.slice(i, c), s = R(e), o = new d();
293
299
  for (const i of t) {
294
- const c = o.filter(({ value: l }) => l.includes(i)).sort((l, a) => l.range[0] - a.range[0]);
300
+ const c = s.filter(({ value: l }) => l.includes(i)).sort((l, a) => l.range[0] - a.range[0]);
295
301
  for (let l = 0; l < c.length - 1; l += 2) {
296
- const a = c[l], p = c[l + 1], u = n([p.range[1], p.range[1] + 1]).at(-1);
297
- s.push(a.range[0], u === `
302
+ const a = c[l], p = c[l + 1], m = n([p.range[1], p.range[1] + 1]).at(-1);
303
+ o.push(a.range[0], m === `
298
304
  ` ? p.range[1] + 1 : p.range[1]);
299
305
  }
300
306
  }
301
- s.collapse();
307
+ o.collapse();
302
308
  const r = new d();
303
- return r.push(0, e.length), r.subtract(s), D(
309
+ return r.push(0, e.length), r.subtract(o), j(
304
310
  r.collapse().map(n).filter(Boolean).join("")
305
311
  ).trim();
306
- }, Fe = (e, t, n, o) => {
312
+ }, Be = (e, t, n, s) => {
307
313
  if (!t) return e;
308
- const s = b(e, t);
309
- if (s.length < 2) return e;
314
+ const o = x(e, t);
315
+ if (o.length < 2) return e;
310
316
  let r = "", i = 0;
311
- for (let l = 0; l < s.length - 1; l += 2) {
312
- const a = s[l], p = s[l + 1];
313
- r += e.slice(i, a.range[1]), r += K(n ?? a.value, o), i = p.range[0];
317
+ for (let l = 0; l < o.length - 1; l += 2) {
318
+ const a = o[l], p = o[l + 1];
319
+ r += e.slice(i, a.range[1]), r += K(n ?? a.value, s), i = p.range[0];
314
320
  }
315
321
  r += e.slice(i);
316
322
  const c = new d();
317
323
  return c.push(0, r.length), c.subtract(
318
- b(r, t).reduce((l, { range: a }) => (l.push(...a), l), new d())
319
- ), D(
324
+ x(r, t).reduce((l, { range: a }) => (l.push(...a), l), new d())
325
+ ), j(
320
326
  c.collapse().map(([l, a]) => r.slice(l, a)).filter(Boolean).join("")
321
327
  ).trim();
322
- }, Q = (e) => ({ space: e === " ", newline: e === `
323
- ` }), z = (e) => [
324
- ...b(e, "p↓:"),
325
- ...b(e, "parkdown:")
326
- ].sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, o], loc: { start: { column: s } } }) => {
327
- const r = (l, a) => t.slice(0, l) + t.slice(a), i = {
328
- prev: Q(t[n - 1]),
329
- next: Q(t[o]),
330
- startLine: s === 0,
331
- final: o === t.length
332
- };
333
- return i.startLine && (i.next.newline || i.final) ? r(n - (i.final ? 1 : 0), o + 1) : i.startLine ? r(n, o + (i.next.space ? 1 : 0)) : r(n - (i.prev.space ? 1 : 0), o);
334
- }, e), Ue = (e, t) => {
328
+ }, Q = (e) => ({ isSpace: e === " ", isNewline: e === `
329
+ ` || e === void 0 }), z = (e) => [
330
+ ...x(e, "p↓:"),
331
+ ...x(e, "parkdown:")
332
+ ].sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, s], value: o }) => {
333
+ const r = (a, p) => t.slice(0, a) + t.slice(p), i = Q(t[n - 1]), c = Q(t[s]), l = s === t.length;
334
+ 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);
335
+ }, e), Fe = (e, t) => {
335
336
  if (!t) return z(e);
336
- const n = qe(t);
337
+ const n = We(t);
337
338
  switch (n.name) {
338
339
  case "extract":
339
- e = We(e, n.id, ...G(n));
340
+ e = Le(e, n.id, ...G(n));
340
341
  break;
341
342
  case "remove":
342
- e = Be(e, n.id, ...G(n));
343
+ e = qe(e, n.id, ...G(n));
343
344
  break;
344
345
  case "replace":
345
- e = Fe(e, n.id, n.with, n.space);
346
+ e = Be(e, n.id, n.with, n.space);
346
347
  break;
347
348
  }
348
349
  return z(e);
349
- }, Ge = ["http", "./", "../"], He = ({ url: e }) => Ge.some((t) => e.startsWith(t)), Qe = (e) => I(e) && Ee(e) && He(e), ee = ({ url: e }, t) => `[](${t ? x(t, e) : e})`, m = {
350
+ }, Ue = ["http", "./", "../"], Ge = ({ url: e }) => Ue.some((t) => e.startsWith(t)), He = (e) => D(e) && Ce(e) && Ge(e), ee = ({ url: e }, t) => `[](${t ? S(t, e) : e})`, u = {
350
351
  _open: "<!--",
351
352
  _close: "-->",
352
353
  _flag: "p↓",
353
354
  get begin() {
354
- return E(m._open, m._flag, "BEGIN", m._close);
355
+ return E(u._open, u._flag, "BEGIN", u._close);
355
356
  },
356
357
  get end() {
357
- return E(m._open, m._flag, "END", m._close);
358
+ return E(u._open, u._flag, "END", u._close);
358
359
  },
359
360
  lengthOf(e) {
360
361
  const t = `lines: ${e.split(`
361
362
  `).length}`, n = `chars: ${e.length}`;
362
- return E(m._open, m._flag, "length", t, n, m._close);
363
+ return E(u._open, u._flag, "length", t, n, u._close);
363
364
  }
364
- }, X = (e) => (t) => I(t) && t.value === m[e], ze = ({ position: e, url: t, siblingCount: n }, o) => ({ position: e, url: t, headingDepth: o, inline: n >= 1 }), Xe = ({ position: { start: e }, url: t, siblingCount: n }, { position: { end: o } }, s) => ({ position: { start: e, end: o }, url: t, headingDepth: s, inline: n >= 1 }), Je = (e, t, n) => (e.inline ? E : Se)(
365
+ }, X = (e) => (t) => D(t) && t.value === u[e], Qe = ({ position: e, url: t, siblingCount: n }, s) => ({ position: e, url: t, headingDepth: s, inline: n >= 1 }), ze = ({ position: { start: e }, url: t, siblingCount: n }, { position: { end: s } }, o) => ({ position: { start: e, end: s }, url: t, headingDepth: o, inline: n >= 1 }), Xe = (e, t, n) => (e.inline ? E : Ee)(
365
366
  ee(e, n),
366
- m.begin,
367
- m.lengthOf(t),
367
+ u.begin,
368
+ u.lengthOf(t),
368
369
  t,
369
- m.end
370
+ u.end
370
371
  ), Ve = (e) => {
371
- const t = S(e, "heading").reduce((n, { position: o, depth: s }) => n.set(o.start.line, s), /* @__PURE__ */ new Map());
372
+ const t = N(e, "heading").reduce((n, { position: s, depth: o }) => n.set(s.start.line, o), /* @__PURE__ */ new Map());
372
373
  return (n) => {
373
- for (let o = n.position.start.line; o >= 1; o--) {
374
- const s = t.get(o);
375
- if (s) return s;
374
+ for (let s = n.position.start.line; s >= 1; s--) {
375
+ const o = t.get(s);
376
+ if (o) return o;
376
377
  }
377
378
  return 0;
378
379
  };
@@ -380,73 +381,73 @@ const W = /,\s*(?![^()]*\))/, B = {
380
381
  openingCommentDoesNotFollowLink: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) does not follow link`),
381
382
  closingCommentNotMatchedToOpening: ({ position: { start: e } }) => new Error(`Closing comment (@${e.line}:${e.column}) does not match to opening comment`),
382
383
  openingCommentNotClosed: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) is not followed by a closing comment`)
383
- }, Ze = (e, t) => {
384
- const n = [], o = [
384
+ }, Je = (e, t) => {
385
+ const n = [], s = [
385
386
  ...e.map((r) => ({ node: r, type: "open" })),
386
387
  ...t.map((r) => ({ node: r, type: "close" }))
387
- ].sort((r, i) => f(r.node, i.node)), s = [];
388
- for (const r of o)
389
- if (r.type === "open") s.push(r);
388
+ ].sort((r, i) => g(r.node, i.node)), o = [];
389
+ for (const r of s)
390
+ if (r.type === "open") o.push(r);
390
391
  else {
391
392
  const i = r.node;
392
- if (s.length === 0)
393
+ if (o.length === 0)
393
394
  throw k.closingCommentNotMatchedToOpening(i);
394
- const c = s.pop().node;
395
- if (s.length > 0) continue;
395
+ const c = o.pop().node;
396
+ if (o.length > 0) continue;
396
397
  n.push({ open: c, close: i });
397
398
  }
398
- if (s.length > 0)
399
- throw k.openingCommentNotClosed(s[0].node);
399
+ if (o.length > 0)
400
+ throw k.openingCommentNotClosed(o[0].node);
400
401
  return n;
401
- }, Ke = (e, t, n) => {
402
- const o = [...t].sort(f), s = [];
403
- return [...n].sort((r, i) => f.reverse(r.open, i.open)).forEach((r) => {
404
- for (; o.length > 0; ) {
405
- const i = o.pop();
402
+ }, Ze = (e, t, n) => {
403
+ const s = [...t].sort(g), o = [];
404
+ return [...n].sort((r, i) => g.reverse(r.open, i.open)).forEach((r) => {
405
+ for (; s.length > 0; ) {
406
+ const i = s.pop();
406
407
  if (i.position.start.offset < r.open.position.start.offset) {
407
- if (xe(e, i, r.open).trim() !== "")
408
+ if (ye(e, i, r.open).trim() !== "")
408
409
  throw k.openingCommentDoesNotFollowLink(r.open);
409
- return s.push([i, r]);
410
+ return o.push([i, r]);
410
411
  }
411
- s.push(i);
412
+ o.push(i);
412
413
  }
413
414
  throw k.openingCommentDoesNotFollowLink(r.open);
414
- }), s.push(...o.reverse()), s.reverse();
415
+ }), o.push(...s.reverse()), o.reverse();
415
416
  }, te = (e, t) => {
416
- t ?? (t = j.md(e));
417
- const n = Ve(t), o = S(t, "link").filter(Qe), s = S(t, "html").sort(f), r = s.filter(X("begin")), i = s.filter(X("end")), c = Ze(r, i);
418
- return Ke(e, o, c).map((a) => Array.isArray(a) ? Xe(a[0], a[1].close, n(a[0])) : ze(a, n(a)));
419
- }, Ye = (e, { url: t }) => (n) => e(x(O(t), n)), ne = (...e) => {
420
- const t = e.reduce((n, o) => n + o, 0);
417
+ t ?? (t = I.md(e));
418
+ const n = Ve(t), s = N(t, "link").filter(He), o = N(t, "html").sort(g), r = o.filter(X("begin")), i = o.filter(X("end")), c = Je(r, i);
419
+ return Ze(e, s, c).map((a) => Array.isArray(a) ? ze(a[0], a[1].close, n(a[0])) : Qe(a, n(a)));
420
+ }, Ke = (e, { url: t }) => (n) => e(S(M(t), n)), ne = (...e) => {
421
+ const t = e.reduce((n, s) => n + s, 0);
421
422
  return Math.min(Math.max(t, 1), 6);
422
- }, et = (e, t, n) => {
423
+ }, Ye = (e, t, n) => {
423
424
  if (t === 0) return e;
424
- n ?? (n = j.md(e));
425
- const o = S(n, "heading"), s = e.split(`
425
+ n ?? (n = I.md(e));
426
+ const s = N(n, "heading"), o = e.split(`
426
427
  `);
427
- for (const r of o) {
428
- const { depth: i, position: { start: c, end: l } } = r, a = ne(i, t), p = s[c.line - 1].slice(i, l.column), u = "#".repeat(a) + p;
429
- s[c.line - 1] = u, r.depth = a;
428
+ for (const r of s) {
429
+ const { depth: i, position: { start: c, end: l } } = r, a = ne(i, t), p = o[c.line - 1].slice(i, l.column), m = "#".repeat(a) + p;
430
+ o[c.line - 1] = m, r.depth = a;
430
431
  }
431
- return s.join(`
432
+ return o.join(`
432
433
  `);
433
- }, oe = (e) => te(e).reverse().sort(f.reverse).reduce((t, n) => Z(t, ee(n), n), e), se = (e, t, n, o, s) => {
434
+ }, se = (e) => te(e).reverse().sort(g.reverse).reduce((t, n) => Z(t, ee(n), n), e), oe = (e, t, n, s, o) => {
434
435
  try {
435
- e = oe(e), e = et(e, t);
436
- const r = j.md(e);
437
- return te(e, r).sort(f).reverse().map((i) => {
438
- var P, R;
439
- const { url: c, headingDepth: l } = i, [a, ...p] = fe(c).split("?"), u = a.split(".").pop() ?? "", y = p.join("?"), v = O(c), A = x(v, a);
436
+ e = se(e), e = Ye(e, t);
437
+ const r = I.md(e);
438
+ return te(e, r).sort(g).reverse().map((i) => {
439
+ var P, W;
440
+ const { url: c, headingDepth: l } = i, [a, ...p] = ge(c).split("?"), m = a.split(".").pop() ?? "", y = p.join("?"), w = M(c), A = S(w, a);
440
441
  if (c.startsWith("./") || c.startsWith("../")) {
441
442
  let h = n(A);
442
- const w = new ge(y), N = (P = w.get("region")) == null ? void 0 : P.split(W);
443
- h = (N == null ? void 0 : N.reduce(($, C) => Ue($, C), h)) ?? h;
444
- const ce = w.has("skip"), le = w.get("heading") ?? 0, ae = w.has("inline");
445
- let { inline: M } = i;
446
- if (ae && (M = !0), !ce)
447
- if (u === "md") {
448
- const $ = Ye(n, i), C = s ? x(s, v) : v, pe = ne(l, Number(le));
449
- h = se(
443
+ const v = new fe(y), b = (P = v.get("region")) == null ? void 0 : P.split(q);
444
+ h = (b == null ? void 0 : b.reduce(($, C) => Fe($, C), h)) ?? h;
445
+ const ce = v.has("skip"), le = v.get("heading") ?? 0, ae = v.has("inline");
446
+ let { inline: _ } = i;
447
+ if (ae && (_ = !0), !ce)
448
+ if (m === "md") {
449
+ const $ = Ke(n, i), C = o ? S(o, w) : w, pe = ne(l, Number(le));
450
+ h = oe(
450
451
  h,
451
452
  /** p↓: ... */
452
453
  pe,
@@ -455,31 +456,31 @@ const W = /,\s*(?![^()]*\))/, B = {
455
456
  C
456
457
  /** p↓: ... */
457
458
  );
458
- } else /^(js|ts)x?|svelte$/i.test(u) && (h = H(
459
+ } else /^(js|ts)x?|svelte$/i.test(m) && (h = H(
459
460
  h,
460
461
  "code",
461
462
  /** p↓: ... */
462
- { extension: u, inline: M }
463
+ { extension: m, inline: _ }
463
464
  /** p↓: ... */
464
465
  ));
465
- const _ = (R = w.get("wrap")) == null ? void 0 : R.split(W);
466
- return h = (_ == null ? void 0 : _.reduce(($, C) => H($, C, { extension: u, inline: M }), h)) ?? h, { target: i, content: Je(i, h, s) };
466
+ const T = (W = v.get("wrap")) == null ? void 0 : W.split(q);
467
+ return h = (T == null ? void 0 : T.reduce(($, C) => H($, C, { extension: m, inline: _ }), h)) ?? h, { target: i, content: Xe(i, h, o) };
467
468
  } else throw c.startsWith("http") ? new Error("External web links are not implemented yet") : new Error(`Unsupported link type: ${c}`);
468
469
  }).reduce((i, { target: c, content: l }) => Z(i, l, c), e);
469
470
  } catch (r) {
470
- throw new Error(`Error populating inclusions in file ${o}: ${r}`);
471
+ throw new Error(`Error populating inclusions in file ${s ?? "(unknown)"}: ${r}`);
471
472
  }
472
473
  }, re = (e) => he(e, "utf-8"), ie = (e) => {
473
- const t = V(e), n = O(t);
474
+ const t = J(e), n = M(t);
474
475
  return { markdown: re(t), dir: n, path: t };
475
- }, ut = (e, t = !0) => {
476
- const { dir: n, path: o, markdown: s } = ie(e), i = se(s, 0, (c) => re(V(n, ke(c))), o);
477
- return t && J(o, i), i;
478
- }, mt = (e, t = !0) => {
479
- const { path: n, markdown: o } = ie(e), s = oe(o);
480
- return t && J(n, s), s;
476
+ }, lt = (e, t = !0) => {
477
+ const { dir: n, path: s, markdown: o } = ie(e), i = oe(o, 0, (c) => re(J(n, Ne(c))), s);
478
+ return t && V(s, i), i;
479
+ }, at = (e, t = !0) => {
480
+ const { path: n, markdown: s } = ie(e), o = se(s);
481
+ return t && V(n, o), o;
481
482
  };
482
483
  export {
483
- mt as depopulateMarkdownInclusions,
484
- ut as populateMarkdownInclusions
484
+ at as depopulateMarkdownInclusions,
485
+ lt as populateMarkdownInclusions
485
486
  };
@@ -1,13 +1,13 @@
1
- (function(p,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("stable-hash"),require("ts-dedent"),require("extract-comments")):typeof define=="function"&&define.amd?define(["exports","node:fs","node:path","node:url","unified","remark-parse","unist-util-visit","stable-hash","ts-dedent","extract-comments"],h):(p=typeof globalThis<"u"?globalThis:p||self,h(p.index={},p.node_fs,p.node_path,p.node_url,p.unified,p.remarkParse,p.unistUtilVisit,p.hash,p.tsDedent,p._extractComments))})(this,function(p,h,f,ie,ce,le,ae,pe,b,ue){"use strict";var Je=Object.defineProperty;var Ze=(p,h,f)=>h in p?Je(p,h,{enumerable:!0,configurable:!0,writable:!0,value:f}):p[h]=f;var re=(p,h,f)=>Ze(p,typeof h!="symbol"?h+"":h,f);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,me=ce.unified().use(le),q={md:e=>me.parse(e)},x=(e,n)=>{const t=[];return ae.visit(e,(s,o,r)=>{if(s.type!=="root"){if(n&&s.type!==n)return;if(j(s)){const i=pe(r),c=((r==null?void 0:r.children.length)??0)-1;t.push({...s,parentID:i,siblingIndex:o,siblingCount:c})}}}),t},he=e=>e.children.length===0,A=(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)},fe=(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)},S=(...e)=>e.join(" "),de=(...e)=>e.join(`
2
- `),ge=e=>{const n=e.split("?");return n.length>1?[n.slice(0,-1).join("?"),n.at(-1)]:[e,""]},ve=e=>ge(e)[0];class w{constructor(){re(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 R=/,\s*(?![^()]*\))/,_={reserved:{semi:";",slash:"/",question:"?",colon:":",at:"@",equal:"=",and:"&"},unsafe:{quote:'"',angle:"<",unangle:">",hash:"#",percent:"%",curly:"{",uncurly:"}",pipe:"|",back:"\\",carrot:"^",tilde:"~",square:"[",unsquare:"]",tick:"`"}},we="-",W={static:[["'''",'"'],["''","'"],[/parkdown:\s+/g,""],[/p↓:\s+/g,""]],url:[...Object.entries(_.unsafe),...Object.entries(_.reserved)]},B=(e,[n,t])=>e.replaceAll(n,t),F=(e,n=we)=>{const t=W.static.reduce(B,e);return W.url.map(([s,o])=>[n+s+n,o]).reduce(B,t).replaceAll(n," ")},$e=["string","number","boolean"],Ce=e=>$e.includes(e),ye=/^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/,Ee=e=>{const n=e.match(ye);if(!n)throw new Error(`Invalid invocation: ${e}`);const[,t,s=""]=n;if(!s.trim())return{name:t,parameters:[]};const o=xe(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},xe=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?Se(o):void 0).filter((o,r,i)=>o!==void 0||!ke(i,r))},Se=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)},Me=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,u]=c,m=u.trim();if(!Ce(m))throw new Error(`Unsupported type: ${m}`);i.push({name:l,optional:a==="?",type:m})}return{name:s,parameters:i}},U=e=>{const n=e.map(Me).reduce((t,{name:s,parameters:o})=>t.set(s,o),new Map);return t=>{const{name:s,parameters:o}=Ee(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},u)=>{const m=o[u];if(m===void 0){if(l)return i;throw new Error(`Missing required parameter: ${c} for method '${s}'`)}switch(a){case"string":i[c]=m;break;case"number":case"boolean":i[c]=JSON.parse(m);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),Ne=U(["code(lang?: string, meta?: string)","quote()","dropdown(summary: string, open?: boolean, space?: string)"]),$=(e,n=1)=>`
1
+ (function(u,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("node:fs"),require("node:path"),require("node:url"),require("unified"),require("remark-parse"),require("unist-util-visit"),require("ts-dedent")):typeof define=="function"&&define.amd?define(["exports","node:fs","node:path","node:url","unified","remark-parse","unist-util-visit","ts-dedent"],d):(u=typeof globalThis<"u"?globalThis:u||self,d(u.index={},u.node_fs,u.node_path,u.node_url,u.unified,u.remarkParse,u.unistUtilVisit,u.tsDedent))})(this,function(u,d,h,ie,ce,le,ae,j){"use strict";var Xe=Object.defineProperty;var Je=(u,d,h)=>d in u?Xe(u,d,{enumerable:!0,configurable:!0,writable:!0,value:h}):u[d]=h;var re=(u,d,h)=>Je(u,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 M=e=>e.position!==void 0&&e.position.start.offset!==void 0&&e.position.end.offset!==void 0,pe=ce.unified().use(le),O={md:e=>pe.parse(e)},k=(e,n)=>{const t=[];return ae.visit(e,(s,o,r)=>{if(s.type!=="root"){if(n&&s.type!==n)return;if(M(s)){const i=((r==null?void 0:r.children.length)??0)-1;t.push({...s,siblingIndex:o,siblingCount:i})}}}),t},ue=e=>e.children.length===0,D=(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)},me=(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)},N=(...e)=>e.join(" "),de=(...e)=>e.join(`
2
+ `),he=e=>{const n=e.split("?");return n.length>1?[n.slice(0,-1).join("?"),n.at(-1)]:[e,""]},fe=e=>he(e)[0];class w{constructor(){re(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 W=/,\s*(?![^()]*\))/,_={reserved:{semi:";",slash:"/",question:"?",colon:":",at:"@",equal:"=",and:"&"},unsafe:{quote:'"',angle:"<",unangle:">",hash:"#",percent:"%",curly:"{",uncurly:"}",pipe:"|",back:"\\",carrot:"^",tilde:"~",square:"[",unsquare:"]",tick:"`"}},ge="-",L={static:[["'''",'"'],["''","'"],[/parkdown:\s+/g,""],[/p↓:\s+/g,""]],url:[...Object.entries(_.unsafe),...Object.entries(_.reserved)]},B=(e,[n,t])=>e.replaceAll(n,t),F=(e,n=ge)=>{const t=L.static.reduce(B,e);return L.url.map(([s,o])=>[n+s+n,o]).reduce(B,t).replaceAll(n," ")},ve=["string","number","boolean"],we=e=>ve.includes(e),$e=/^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/,Ce=e=>{const n=e.match($e);if(!n)throw new Error(`Invalid invocation: ${e}`);const[,t,s=""]=n;if(!s.trim())return{name:t,parameters:[]};const o=Se(s);return{name:t,parameters:o}},ye=(e,n)=>{for(let t=n+1;t<e.length;t++)if(e[t]!==void 0)return!1;return!0},Se=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?Ee(o):void 0).filter((o,r,i)=>o!==void 0||!ye(i,r))},Ee=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)},ke=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,m=p.trim();if(!we(m))throw new Error(`Unsupported type: ${m}`);i.push({name:l,optional:a==="?",type:m})}return{name:s,parameters:i}},U=e=>{const n=e.map(ke).reduce((t,{name:s,parameters:o})=>t.set(s,o),new Map);return t=>{const{name:s,parameters:o}=Ce(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 m=o[p];if(m===void 0){if(l)return i;throw new Error(`Missing required parameter: ${c} for method '${s}'`)}switch(a){case"string":i[c]=m;break;case"number":case"boolean":i[c]=JSON.parse(m);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),Ne=U(["code(lang?: string, meta?: string)","quote()","dropdown(summary: string, open?: boolean, space?: string)"]),$=(e,n=1)=>`
3
3
  `.repeat(n)+e+`
4
- `.repeat(n),O=(e,n,t)=>`<${n}${t?` ${t}`:""}>${$(e)}</${n}>`,H=(e,n,t)=>{const s=Ne(n);switch(s.name){case"code":if(!s.lang&&!s.meta&&(t==null?void 0:t.inline)&&!e.includes(`
4
+ `.repeat(n),q=(e,n,t)=>`<${n}${t?` ${t}`:""}>${$(e)}</${n}>`,H=(e,n,t)=>{const s=Ne(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 $(`\`\`\`${r}${i}${$(e)}\`\`\``);case"quote":return t!=null&&t.inline&&!e.includes(`
6
6
 
7
- `)?`> ${e}`:$(O($(e),"blockquote"));case"dropdown":const c=O(F(s.summary),"summary");return $(O([c,e].join(`
8
- `),"details",s.open?"open":void 0))}},Te=U(["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)"]),I=e=>ue(e),M=(e,n)=>I(e).filter(({value:t})=>t.includes(n)).sort((t,s)=>t.range[0]-s.range[0]),be=(e,...n)=>{if(n.length===0)return e;const t=([i,c])=>e.slice(i,c),s=I(e),o=new w,r=new w;for(const i of n){const c=s.filter(({value:l})=>l.includes(i)).sort((l,a)=>l.range[0]-a.range[0]);for(let l=0;l<c.length-1;l+=2){const a=c[l],u=c[l+1];o.push(a.range[1],u.range[0]);const[m,...T]=t([a.range[1],u.range[0]]),C=T[T.length-1];r.push(a.range[0],a.range[1]+(m.trim()?0:1)),r.push(u.range[0],u.range[1]+(C.trim()?0:1))}}return o.collapse(),r.collapse(),b.dedent(o.subtract(r).map(t).filter(Boolean).join("")).trim()},je=(e,...n)=>{if(n.length===0)return e;const t=([i,c])=>e.slice(i,c),s=I(e),o=new w;for(const i of n){const c=s.filter(({value:l})=>l.includes(i)).sort((l,a)=>l.range[0]-a.range[0]);for(let l=0;l<c.length-1;l+=2){const a=c[l],u=c[l+1],m=t([u.range[1],u.range[1]+1]).at(-1);o.push(a.range[0],m===`
9
- `?u.range[1]+1:u.range[1])}}o.collapse();const r=new w;return r.push(0,e.length),r.subtract(o),b.dedent(r.collapse().map(t).filter(Boolean).join("")).trim()},qe=(e,n,t,s)=>{if(!n)return e;const o=M(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],u=o[l+1];r+=e.slice(i,a.range[1]),r+=F(t??a.value,s),i=u.range[0]}r+=e.slice(i);const c=new w;return c.push(0,r.length),c.subtract(M(r,n).reduce((l,{range:a})=>(l.push(...a),l),new w)),b.dedent(c.collapse().map(([l,a])=>r.slice(l,a)).filter(Boolean).join("")).trim()},Q=e=>({space:e===" ",newline:e===`
10
- `}),z=e=>[...M(e,"p↓:"),...M(e,"parkdown:")].sort((n,t)=>n.range[0]-t.range[0]).reverse().reduce((n,{range:[t,s],loc:{start:{column:o}}})=>{const r=(l,a)=>n.slice(0,l)+n.slice(a),i={prev:Q(n[t-1]),next:Q(n[s]),startLine:o===0,final:s===n.length};return i.startLine&&(i.next.newline||i.final)?r(t-(i.final?1:0),s+1):i.startLine?r(t,s+(i.next.space?1:0)):r(t-(i.prev.space?1:0),s)},e),Oe=(e,n)=>{if(!n)return z(e);const t=Te(n);switch(t.name){case"extract":e=be(e,t.id,...G(t));break;case"remove":e=je(e,t.id,...G(t));break;case"replace":e=qe(e,t.id,t.with,t.space);break}return z(e)},Ie=["http","./","../"],De=({url:e})=>Ie.some(n=>e.startsWith(n)),Le=e=>j(e)&&he(e)&&De(e),X=({url:e},n)=>`[](${n?f.join(n,e):e})`,d={_open:"<!--",_close:"-->",_flag:"p↓",get begin(){return S(d._open,d._flag,"BEGIN",d._close)},get end(){return S(d._open,d._flag,"END",d._close)},lengthOf(e){const n=`lines: ${e.split(`
11
- `).length}`,t=`chars: ${e.length}`;return S(d._open,d._flag,"length",n,t,d._close)}},V=e=>n=>j(n)&&n.value===d[e],Pe=({position:e,url:n,siblingCount:t},s)=>({position:e,url:n,headingDepth:s,inline:t>=1}),Ae=({position:{start:e},url:n,siblingCount:t},{position:{end:s}},o)=>({position:{start:e,end:s},url:n,headingDepth:o,inline:t>=1}),Re=(e,n,t)=>(e.inline?S:de)(X(e,t),d.begin,d.lengthOf(n),n,d.end),_e=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`)},We=(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},Be=(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(fe(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()},J=(e,n)=>{n??(n=q.md(e));const t=_e(n),s=x(n,"link").filter(Le),o=x(n,"html").sort(v),r=o.filter(V("begin")),i=o.filter(V("end")),c=We(r,i);return Be(e,s,c).map(a=>Array.isArray(a)?Ae(a[0],a[1].close,t(a[0])):Pe(a,t(a)))},Fe=(e,{url:n})=>t=>e(f.join(f.dirname(n),t)),Z=(...e)=>{const n=e.reduce((t,s)=>t+s,0);return Math.min(Math.max(n,1),6)},Ue=(e,n,t)=>{if(n===0)return e;t??(t=q.md(e));const s=x(t,"heading"),o=e.split(`
12
- `);for(const r of s){const{depth:i,position:{start:c,end:l}}=r,a=Z(i,n),u=o[c.line-1].slice(i,l.column),m="#".repeat(a)+u;o[c.line-1]=m,r.depth=a}return o.join(`
13
- `)},K=e=>J(e).reverse().sort(v.reverse).reduce((n,t)=>A(n,X(t),t),e),Y=(e,n,t,s,o)=>{try{e=K(e),e=Ue(e,n);const r=q.md(e);return J(e,r).sort(v).reverse().map(i=>{var se,oe;const{url:c,headingDepth:l}=i,[a,...u]=f.basename(c).split("?"),m=a.split(".").pop()??"",T=u.join("?"),C=f.dirname(c),te=f.join(C,a);if(c.startsWith("./")||c.startsWith("../")){let g=t(te);const y=new ie.URLSearchParams(T),D=(se=y.get("region"))==null?void 0:se.split(R);g=(D==null?void 0:D.reduce((E,k)=>Oe(E,k),g))??g;const Qe=y.has("skip"),ze=y.get("heading")??0,Xe=y.has("inline");let{inline:L}=i;if(Xe&&(L=!0),!Qe)if(m==="md"){const E=Fe(t,i),k=o?f.join(o,C):C,Ve=Z(l,Number(ze));g=Y(g,Ve,E,te,k)}else/^(js|ts)x?|svelte$/i.test(m)&&(g=H(g,"code",{extension:m,inline:L}));const P=(oe=y.get("wrap"))==null?void 0:oe.split(R);return g=(P==null?void 0:P.reduce((E,k)=>H(E,k,{extension:m,inline:L}),g))??g,{target:i,content:Re(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})=>A(i,l,c),e)}catch(r){throw new Error(`Error populating inclusions in file ${s}: ${r}`)}},ee=e=>h.readFileSync(e,"utf-8"),ne=e=>{const n=f.resolve(e),t=f.dirname(n);return{markdown:ee(n),dir:t,path:n}},Ge=(e,n=!0)=>{const{dir:t,path:s,markdown:o}=ne(e),i=Y(o,0,c=>ee(f.resolve(t,ve(c))),s);return n&&h.writeFileSync(s,i),i},He=(e,n=!0)=>{const{path:t,markdown:s}=ne(e),o=K(s);return n&&h.writeFileSync(t,o),o};p.depopulateMarkdownInclusions=He,p.populateMarkdownInclusions=Ge,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})});
7
+ `)?`> ${e}`:$(q($(e),"blockquote"));case"dropdown":const c=q(F(s.summary),"summary");return $(q([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=xe(s[0]).trim();t.push({range:o,value:r})}return t},xe=e=>e.startsWith("//")?e.slice(2):e.startsWith("/*")?e.slice(2,-2):e.startsWith("<!--")?e.slice(4,-3):e,Te=U(["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)"]),x=(e,n)=>I(e).filter(({value:t})=>t.includes(n)).sort((t,s)=>t.range[0]-s.range[0]),be=(e,...n)=>{if(n.length===0)return e;const t=([i,c])=>e.slice(i,c),s=I(e),o=new w,r=new w;for(const i of n){const c=s.filter(({value:l})=>l.includes(i)).sort((l,a)=>l.range[0]-a.range[0]);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[m,...b]=t([a.range[1],p.range[0]]),C=b[b.length-1];r.push(a.range[0],a.range[1]+(m.trim()?0:1)),r.push(p.range[0],p.range[1]+(C.trim()?0:1))}}return o.collapse(),r.collapse(),j.dedent(o.subtract(r).map(t).filter(Boolean).join("")).trim()},je=(e,...n)=>{if(n.length===0)return e;const t=([i,c])=>e.slice(i,c),s=I(e),o=new w;for(const i of n){const c=s.filter(({value:l})=>l.includes(i)).sort((l,a)=>l.range[0]-a.range[0]);for(let l=0;l<c.length-1;l+=2){const a=c[l],p=c[l+1],m=t([p.range[1],p.range[1]+1]).at(-1);o.push(a.range[0],m===`
9
+ `?p.range[1]+1:p.range[1])}}o.collapse();const r=new w;return r.push(0,e.length),r.subtract(o),j.dedent(r.collapse().map(t).filter(Boolean).join("")).trim()},Me=(e,n,t,s)=>{if(!n)return e;const o=x(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+=F(t??a.value,s),i=p.range[0]}r+=e.slice(i);const c=new w;return c.push(0,r.length),c.subtract(x(r,n).reduce((l,{range:a})=>(l.push(...a),l),new w)),j.dedent(c.collapse().map(([l,a])=>r.slice(l,a)).filter(Boolean).join("")).trim()},Q=e=>({isSpace:e===" ",isNewline:e===`
10
+ `||e===void 0}),z=e=>[...x(e,"p↓:"),...x(e,"parkdown:")].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=Q(n[t-1]),c=Q(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),Oe=(e,n)=>{if(!n)return z(e);const t=Te(n);switch(t.name){case"extract":e=be(e,t.id,...G(t));break;case"remove":e=je(e,t.id,...G(t));break;case"replace":e=Me(e,t.id,t.with,t.space);break}return z(e)},qe=["http","./","../"],Ie=({url:e})=>qe.some(n=>e.startsWith(n)),Pe=e=>M(e)&&ue(e)&&Ie(e),V=({url:e},n)=>`[](${n?h.join(n,e):e})`,f={_open:"<!--",_close:"-->",_flag:"p↓",get begin(){return N(f._open,f._flag,"BEGIN",f._close)},get end(){return N(f._open,f._flag,"END",f._close)},lengthOf(e){const n=`lines: ${e.split(`
11
+ `).length}`,t=`chars: ${e.length}`;return N(f._open,f._flag,"length",n,t,f._close)}},X=e=>n=>M(n)&&n.value===f[e],Re=({position:e,url:n,siblingCount:t},s)=>({position:e,url:n,headingDepth:s,inline:t>=1}),Ae=({position:{start:e},url:n,siblingCount:t},{position:{end:s}},o)=>({position:{start:e,end:s},url:n,headingDepth:o,inline:t>=1}),De=(e,n,t)=>(e.inline?N:de)(V(e,t),f.begin,f.lengthOf(n),n,f.end),We=e=>{const n=k(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}},T={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`)},_e=(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 T.closingCommentNotMatchedToOpening(i);const c=o.pop().node;if(o.length>0)continue;t.push({open:c,close:i})}if(o.length>0)throw T.openingCommentNotClosed(o[0].node);return t},Le=(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(me(e,i,r.open).trim()!=="")throw T.openingCommentDoesNotFollowLink(r.open);return o.push([i,r])}o.push(i)}throw T.openingCommentDoesNotFollowLink(r.open)}),o.push(...s.reverse()),o.reverse()},J=(e,n)=>{n??(n=O.md(e));const t=We(n),s=k(n,"link").filter(Pe),o=k(n,"html").sort(v),r=o.filter(X("begin")),i=o.filter(X("end")),c=_e(r,i);return Le(e,s,c).map(a=>Array.isArray(a)?Ae(a[0],a[1].close,t(a[0])):Re(a,t(a)))},Be=(e,{url:n})=>t=>e(h.join(h.dirname(n),t)),Z=(...e)=>{const n=e.reduce((t,s)=>t+s,0);return Math.min(Math.max(n,1),6)},Fe=(e,n,t)=>{if(n===0)return e;t??(t=O.md(e));const s=k(t,"heading"),o=e.split(`
12
+ `);for(const r of s){const{depth:i,position:{start:c,end:l}}=r,a=Z(i,n),p=o[c.line-1].slice(i,l.column),m="#".repeat(a)+p;o[c.line-1]=m,r.depth=a}return o.join(`
13
+ `)},K=e=>J(e).reverse().sort(v.reverse).reduce((n,t)=>D(n,V(t),t),e),Y=(e,n,t,s,o)=>{try{e=K(e),e=Fe(e,n);const r=O.md(e);return J(e,r).sort(v).reverse().map(i=>{var se,oe;const{url:c,headingDepth:l}=i,[a,...p]=h.basename(c).split("?"),m=a.split(".").pop()??"",b=p.join("?"),C=h.dirname(c),te=h.join(C,a);if(c.startsWith("./")||c.startsWith("../")){let g=t(te);const y=new ie.URLSearchParams(b),P=(se=y.get("region"))==null?void 0:se.split(W);g=(P==null?void 0:P.reduce((S,E)=>Oe(S,E),g))??g;const He=y.has("skip"),Qe=y.get("heading")??0,ze=y.has("inline");let{inline:R}=i;if(ze&&(R=!0),!He)if(m==="md"){const S=Be(t,i),E=o?h.join(o,C):C,Ve=Z(l,Number(Qe));g=Y(g,Ve,S,te,E)}else/^(js|ts)x?|svelte$/i.test(m)&&(g=H(g,"code",{extension:m,inline:R}));const A=(oe=y.get("wrap"))==null?void 0:oe.split(W);return g=(A==null?void 0:A.reduce((S,E)=>H(S,E,{extension:m,inline:R}),g))??g,{target:i,content:De(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})=>D(i,l,c),e)}catch(r){throw new Error(`Error populating inclusions in file ${s??"(unknown)"}: ${r}`)}},ee=e=>d.readFileSync(e,"utf-8"),ne=e=>{const n=h.resolve(e),t=h.dirname(n);return{markdown:ee(n),dir:t,path:n}},Ue=(e,n=!0)=>{const{dir:t,path:s,markdown:o}=ne(e),i=Y(o,0,c=>ee(h.resolve(t,fe(c))),s);return n&&d.writeFileSync(s,i),i},Ge=(e,n=!0)=>{const{path:t,markdown:s}=ne(e),o=K(s);return n&&d.writeFileSync(t,o),o};u.depopulateMarkdownInclusions=Ge,u.populateMarkdownInclusions=Ue,Object.defineProperty(u,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.6",
5
+ "version": "0.0.7",
6
6
  "main": "./dist/index.js",
7
7
  "bin": "./dist/cli.js",
8
8
  "files": [
@@ -24,10 +24,7 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@commander-js/extra-typings": "^13.1.0",
27
- "@flex-development/import-regex": "^3.0.0",
28
- "extract-comments": "^1.1.0",
29
27
  "remark-parse": "^11.0.0",
30
- "stable-hash": "^0.0.4",
31
28
  "ts-dedent": "^2.2.0",
32
29
  "unified": "^11.0.5",
33
30
  "unist-util-visit": "^5.0.0"