@p-buddy/parkdown 0.0.12 → 0.0.14

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/index.js CHANGED
@@ -1,84 +1,41 @@
1
- var fe = Object.defineProperty;
2
- var de = (e, t, n) => t in e ? fe(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
- var F = (e, t, n) => de(e, typeof t != "symbol" ? t + "" : t, n);
4
- import { writeFileSync as K, readFileSync as we } from "node:fs";
5
- import { basename as ve, dirname as A, join as y, resolve as Y } from "node:path";
6
- import { URLSearchParams as $e } from "node:url";
7
- import { unified as Ce } from "unified";
8
- import Ee from "remark-parse";
9
- import { visit as ye } from "unist-util-visit";
10
- import { dedent as j } from "ts-dedent";
11
- const h = (e, t) => e.position.start.offset - t.position.start.offset;
12
- h.reverse = (e, t) => h(t, e);
13
- const D = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, Se = Ce().use(Ee), I = {
14
- md: (e) => Se.parse(e)
15
- }, S = (e, t) => {
1
+ var ye = Object.defineProperty;
2
+ var Ce = (e, t, n) => t in e ? ye(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
+ var _ = (e, t, n) => Ce(e, typeof t != "symbol" ? t + "" : t, n);
4
+ import { writeFileSync as le, readFileSync as Ee } from "node:fs";
5
+ import { basename as Se, dirname as z, join as T, resolve as ae } from "node:path";
6
+ import { URLSearchParams as Z } from "node:url";
7
+ import { unified as xe } from "unified";
8
+ import ke from "remark-parse";
9
+ import { visit as _e } from "unist-util-visit";
10
+ import { dedent as Ne } from "ts-dedent";
11
+ const f = (e, t) => e.position.start.offset - t.position.start.offset;
12
+ f.reverse = (e, t) => f(t, e);
13
+ const X = (e) => e.position !== void 0 && e.position.start.offset !== void 0 && e.position.end.offset !== void 0, Re = xe().use(ke), V = {
14
+ md: (e) => Re.parse(e)
15
+ }, I = (e, t) => {
16
16
  const n = [];
17
- return ye(e, (s, o, r) => {
17
+ return _e(e, (s, r, o) => {
18
18
  if (s.type !== "root") {
19
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 });
20
+ if (X(s)) {
21
+ const i = ((o == null ? void 0 : o.children.length) ?? 0) - 1;
22
+ n.push({ ...s, siblingIndex: r, siblingCount: i });
23
23
  }
24
24
  }
25
25
  }), n;
26
- }, xe = (e) => e.children.length === 0, ee = (e, t, ...n) => {
26
+ }, Me = (e) => e.children.length === 0, ce = (e, t, ...n) => {
27
27
  if (n.length === 0) throw new Error("No nodes to replace content from");
28
- n.sort(h);
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
- }, Ne = (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(" "), be = (...e) => e.join(`
35
- `), ke = (e) => {
28
+ n.sort(f);
29
+ const s = n.at(0), r = n.at(-1);
30
+ return e.slice(0, s.position.start.offset) + t + e.slice(r.position.end.offset);
31
+ }, Ae = (e, t, n) => {
32
+ const s = Math.min(t.position.end.offset, n.position.end.offset), r = Math.max(t.position.start.offset, n.position.start.offset);
33
+ return e.slice(s, r);
34
+ }, O = (...e) => e.join(" "), Oe = (...e) => e.join(`
35
+ `), Te = (e) => {
36
36
  const t = e.split("?");
37
37
  return t.length > 1 ? [t.slice(0, -1).join("?"), t.at(-1)] : [e, ""];
38
- }, Me = (e) => ke(e)[0];
39
- class d {
40
- constructor(...t) {
41
- F(this, "intervals", []);
42
- for (const [n, s] of t)
43
- this.push(n, s);
44
- }
45
- push(t, n) {
46
- this.intervals.push([Math.min(t, n), Math.max(t, n)]);
47
- }
48
- combine(t) {
49
- this.intervals.push(...t.intervals);
50
- }
51
- collapse() {
52
- const { intervals: t } = this;
53
- if (!t.length) return this.intervals = [];
54
- t.sort((r, i) => r[0] - i[0]);
55
- const n = [];
56
- let [s, o] = t[0];
57
- for (let r = 1; r < t.length; r++) {
58
- const [i, c] = t[r];
59
- i <= o ? o = Math.max(o, c) : (n.push([s, o]), s = i, o = c);
60
- }
61
- return n.push([s, o]), this.intervals = n;
62
- }
63
- subtract(t) {
64
- const { intervals: n } = this, { intervals: s } = t;
65
- if (!n.length || !s.length) return n;
66
- let o = [...n];
67
- for (const [r, i] of s) {
68
- const c = [];
69
- for (const [l, a] of o) {
70
- if (i <= l || r >= a) {
71
- c.push([l, a]);
72
- continue;
73
- }
74
- r > l && c.push([l, r]), i < a && c.push([i, a]);
75
- }
76
- o = c;
77
- }
78
- return this.intervals = o;
79
- }
80
- }
81
- const U = /,\s*(?![^()]*\))/, H = {
38
+ }, Ie = (e) => Te(e)[0], F = /,\s*(?![^()]*\))/, K = {
82
39
  reserved: {
83
40
  semi: ";",
84
41
  slash: "/",
@@ -106,7 +63,7 @@ const U = /,\s*(?![^()]*\))/, H = {
106
63
  line: `
107
64
  `
108
65
  }
109
- }, _e = "-", G = {
66
+ }, je = "-", Y = {
110
67
  static: [
111
68
  ["'''", '"'],
112
69
  ["''", "'"],
@@ -114,87 +71,87 @@ const U = /,\s*(?![^()]*\))/, H = {
114
71
  [/p↓:\s+/g, ""]
115
72
  ],
116
73
  url: [
117
- ...Object.entries(H.unsafe),
118
- ...Object.entries(H.reserved)
74
+ ...Object.entries(K.unsafe),
75
+ ...Object.entries(K.reserved)
119
76
  ]
120
- }, Q = (e, [t, n]) => e.replaceAll(t, n), N = (e, t = _e) => {
121
- const n = G.static.reduce(Q, e);
122
- return G.url.map(([s, o]) => [t + s + t, o]).reduce(Q, n).replaceAll(t, " ");
123
- }, Oe = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), Re = ["string", "number", "boolean"], Te = (e) => Re.includes(e), Ae = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, je = (e) => {
124
- const t = e.match(Ae);
77
+ }, ee = (e, [t, n]) => e.replaceAll(t, n), W = (e, t = je) => {
78
+ const n = Y.static.reduce(ee, e);
79
+ return Y.url.map(([s, r]) => [t + s + t, r]).reduce(ee, n).replaceAll(t, " ");
80
+ }, We = ["string", "number", "boolean"], De = (e) => We.includes(e), Pe = /^([a-zA-Z0-9_-]+)(?:\(([^)]*)\))?$/, Le = (e) => {
81
+ const t = e.match(Pe);
125
82
  if (!t) throw new Error(`Invalid invocation: ${e}`);
126
83
  const [, n, s = ""] = t;
127
84
  if (!s.trim()) return { name: n, parameters: [] };
128
- const o = Ie(s);
129
- return { name: n, parameters: o };
130
- }, De = (e, t) => {
85
+ const r = qe(s);
86
+ return { name: n, parameters: r };
87
+ }, Ue = (e, t) => {
131
88
  for (let n = t + 1; n < e.length; n++)
132
89
  if (e[n] !== void 0) return !1;
133
90
  return !0;
134
- }, Ie = (e) => {
91
+ }, qe = (e) => {
135
92
  const t = [];
136
93
  let n = "", s = !1;
137
- for (let o = 0; o < e.length; o++) {
138
- const r = e[o], i = r === "'";
139
- if (i && e.at(o + 1) === "'") {
140
- const c = e.at(o + 2) === "'";
141
- s = !s, n += c ? "'''" : "''", o += c ? 2 : 1;
142
- } else i ? (s = !s, n += r) : r === "," && !s ? (t.push(n.trim()), n = "") : n += r;
94
+ for (let r = 0; r < e.length; r++) {
95
+ const o = e[r], i = o === "'";
96
+ if (i && e.at(r + 1) === "'") {
97
+ const l = e.at(r + 2) === "'";
98
+ s = !s, n += l ? "'''" : "''", r += l ? 2 : 1;
99
+ } else i ? (s = !s, n += o) : o === "," && !s ? (t.push(n.trim()), n = "") : n += o;
143
100
  }
144
- return t.push(n.trim()), t.map((o) => o === "" ? void 0 : o ? Pe(o) : void 0).filter((o, r, i) => o !== void 0 || !De(i, r));
145
- }, Pe = (e) => {
101
+ return t.push(n.trim()), t.map((r) => r === "" ? void 0 : r ? Be(r) : void 0).filter((r, o, i) => r !== void 0 || !Ue(i, o));
102
+ }, Be = (e) => {
146
103
  const t = e.length >= 2 && e[0] === "'" && e.at(-1) === "'", n = t && e.length >= 4 && e[1] === "'" && e.at(-2) === "'";
147
104
  return !t || n ? e : e.slice(1, -1);
148
- }, We = (e) => {
105
+ }, Fe = (e) => {
149
106
  const t = /^(\w+)(?:\(([^)]*)\))?/, n = e.match(t);
150
107
  if (!n) return { name: e };
151
- const [, s, o] = n;
152
- if (!o) return { name: s };
153
- const r = /(\w+)(\?)?:\s*([^,]+)/g, i = [];
154
- let c;
155
- for (; (c = r.exec(o)) !== null; ) {
156
- const [, l, a, u] = c, p = u.trim();
157
- if (!Te(p)) throw new Error(`Unsupported type: ${p}`);
158
- i.push({ name: l, optional: a === "?", type: p });
108
+ const [, s, r] = n;
109
+ if (!r) return { name: s };
110
+ const o = /(\w+)(\?)?:\s*([^,]+)/g, i = [];
111
+ let l;
112
+ for (; (l = o.exec(r)) !== null; ) {
113
+ const [, a, c, u] = l, p = u.trim();
114
+ if (!De(p)) throw new Error(`Unsupported type: ${p}`);
115
+ i.push({ name: a, optional: c === "?", type: p });
159
116
  }
160
117
  return { name: s, parameters: i };
161
- }, P = (e) => {
162
- const t = e.map(We).reduce(
163
- (n, { name: s, parameters: o }) => n.set(s, o),
118
+ }, R = (e) => {
119
+ const t = e.map(Fe).reduce(
120
+ (n, { name: s, parameters: r }) => n.set(s, r),
164
121
  /* @__PURE__ */ new Map()
165
122
  );
166
123
  return (n) => {
167
- const { name: s, parameters: o } = je(n);
124
+ const { name: s, parameters: r } = Le(n);
168
125
  if (!t.has(s))
169
126
  throw new Error(`Unknown method: ${s}`);
170
- const r = t.get(s);
171
- if (r === void 0)
127
+ const o = t.get(s);
128
+ if (o === void 0)
172
129
  return { name: s };
173
- if (o.length > r.length) {
174
- const i = r.filter(({ optional: l }) => !l).length, c = i === r.length ? i.toString() : `${i} - ${r.length}`;
175
- throw new Error(`Too many parameters: ${o.length} for method '${s}' (expected: ${c})`);
130
+ if (r.length > o.length) {
131
+ const i = o.filter(({ optional: a }) => !a).length, l = i === o.length ? i.toString() : `${i} - ${o.length}`;
132
+ throw new Error(`Too many parameters: ${r.length} for method '${s}' (expected: ${l})`);
176
133
  }
177
- return r.reduce((i, { name: c, optional: l, type: a }, u) => {
178
- const p = o[u];
134
+ return o.reduce((i, { name: l, optional: a, type: c }, u) => {
135
+ const p = r[u];
179
136
  if (p === void 0) {
180
- if (l) return i;
181
- throw new Error(`Missing required parameter: ${c} for method '${s}'`);
137
+ if (a) return i;
138
+ throw new Error(`Missing required parameter: ${l} for method '${s}'`);
182
139
  }
183
- switch (a) {
140
+ switch (c) {
184
141
  case "string":
185
- i[c] = p;
142
+ i[l] = p;
186
143
  break;
187
144
  case "number":
188
145
  case "boolean":
189
- i[c] = JSON.parse(p);
146
+ i[l] = JSON.parse(p);
190
147
  break;
191
148
  }
192
- if (typeof i[c] !== a)
193
- throw new Error(`Invalid type: ${c} must be ${a}, got ${typeof i[c]} for method '${s}'`);
149
+ if (typeof i[l] !== c)
150
+ throw new Error(`Invalid type: ${l} must be ${c}, got ${typeof i[l]} for method '${s}'`);
194
151
  return i;
195
152
  }, { name: s });
196
153
  };
197
- }, z = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), Le = [
154
+ }, Q = (e) => Object.entries(e).filter(([t]) => t !== "name" && !isNaN(Number(t))).map(([t, n]) => n), He = [
198
155
  /**
199
156
  * Wraps the content in a markdown-formatted code block.
200
157
  * @param lang The language of the code block (defaults to the file extension).
@@ -224,55 +181,131 @@ const U = /,\s*(?![^()]*\))/, H = {
224
181
  * @example [](<url>?wrap=dropdown(hello_world,,_))
225
182
  */
226
183
  "dropdown(summary: string, open?: boolean, space?: string)"
227
- ], qe = P(Le), f = (e, t = 1) => `
184
+ ], Qe = R(He), S = (e, t = 1) => `
228
185
  `.repeat(t) + e + `
229
- `.repeat(t), T = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${f(e)}</${t}>`, X = (e, t, n) => {
230
- const s = qe(t);
186
+ `.repeat(t), H = (e, t, n) => `<${t}${n ? ` ${n}` : ""}>${S(e)}</${t}>`, te = (e, t, n) => {
187
+ const s = Qe(t);
231
188
  switch (s.name) {
232
189
  case "code":
233
190
  if (!s.lang && !s.meta && (n == null ? void 0 : n.inline) && !e.includes(`
234
191
  `)) return `\`${e}\``;
235
- const r = s.lang ?? (n == null ? void 0 : n.extension) ?? "", i = s.meta ? ` ${s.meta}` : "";
236
- return f(`\`\`\`${r}${i}${f(e)}\`\`\``);
192
+ const o = s.lang ?? (n == null ? void 0 : n.extension) ?? "", i = s.meta ? ` ${s.meta}` : "";
193
+ return S(`\`\`\`${o}${i}${S(e)}\`\`\``);
237
194
  case "quote":
238
195
  return n != null && n.inline && !e.includes(`
239
196
 
240
- `) ? `> ${e}` : f(T(f(e), "blockquote"));
197
+ `) ? `> ${e}` : S(H(S(e), "blockquote"));
241
198
  case "dropdown":
242
- const c = T(N(s.summary), "summary");
243
- return f(T([c, e].join(`
199
+ const l = H(W(s.summary), "summary");
200
+ return S(H([l, e].join(`
244
201
  `), "details", s.open ? "open" : void 0));
245
202
  }
246
- }, W = (e) => {
203
+ };
204
+ class d {
205
+ constructor(...t) {
206
+ _(this, "_intervals", []);
207
+ _(this, "collapsed", !0);
208
+ for (const [n, s] of t)
209
+ this.push(n, s);
210
+ }
211
+ get intervals() {
212
+ return this._intervals;
213
+ }
214
+ push(t, n) {
215
+ return n ?? (n = t + 1), this._intervals.push([Math.min(t, n), Math.max(t, n)]), this.collapsed = !1, this;
216
+ }
217
+ combine(t) {
218
+ for (const [n, s] of t.intervals)
219
+ this.push(n, s);
220
+ return this;
221
+ }
222
+ collapse(t = !1) {
223
+ const { _intervals: n, collapsed: s } = this;
224
+ if (s && !t || !n.length) return this;
225
+ n.sort((l, a) => l[0] - a[0]);
226
+ const r = [];
227
+ let [o, i] = n[0];
228
+ for (let l = 1; l < n.length; l++) {
229
+ const [a, c] = n[l];
230
+ a <= i ? i = Math.max(i, c) : (r.push([o, i]), o = a, i = c);
231
+ }
232
+ return r.push([o, i]), this._intervals = r, this.collapsed = !0, this;
233
+ }
234
+ subtract(t) {
235
+ this.collapse(), t.collapse();
236
+ const { _intervals: n } = this, { _intervals: s } = t;
237
+ if (!n.length || !s.length) return this;
238
+ let r = [...n];
239
+ for (const [o, i] of s) {
240
+ const l = [];
241
+ for (const [a, c] of r) {
242
+ if (i <= a || o >= c) {
243
+ l.push([a, c]);
244
+ continue;
245
+ }
246
+ o > a && l.push([a, o]), i < c && l.push([i, c]);
247
+ }
248
+ r = l;
249
+ }
250
+ return this._intervals = r, this.collapse(!0), this;
251
+ }
252
+ test(t, n = "head") {
253
+ const { _intervals: s } = this;
254
+ switch (n) {
255
+ case "head":
256
+ return s.some(([r, o]) => t >= r && t < o);
257
+ case "tail":
258
+ return s.some(([r, o]) => t > r && t <= o);
259
+ case "both":
260
+ return s.some(([r, o]) => t >= r && t <= o);
261
+ case "none":
262
+ return s.some(([r, o]) => t > r && t < o);
263
+ }
264
+ }
265
+ slice(t) {
266
+ this.collapse();
267
+ const n = [];
268
+ for (const [s, r] of this._intervals)
269
+ n.push(t.slice(s, r));
270
+ return n.filter(Boolean).join("");
271
+ }
272
+ offset(t) {
273
+ for (const n of this._intervals)
274
+ n[0] += t, n[1] += t;
275
+ return this;
276
+ }
277
+ }
278
+ const D = (e) => {
247
279
  const t = /(\/\/[^\n]*|\/\*[\s\S]*?\*\/|<!--[\s\S]*?-->)/gm, n = [];
248
280
  let s;
249
281
  for (; (s = t.exec(e)) !== null; ) {
250
- const o = [s.index, s.index + s[0].length], r = Be(s[0]).trim();
251
- n.push({ range: o, value: r });
282
+ const r = [s.index, s.index + s[0].length], o = Ge(s[0]).trim();
283
+ n.push({ range: r, value: o });
252
284
  }
253
285
  return n;
254
- }, Be = (e) => e.startsWith("//") ? e.slice(2) : e.startsWith("/*") ? e.slice(2, -2) : e.startsWith("<!--") ? e.slice(4, -3) : e, te = [
286
+ }, Ge = (e) => e.startsWith("//") ? e.slice(2) : e.startsWith("/*") ? e.slice(2, -2) : e.startsWith("<!--") ? e.slice(4, -3) : e, ze = [
255
287
  "p↓:",
256
288
  "pd:",
257
289
  "parkdown:"
258
- ], Fe = [
290
+ ], Xe = [
259
291
  "splice(delete?: number, insert?: string)"
260
292
  ];
261
- P(Fe);
262
- const ne = (e, t) => e.range[0] - t.range[0], se = (e, t, n) => (n ?? W(e)).filter(({ value: s }) => s.includes(t)).sort(ne), V = (e) => ({
293
+ R(Xe);
294
+ const pe = (e, t) => e.range[0] - t.range[0], J = (e, t, n) => (n ?? D(e)).filter(({ value: s }) => s.split(" ").includes(t)).sort(pe), ne = (e) => ({
263
295
  isSpace: e === " ",
264
296
  isNewline: e === `
265
297
  ` || e === void 0
266
- }), J = (e) => te.flatMap((t) => se(e, t)).sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, s], value: o }) => {
267
- const r = (p, b) => t.slice(0, p) + t.slice(b), i = V(t[n - 1]), c = V(t[s]), l = s === t.length;
268
- let a = n;
269
- for (; a > 0 && t[a - 1] !== `
270
- `; ) a--;
271
- const u = t.slice(a, n).trim() === "";
272
- return i.isNewline && c.isNewline ? r(n - (l ? 1 : 0), s + 1) : i.isNewline || u ? r(a, s + (c.isSpace || c.isNewline ? 1 : 0)) : r(n - (i.isSpace ? 1 : 0), s);
273
- }, e);
274
- te.map((e) => new RegExp(`^${Oe(e)}(\\?[^\\s]+)`));
275
- const Ue = [
298
+ }), se = (e) => ze.flatMap((t) => J(e, t)).sort((t, n) => t.range[0] - n.range[0]).reverse().reduce((t, { range: [n, s], value: r }) => {
299
+ const o = (w, $) => t.slice(0, w) + t.slice($), i = ne(t[n - 1]), l = ne(t[s]), a = s === t.length;
300
+ let c = n;
301
+ for (; c > 0 && t[c - 1] !== `
302
+ `; ) c--;
303
+ let u = s;
304
+ for (; u < t.length && t[u] !== `
305
+ `; ) u++;
306
+ const p = t.slice(c, n).trim() === "" && t.slice(s, u).trim() === "";
307
+ return i.isNewline && l.isNewline ? o(n - (a ? 1 : 0), s + 1) : i.isNewline || p ? o(c, s + (l.isSpace || l.isNewline ? 1 : 0)) : o(n - (i.isSpace ? 1 : 0), s);
308
+ }, e), Ve = [
276
309
  /**
277
310
  * Extract regions from the retrieved content between comments that INCLUDE the specified ids.
278
311
  * @param id The id of the comment to extract.
@@ -304,25 +337,7 @@ const Ue = [
304
337
  */
305
338
  "replace(id: string, with?: string, space?: string)",
306
339
  /**
307
- * Splice the retrieved content at the boundary of a comment region (which must INCLUDE the specified id).
308
- *
309
- * **NOTE:** Unlike `extract`, `remove`, and `replace`, `splice` does remove the comment from the content after processing.
310
- * @param id The id of the comment regions to act on.
311
- * @param deleteCount The number of characters to delete at either the beginning or end of the comment region.
312
- * Specifying a number greater than or equal to 0 indicates the action should be taken at the end of the comment region.
313
- * Specifying undefined or a number less than 0 indicates the action should be taken at the beginning of the comment region.
314
- * @param insert The content to insert.
315
- * @param space The space character to use between words in the content to insert (defaults to `-`).
316
- * @example [](<url>?region=splice(specifier,-1)) // Delete one character at the beginning of the comment region.
317
- * @example [](<url>?region=splice(specifier,undefined,new-content)) // Insert at the beginning of the comment region.
318
- * @example [](<url>?region=splice(specifier,0,new-content)) // Insert at the end of the comment region.
319
- * @example [](<url>?region=splice(specifier,1,new-content)) // Delete one character at the end of the comment region and insert.
320
- */
321
- "splice(id: string, deleteCount?: number, insert?: string, space?: string)",
322
- /**
323
- * Remap the content within a comment region (which must INCLUDE the specified id).
324
- *
325
- * **NOTE:** Unlike `extract`, `remove`, and `replace`, `remap` does not remove the comment from the content after processing.
340
+ * Remap the content (similiar to `string.replaceAll`) within a specified comment region.
326
341
  * @param id The id of the comment regions to act on.
327
342
  * @param from The content to replace.
328
343
  * @param to The content to replace with.
@@ -330,223 +345,388 @@ const Ue = [
330
345
  * @example [](<url>?region=remap(specifier,hello-world,hello-universe))
331
346
  * @example [](<url>?region=remap(specifier,hello_world,hello_universe,_)
332
347
  */
333
- "remap(id: string, from: string, to: string, space?: string)"
334
- ], He = P(Ue), w = (e, t, n) => {
335
- const s = se(e, t, n), o = [];
336
- for (let r = 0; r < s.length - 1; r += 2)
337
- o.push([s[r], s[r + 1]]);
338
- return o;
339
- }, Ge = (e, ...t) => {
348
+ "remap(id: string, from: string, to?: string, space?: string)",
349
+ /**
350
+ * Make the content of the region a single line (where all whitespace characters, including newlines, are converted to a single space).
351
+ * @param id The id of the comment regions to act on.
352
+ * @example [](<url>?region=single-line(specifier))
353
+ */
354
+ "single-line(id: string, includeBoundaries?: boolean)",
355
+ /**
356
+ * Trim the whitespace surrounding the comment boundaries of the region.
357
+ * @param id The id of the comment region to act on.
358
+ * @param inside Whether to trim the whitespace within the comment region. Defaults to `true`.
359
+ * @param outside Whether to trim the whitespace outside the comment region. Defaults to `true`.
360
+ * @example [](<url>?region=trim(specifier))
361
+ * @example [](<url>?region=trim(specifier,false))
362
+ * @example [](<url>?region=trim(specifier,,false))
363
+ * @example [](<url>?region=trim(specifier,false,false))
364
+ */
365
+ "trim(id: string, inside?: boolean, outside?: boolean)",
366
+ /**
367
+ * Trim the whitespace surrounding the starting comment boundary of the specified region.
368
+ * @param id The id of the comment region to act on.
369
+ * @param left Whether to trim the whitespace to the left of the comment region. Defaults to `true`.
370
+ * @param right Whether to trim the whitespace to the right of the comment region. Defaults to `true`.
371
+ * @example [](<url>?region=trim-start(specifier))
372
+ * @example [](<url>?region=trim-start(specifier,false))
373
+ */
374
+ "trim-start(id: string, left?: boolean, right?: boolean)",
375
+ /**
376
+ * Trim the whitespace surrounding the ending comment boundary of the specified region.
377
+ * @param id The id of the comment region to act on.
378
+ * @param left Whether to trim the whitespace to the left of the comment region. Defaults to `true`.
379
+ * @param right Whether to trim the whitespace to the right of the comment region. Defaults to `true`.
380
+ * @example [](<url>?region=trim-end(specifier))
381
+ * @example [](<url>?region=trim-end(specifier,false))
382
+ */
383
+ "trim-end(id: string, left?: boolean, right?: boolean)",
384
+ /**
385
+ * Splice the retrieved content at the starting comment boundary of the specified region.
386
+ * @param id The id of the comment region to act on.
387
+ * @param deleteCount The number of characters to delete at either the beginning or end of the comment boundary.
388
+ * Specifying a number greater than or equal to 0 indicates the action should be taken at the end of the comment boundary (i.e to the right of the comment).
389
+ * Specifying undefined or a number less than 0 indicates the action should be taken at the beginning of the comment boundary (i.e to the left of the comment).
390
+ * @param insert The content to insert.
391
+ * @param space The space character to use between words in the content to insert (defaults to `-`).
392
+ *
393
+ * **NOTE:** Content within comments will not be acted upon.
394
+ */
395
+ "splice-start(id: string, deleteCount?: number, insert?: string, space?: string)",
396
+ /**
397
+ * Splice the retrieved content at the ending comment boundary of the specified region.
398
+ * @param id The id of the comment region to act on.
399
+ * @param deleteCount The number of characters to delete at either the beginning or end of the comment boundary.
400
+ * Specifying a number greater than or equal to 0 indicates the action should be taken at the end of the comment boundary (i.e to the right of the comment).
401
+ * Specifying undefined or a number less than 0 indicates the action should be taken at the beginning of the comment boundary (i.e to the left of the comment).
402
+ * @param insert The content to insert.
403
+ * @param space The space character to use between words in the content to insert (defaults to `-`).
404
+ *
405
+ * **NOTE:** Content within comments will not be acted upon.
406
+ */
407
+ "splice-end(id: string, deleteCount?: number, insert?: string, space?: string)",
408
+ /**
409
+ * If included at the end of a query, parkdown comments will not be removed from the content after processing.
410
+ * Helpful when trying to determine fine-grained edits (e.g. trimming, splicing, etc.).
411
+ */
412
+ "debug()"
413
+ ], Je = R(Ve), C = (e, t, n) => {
414
+ const s = J(e, t, n), r = [];
415
+ for (let o = 0; o < s.length - 1; o += 2)
416
+ r.push([s[o], s[o + 1]]);
417
+ return r;
418
+ }, Ze = (e, t, n) => new d(...J(e, t, n).map(({ range: s }) => s)), P = (e) => Ne(e).trim(), Ke = (e, ...t) => {
340
419
  if (t.length === 0) return e;
341
- const n = W(e), s = ([i, c]) => e.slice(i, c), o = new d(), r = new d();
342
- for (const i of t)
343
- for (const [c, l] of w(e, i, n)) {
344
- o.push(c.range[1], l.range[0]);
345
- const [a, ...u] = s([c.range[1], l.range[0]]), p = u[u.length - 1];
346
- r.push(c.range[0], c.range[1] + (a.trim() ? 0 : 1)), r.push(l.range[0], l.range[1] + (p.trim() ? 0 : 1));
420
+ const n = D(e), s = new d(), r = new d();
421
+ for (const o of t)
422
+ for (const [i, l] of C(e, o, n)) {
423
+ s.push(i.range[1], l.range[0]);
424
+ const [a, ...c] = e.slice(i.range[1], l.range[0]), u = c[c.length - 1];
425
+ r.push(i.range[0], i.range[1] + (a.trim() ? 0 : 1)), r.push(l.range[0], l.range[1] + (u.trim() ? 0 : 1));
347
426
  }
348
- return o.collapse(), r.collapse(), j(
349
- o.subtract(r).map(s).filter(Boolean).join("")
350
- ).trim();
351
- }, Qe = (e, ...t) => {
427
+ return P(s.subtract(r).slice(e));
428
+ }, Ye = (e, ...t) => {
352
429
  if (t.length === 0) return e;
353
- const n = W(e), s = ([i, c]) => e.slice(i, c), o = new d();
354
- for (const i of t)
355
- for (const [c, l] of w(e, i, n)) {
430
+ const n = D(e), s = ([o, i]) => e.slice(o, i), r = new d();
431
+ for (const o of t)
432
+ for (const [i, l] of C(e, o, n)) {
356
433
  const a = s([l.range[1], l.range[1] + 1]).at(-1);
357
- o.push(c.range[0], a === `
434
+ r.push(i.range[0], a === `
358
435
  ` ? l.range[1] + 1 : l.range[1]);
359
436
  }
360
- o.collapse();
361
- const r = new d([0, e.length]);
362
- return r.subtract(o), j(
363
- r.collapse().map(s).filter(Boolean).join("")
364
- ).trim();
365
- }, ze = (e, t, n, s) => {
437
+ return P(new d([0, e.length]).subtract(r).slice(e));
438
+ }, et = (e, t, n, s) => {
366
439
  if (!t) return e;
367
- let o = "", r = 0;
368
- for (const [c, l] of w(e, t))
369
- o += e.slice(r, c.range[1]), o += N(n ?? c.value, s), r = l.range[0];
370
- o += e.slice(r);
371
- const i = new d([0, o.length]);
372
- return i.subtract(new d(
373
- ...w(o, t).flatMap(([c, l]) => [c.range, l.range])
374
- )), j(
375
- i.collapse().map(([c, l]) => o.slice(c, l)).filter(Boolean).join("")
376
- ).trim();
377
- }, Xe = (e, t, n, s, o) => {
378
- if (!t) return e;
379
- const r = n === void 0 ? !1 : n >= 0, i = s ? N(s, o) : "", c = n ?? 0;
380
- return w(e, t).map((l) => l[r ? 1 : 0]).sort(ne).reverse().reduce(
381
- (l, { range: a }) => r ? l.slice(0, a[1]) + i + l.slice(Math.min(a[1] + c, l.length)) : l.slice(0, Math.max(a[0] + c, 0)) + i + l.slice(a[0]),
382
- e
440
+ let r = "", o = 0;
441
+ for (const [i, l] of C(e, t))
442
+ r += e.slice(o, i.range[1]), r += W(n ?? i.value, s), o = l.range[0];
443
+ return r += e.slice(o), P(
444
+ new d([0, r.length]).subtract(Ze(r, t)).slice(r)
383
445
  );
384
- }, Ve = (e, t, n, s, o) => {
446
+ }, tt = (e, t, n, s, r, o) => {
447
+ if (!t) return e;
448
+ const i = !(s === void 0 || s < 0), l = r ? W(r, o) : "", a = s ?? 0, c = D(e), u = new d(...c.map(({ range: p }) => p));
449
+ return C(e, t, c).map((p) => p[n === "start" ? 0 : 1]).sort(pe).reverse().reduce((p, { range: w }) => {
450
+ const $ = new d(), M = i ? 1 : -1;
451
+ let x = Math.abs(a), m = i ? w[1] : w[0];
452
+ for (; x > 0 && m < p.length && m >= 0; )
453
+ u.test(m) || ($.push(m), x--), m += M;
454
+ return m = Math.min(Math.max(0, m), p.length), p = p.slice(0, m) + l + p.slice(m), new d([0, p.length]).subtract($.offset(i ? 0 : l.length)).slice(p);
455
+ }, e);
456
+ }, nt = (e, t, n, s, r) => {
457
+ if (!t) return e;
458
+ let o = "", i = 0;
459
+ [n, s] = [n, s ?? ""].map((l) => W(l, r));
460
+ for (const [l, a] of C(e, t))
461
+ o += e.slice(i, l.range[1]), o += e.slice(l.range[1], a.range[0]).replaceAll(n, s), i = a.range[0];
462
+ return o += e.slice(i), o;
463
+ }, st = (e, t) => {
385
464
  if (!t) return e;
386
- let r = "", i = 0;
387
- const c = [n, s].map((l) => N(l, o));
388
- console.log(c);
389
- for (const [l, a] of w(e, t))
390
- r += e.slice(i, l.range[1]), r += e.slice(l.range[1], a.range[0]).replaceAll(c[0], c[1]), i = a.range[0];
391
- return r += e.slice(i), r;
392
- }, Je = (e, t, n) => {
393
- if (!t) return J(e);
394
- const s = He(t);
465
+ let n = "", s = 0;
466
+ for (const [r, o] of C(e, t))
467
+ n += e.slice(s, r.range[1]), n += e.slice(r.range[1], o.range[0]).replaceAll(/[\s\n]+/g, " "), s = o.range[0];
468
+ return n += e.slice(s), n;
469
+ }, re = (e, t, n) => {
470
+ var o, i, l, a;
471
+ if (!t) return e;
472
+ const s = (c) => /\s/.test(e[c]), r = new d();
473
+ for (const [c, u] of C(e, t)) {
474
+ if ((o = n.start) != null && o.left) {
475
+ let p = c.range[0] - 1;
476
+ for (; s(p); ) r.push(p--);
477
+ }
478
+ if ((i = n.start) != null && i.right) {
479
+ let p = c.range[1];
480
+ for (; s(p); ) r.push(p++);
481
+ }
482
+ if ((l = n.end) != null && l.left) {
483
+ let p = u.range[0] - 1;
484
+ for (; s(p); ) r.push(p--);
485
+ }
486
+ if ((a = n.end) != null && a.right) {
487
+ let p = u.range[1];
488
+ for (; s(p); ) r.push(p++);
489
+ }
490
+ }
491
+ return new d([0, e.length]).subtract(r).slice(e);
492
+ }, rt = (e, t, n) => {
493
+ if (!t) return se(e);
494
+ const s = Je(t);
395
495
  switch (s.name) {
396
496
  case "extract":
397
- e = Ge(e, s.id, ...z(s));
497
+ e = Ke(e, s.id, ...Q(s));
398
498
  break;
399
499
  case "remove":
400
- e = Qe(e, s.id, ...z(s));
500
+ e = Ye(e, s.id, ...Q(s));
401
501
  break;
402
502
  case "replace":
403
- e = ze(e, s.id, s.with, s.space);
503
+ e = et(e, s.id, s.with, s.space);
404
504
  break;
405
- case "splice":
406
- e = Xe(e, s.id, s.deleteCount, s.insert, s.space);
505
+ case "splice-start":
506
+ case "splice-end": {
507
+ const { deleteCount: r, insert: o, space: i, id: l } = s, a = s.name === "splice-start" ? "start" : "end";
508
+ e = tt(e, l, a, r, o, i);
509
+ break;
510
+ }
511
+ case "trim-start":
512
+ case "trim-end": {
513
+ const { left: r, right: o, id: i } = s, l = s.name === "trim-start" ? "start" : "end";
514
+ e = re(e, i, { [l]: { left: r ?? !0, right: o ?? !0 } });
515
+ break;
516
+ }
517
+ case "trim": {
518
+ const { inside: r, outside: o, id: i } = s;
519
+ e = re(e, i, { start: { left: o ?? !0, right: r ?? !0 }, end: { left: r ?? !0, right: o ?? !0 } });
520
+ break;
521
+ }
522
+ case "single-line":
523
+ e = st(e, s.id);
407
524
  break;
408
525
  case "remap":
409
- e = Ve(e, s.id, s.from, s.to, s.space);
526
+ e = nt(e, s.id, s.from, s.to, s.space);
410
527
  break;
411
528
  }
412
- return n ? J(e) : e;
413
- }, Ze = ["http", "./", "../"], Ke = ({ url: e }) => Ze.some((t) => e.startsWith(t)), Ye = (e) => D(e) && xe(e) && Ke(e), oe = ({ url: e }, t) => `[](${t ? y(t, e) : e})`, m = {
529
+ return e = n && s.name !== "debug" ? se(e) : e, n ? P(e) : e;
530
+ }, ot = [
531
+ "recipe(id: string)"
532
+ ], it = [
533
+ "recipe(id: string, 0?: string, 1?: string, 2?: string)"
534
+ ], oe = {
535
+ register: R(ot),
536
+ apply: R(it)
537
+ }, N = class N {
538
+ constructor() {
539
+ _(this, "recipes", /* @__PURE__ */ new Map());
540
+ }
541
+ tryRegister(t) {
542
+ const n = N.Entries(t);
543
+ for (let s = 0; s < n.length; s++) {
544
+ const [r, o] = n[s];
545
+ if (r !== "register") continue;
546
+ const i = oe.register(o);
547
+ switch (i.name) {
548
+ case "recipe":
549
+ const l = n.slice(s + 1).filter(([a]) => a !== "register").map(([a, c]) => `${a}=${c}`).join("&");
550
+ this.recipes.set(i.id, l);
551
+ break;
552
+ default:
553
+ throw new Error(`Unknown registration: ${i.name}`);
554
+ }
555
+ }
556
+ }
557
+ apply(t) {
558
+ const n = N.Entries(t), s = [];
559
+ for (let r = 0; r < n.length; r++) {
560
+ const [o, i] = n[r];
561
+ if (o !== "apply") {
562
+ s.push(`${o}=${i}`);
563
+ continue;
564
+ }
565
+ const l = oe.apply(i);
566
+ switch (l.name) {
567
+ case "recipe":
568
+ s.push(this.recipes.get(l.id)), s.push(...Q(l).map((a) => this.recipes.get(a)));
569
+ break;
570
+ default:
571
+ throw new Error(`Unknown registration: ${l.name}`);
572
+ }
573
+ }
574
+ return s.join("&");
575
+ }
576
+ };
577
+ _(N, "Entries", (t) => Array.from(new URLSearchParams(t).entries()));
578
+ let G = N;
579
+ const lt = ["http", "./", "../", "?"], at = ({ url: e }) => lt.some((t) => e.startsWith(t)), ct = (e) => X(e) && Me(e) && at(e), ue = ({ url: e }, t) => `[](${t ? T(t, e) : e})`, g = {
414
580
  _open: "<!--",
415
581
  _close: "-->",
416
582
  _flag: "p↓",
417
583
  get begin() {
418
- return E(m._open, m._flag, "BEGIN", m._close);
584
+ return O(g._open, g._flag, "BEGIN", g._close);
419
585
  },
420
586
  get end() {
421
- return E(m._open, m._flag, "END", m._close);
587
+ return O(g._open, g._flag, "END", g._close);
422
588
  },
423
589
  lengthOf(e) {
424
590
  const t = `lines: ${e.split(`
425
591
  `).length}`, n = `chars: ${e.length}`;
426
- return E(m._open, m._flag, "length", t, n, m._close);
592
+ return O(g._open, g._flag, "length", t, n, g._close);
427
593
  }
428
- }, Z = (e) => (t) => D(t) && t.value === m[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 ? E : be)(
429
- oe(e, n),
430
- m.begin,
431
- m.lengthOf(t),
594
+ }, ie = (e) => (t) => X(t) && t.value === g[e], pt = ({ position: e, url: t, siblingCount: n }, s) => ({ position: e, url: t, headingDepth: s, inline: n >= 1 }), ut = ({ position: { start: e }, url: t, siblingCount: n }, { position: { end: s } }, r) => ({ position: { start: e, end: s }, url: t, headingDepth: r, inline: n >= 1 }), mt = (e, t, n) => (e.inline ? O : Oe)(
595
+ ue(e, n),
596
+ g.begin,
597
+ g.lengthOf(t),
432
598
  t,
433
- m.end
434
- ), st = (e) => {
435
- const t = S(e, "heading").reduce((n, { position: s, depth: o }) => n.set(s.start.line, o), /* @__PURE__ */ new Map());
599
+ g.end
600
+ ), gt = (e) => {
601
+ const t = I(e, "heading").reduce((n, { position: s, depth: r }) => n.set(s.start.line, r), /* @__PURE__ */ new Map());
436
602
  return (n) => {
437
603
  for (let s = n.position.start.line; s >= 1; s--) {
438
- const o = t.get(s);
439
- if (o) return o;
604
+ const r = t.get(s);
605
+ if (r) return r;
440
606
  }
441
607
  return 0;
442
608
  };
443
- }, x = {
609
+ }, j = {
444
610
  openingCommentDoesNotFollowLink: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) does not follow link`),
445
611
  closingCommentNotMatchedToOpening: ({ position: { start: e } }) => new Error(`Closing comment (@${e.line}:${e.column}) does not match to opening comment`),
446
612
  openingCommentNotClosed: ({ position: { start: e } }) => new Error(`Opening comment (@${e.line}:${e.column}) is not followed by a closing comment`)
447
- }, ot = (e, t) => {
613
+ }, ht = (e, t) => {
448
614
  const n = [], s = [
449
- ...e.map((r) => ({ node: r, type: "open" })),
450
- ...t.map((r) => ({ node: r, type: "close" }))
451
- ].sort((r, i) => h(r.node, i.node)), o = [];
452
- for (const r of s)
453
- if (r.type === "open") o.push(r);
615
+ ...e.map((o) => ({ node: o, type: "open" })),
616
+ ...t.map((o) => ({ node: o, type: "close" }))
617
+ ].sort((o, i) => f(o.node, i.node)), r = [];
618
+ for (const o of s)
619
+ if (o.type === "open") r.push(o);
454
620
  else {
455
- const i = r.node;
456
- if (o.length === 0)
457
- throw x.closingCommentNotMatchedToOpening(i);
458
- const c = o.pop().node;
459
- if (o.length > 0) continue;
460
- n.push({ open: c, close: i });
621
+ const i = o.node;
622
+ if (r.length === 0)
623
+ throw j.closingCommentNotMatchedToOpening(i);
624
+ const l = r.pop().node;
625
+ if (r.length > 0) continue;
626
+ n.push({ open: l, close: i });
461
627
  }
462
- if (o.length > 0)
463
- throw x.openingCommentNotClosed(o[0].node);
628
+ if (r.length > 0)
629
+ throw j.openingCommentNotClosed(r[0].node);
464
630
  return n;
465
- }, rt = (e, t, n) => {
466
- const s = [...t].sort(h), o = [];
467
- return [...n].sort((r, i) => h.reverse(r.open, i.open)).forEach((r) => {
631
+ }, dt = (e, t, n) => {
632
+ const s = [...t].sort(f), r = [];
633
+ return [...n].sort((o, i) => f.reverse(o.open, i.open)).forEach((o) => {
468
634
  for (; s.length > 0; ) {
469
635
  const i = s.pop();
470
- if (i.position.start.offset < r.open.position.start.offset) {
471
- if (Ne(e, i, r.open).trim() !== "")
472
- throw x.openingCommentDoesNotFollowLink(r.open);
473
- return o.push([i, r]);
636
+ if (i.position.start.offset < o.open.position.start.offset) {
637
+ if (Ae(e, i, o.open).trim() !== "")
638
+ throw j.openingCommentDoesNotFollowLink(o.open);
639
+ return r.push([i, o]);
474
640
  }
475
- o.push(i);
641
+ r.push(i);
476
642
  }
477
- throw x.openingCommentDoesNotFollowLink(r.open);
478
- }), o.push(...s.reverse()), o.reverse();
479
- }, re = (e, t) => {
480
- t ?? (t = I.md(e));
481
- const n = st(t), s = S(t, "link").filter(Ye), o = S(t, "html").sort(h), r = o.filter(Z("begin")), i = o.filter(Z("end")), c = ot(r, i);
482
- return rt(e, s, c).map((a) => Array.isArray(a) ? tt(a[0], a[1].close, n(a[0])) : et(a, n(a)));
483
- }, it = (e, { url: t }) => (n) => e(y(A(t), n)), ie = (...e) => {
643
+ throw j.openingCommentDoesNotFollowLink(o.open);
644
+ }), r.push(...s.reverse()), r.reverse();
645
+ }, me = (e, t) => {
646
+ t ?? (t = V.md(e));
647
+ const n = gt(t), s = I(t, "link").filter(ct), r = I(t, "html").sort(f), o = r.filter(ie("begin")), i = r.filter(ie("end")), l = ht(o, i);
648
+ return dt(e, s, l).map((c) => Array.isArray(c) ? ut(c[0], c[1].close, n(c[0])) : pt(c, n(c)));
649
+ }, ft = (e, { url: t }) => (n) => e(T(z(t), n)), ge = (...e) => {
484
650
  const t = e.reduce((n, s) => n + s, 0);
485
651
  return Math.min(Math.max(t, 1), 6);
486
- }, ct = (e, t, n) => {
652
+ }, vt = (e, t, n) => {
487
653
  if (t === 0) return e;
488
- n ?? (n = I.md(e));
489
- const s = S(n, "heading"), o = e.split(`
654
+ n ?? (n = V.md(e));
655
+ const s = I(n, "heading"), r = e.split(`
490
656
  `);
491
- for (const r of s) {
492
- const { depth: i, position: { start: c, end: l } } = r, a = ie(i, t), u = o[c.line - 1].slice(i, l.column), p = "#".repeat(a) + u;
493
- o[c.line - 1] = p, r.depth = a;
657
+ for (const o of s) {
658
+ const { depth: i, position: { start: l, end: a } } = o, c = ge(i, t), u = r[l.line - 1].slice(i, a.column), p = "#".repeat(c) + u;
659
+ r[l.line - 1] = p, o.depth = c;
494
660
  }
495
- return o.join(`
661
+ return r.join(`
496
662
  `);
497
- }, ce = (e) => re(e).reverse().sort(h.reverse).reduce((t, n) => ee(t, oe(n), n), e), le = (e, t, n, s, o) => {
663
+ }, he = (e) => me(e).reverse().sort(f.reverse).reduce((t, n) => ce(t, ue(n), n), e), de = (e, t, n, s, r) => {
498
664
  try {
499
- e = ce(e), e = ct(e, t);
500
- const r = I.md(e);
501
- return re(e, r).sort(h).reverse().map((i) => {
502
- var q, B;
503
- const { url: c, headingDepth: l } = i, [a, ...u] = ve(c).split("?"), p = a.split(".").pop() ?? "", b = u.join("?"), k = A(c), L = y(k, a);
504
- if (c.startsWith("./") || c.startsWith("../")) {
505
- let g = n(L);
506
- const v = new $e(b), M = (q = v.get("region")) == null ? void 0 : q.split(U);
507
- g = (M == null ? void 0 : M.reduce(
508
- ($, C, R, { length: he }) => Je($, C, R === he - 1),
509
- g
510
- )) ?? g;
511
- const me = v.has("skip"), ue = v.get("heading") ?? 0, ge = v.has("inline");
512
- let { inline: _ } = i;
513
- if (ge && (_ = !0), !me)
514
- if (p === "md") {
515
- const $ = it(n, i), C = o ? y(o, k) : k, R = ie(l, Number(ue));
516
- g = le(
517
- g,
665
+ e = he(e), e = vt(e, t);
666
+ const o = V.md(e), i = new G();
667
+ return me(e, o).sort(f).reverse().map((l) => {
668
+ var $, M, x;
669
+ const { url: a, headingDepth: c } = l, [u, ...p] = Se(a).split("?"), w = i.apply(p.join("?"));
670
+ if (a.startsWith("?")) {
671
+ const b = ($ = new Z(w).get("register")) == null ? void 0 : $.split(F);
672
+ b == null || b.forEach((A) => i.tryRegister(A));
673
+ } else if (a.startsWith("./") || a.startsWith("../")) {
674
+ const m = u.split(".").pop() ?? "", b = z(a), A = T(b, u);
675
+ let h = n(A);
676
+ const k = new Z(w), L = (M = ((y) => {
677
+ const v = Array.from(k.entries()).filter(([E]) => E === y).map(([E, B]) => B);
678
+ return v.length >= 1 ? v.join(",") : void 0;
679
+ })("region")) == null ? void 0 : M.split(F);
680
+ h = (L == null ? void 0 : L.reduce(
681
+ (y, v, E, { length: B }) => rt(y, v, E === B - 1),
682
+ h
683
+ )) ?? h;
684
+ const we = k.has("skip"), $e = k.get("heading") ?? 0, be = k.has("inline");
685
+ let { inline: U } = l;
686
+ if (be && (U = !0), !we)
687
+ if (m === "md") {
688
+ const y = ft(n, l), v = r ? T(r, b) : b, E = ge(c, Number($e));
689
+ h = de(
690
+ h,
518
691
  /** p↓: ... */
519
- R,
520
- $,
521
- L,
522
- C
692
+ E,
693
+ y,
694
+ A,
695
+ v
523
696
  /** p↓: ... */
524
697
  );
525
- } else /^(js|ts)x?|svelte$/i.test(p) && (g = X(
526
- g,
698
+ } else /^(js|ts)x?|svelte$/i.test(m) && (h = te(
699
+ h,
527
700
  "code",
528
701
  /** p↓: ... */
529
- { extension: p, inline: _ }
702
+ { extension: m, inline: U }
530
703
  /** p↓: ... */
531
704
  ));
532
- const O = (B = v.get("wrap")) == null ? void 0 : B.split(U);
533
- return g = (O == null ? void 0 : O.reduce(($, C) => X($, C, { extension: p, inline: _ }), g)) ?? g, { target: i, content: nt(i, g, o) };
534
- } else throw c.startsWith("http") ? new Error("External web links are not implemented yet") : new Error(`Unsupported link type: ${c}`);
535
- }).reduce((i, { target: c, content: l }) => ee(i, l, c), e);
536
- } catch (r) {
537
- throw new Error(`Error populating inclusions in file ${s ?? "(unknown)"}: ${r}`);
705
+ const q = (x = k.get("wrap")) == null ? void 0 : x.split(F);
706
+ return h = (q == null ? void 0 : q.reduce((y, v) => te(y, v, { extension: m, inline: U }), h)) ?? h, { target: l, content: mt(l, h, r) };
707
+ } else throw a.startsWith("http") ? new Error("External web links are not implemented yet") : new Error(`Unsupported link type: ${a}`);
708
+ }).filter(Boolean).reduce((l, { target: a, content: c }) => ce(l, c, a), e);
709
+ } catch (o) {
710
+ throw new Error(`Error populating inclusions in file ${s ?? "(unknown)"}: ${o}`);
538
711
  }
539
- }, ae = (e) => we(e, "utf-8"), pe = (e) => {
540
- const t = Y(e), n = A(t);
541
- return { markdown: ae(t), dir: n, path: t };
542
- }, dt = (e, t = !0) => {
543
- const { dir: n, path: s, markdown: o } = pe(e), i = le(o, 0, (c) => ae(Y(n, Me(c))), s);
544
- return t && K(s, i), i;
545
- }, wt = (e, t = !0) => {
546
- const { path: n, markdown: s } = pe(e), o = ce(s);
547
- return t && K(n, o), o;
712
+ }, fe = (e) => Ee(e, "utf-8"), ve = (e) => {
713
+ const t = ae(e), n = z(t);
714
+ return { content: fe(t), dir: n, path: t };
715
+ }, wt = (e, t = !0, n) => {
716
+ const { dir: s, path: r, content: o } = ve(e);
717
+ n == null || n.unwatch(r), n == null || n.once("change", (a, c) => {
718
+ console.log(`Change detected in "${a}". Regenerating "${r}"...`), wt(e, t, n);
719
+ });
720
+ const l = de(o, 0, (a) => {
721
+ const c = ae(s, Ie(a));
722
+ return n == null || n.add(c), fe(c);
723
+ }, r);
724
+ return t && le(r, l), n == null || n.add(r), l;
725
+ }, Nt = (e, t = !0, n) => {
726
+ const { path: s, content: r } = ve(e), o = he(r);
727
+ return t && le(s, o), o;
548
728
  };
549
729
  export {
550
- wt as depopulateMarkdownInclusions,
551
- dt as populateMarkdownInclusions
730
+ Nt as depopulateMarkdownInclusions,
731
+ wt as populateMarkdownInclusions
552
732
  };