@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/README.md +51 -14
- package/dist/cli.js +12 -11
- package/dist/index.d.ts +6 -2
- package/dist/index.js +498 -318
- package/dist/index.umd.cjs +15 -14
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1,84 +1,41 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { writeFileSync as
|
|
5
|
-
import { basename as
|
|
6
|
-
import { URLSearchParams as
|
|
7
|
-
import { unified as
|
|
8
|
-
import
|
|
9
|
-
import { visit as
|
|
10
|
-
import { dedent as
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
md: (e) =>
|
|
15
|
-
},
|
|
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
|
|
17
|
+
return _e(e, (s, r, o) => {
|
|
18
18
|
if (s.type !== "root") {
|
|
19
19
|
if (t && s.type !== t) return;
|
|
20
|
-
if (
|
|
21
|
-
const i = ((
|
|
22
|
-
n.push({ ...s, siblingIndex:
|
|
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
|
-
},
|
|
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(
|
|
29
|
-
const s = n.at(0),
|
|
30
|
-
return e.slice(0, s.position.start.offset) + t + e.slice(
|
|
31
|
-
},
|
|
32
|
-
const s = Math.min(t.position.end.offset, n.position.end.offset),
|
|
33
|
-
return e.slice(s,
|
|
34
|
-
},
|
|
35
|
-
`),
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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(
|
|
118
|
-
...Object.entries(
|
|
74
|
+
...Object.entries(K.unsafe),
|
|
75
|
+
...Object.entries(K.reserved)
|
|
119
76
|
]
|
|
120
|
-
},
|
|
121
|
-
const n =
|
|
122
|
-
return
|
|
123
|
-
},
|
|
124
|
-
const t = e.match(
|
|
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
|
|
129
|
-
return { name: n, parameters:
|
|
130
|
-
},
|
|
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
|
-
},
|
|
91
|
+
}, qe = (e) => {
|
|
135
92
|
const t = [];
|
|
136
93
|
let n = "", s = !1;
|
|
137
|
-
for (let
|
|
138
|
-
const
|
|
139
|
-
if (i && e.at(
|
|
140
|
-
const
|
|
141
|
-
s = !s, n +=
|
|
142
|
-
} else i ? (s = !s, n +=
|
|
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((
|
|
145
|
-
},
|
|
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
|
-
},
|
|
105
|
+
}, Fe = (e) => {
|
|
149
106
|
const t = /^(\w+)(?:\(([^)]*)\))?/, n = e.match(t);
|
|
150
107
|
if (!n) return { name: e };
|
|
151
|
-
const [, s,
|
|
152
|
-
if (!
|
|
153
|
-
const
|
|
154
|
-
let
|
|
155
|
-
for (; (
|
|
156
|
-
const [,
|
|
157
|
-
if (!
|
|
158
|
-
i.push({ name:
|
|
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
|
-
},
|
|
162
|
-
const t = e.map(
|
|
163
|
-
(n, { name: s, parameters:
|
|
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:
|
|
124
|
+
const { name: s, parameters: r } = Le(n);
|
|
168
125
|
if (!t.has(s))
|
|
169
126
|
throw new Error(`Unknown method: ${s}`);
|
|
170
|
-
const
|
|
171
|
-
if (
|
|
127
|
+
const o = t.get(s);
|
|
128
|
+
if (o === void 0)
|
|
172
129
|
return { name: s };
|
|
173
|
-
if (
|
|
174
|
-
const i =
|
|
175
|
-
throw new Error(`Too many parameters: ${
|
|
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
|
|
178
|
-
const p =
|
|
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 (
|
|
181
|
-
throw new Error(`Missing required parameter: ${
|
|
137
|
+
if (a) return i;
|
|
138
|
+
throw new Error(`Missing required parameter: ${l} for method '${s}'`);
|
|
182
139
|
}
|
|
183
|
-
switch (
|
|
140
|
+
switch (c) {
|
|
184
141
|
case "string":
|
|
185
|
-
i[
|
|
142
|
+
i[l] = p;
|
|
186
143
|
break;
|
|
187
144
|
case "number":
|
|
188
145
|
case "boolean":
|
|
189
|
-
i[
|
|
146
|
+
i[l] = JSON.parse(p);
|
|
190
147
|
break;
|
|
191
148
|
}
|
|
192
|
-
if (typeof i[
|
|
193
|
-
throw new Error(`Invalid type: ${
|
|
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
|
-
},
|
|
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
|
-
],
|
|
184
|
+
], Qe = R(He), S = (e, t = 1) => `
|
|
228
185
|
`.repeat(t) + e + `
|
|
229
|
-
`.repeat(t),
|
|
230
|
-
const s =
|
|
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
|
|
236
|
-
return
|
|
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}` :
|
|
197
|
+
`) ? `> ${e}` : S(H(S(e), "blockquote"));
|
|
241
198
|
case "dropdown":
|
|
242
|
-
const
|
|
243
|
-
return
|
|
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
|
-
}
|
|
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
|
|
251
|
-
n.push({ range:
|
|
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
|
-
},
|
|
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
|
-
],
|
|
290
|
+
], Xe = [
|
|
259
291
|
"splice(delete?: number, insert?: string)"
|
|
260
292
|
];
|
|
261
|
-
|
|
262
|
-
const
|
|
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
|
-
}),
|
|
267
|
-
const
|
|
268
|
-
let
|
|
269
|
-
for (;
|
|
270
|
-
`; )
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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
|
-
*
|
|
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
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
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 =
|
|
342
|
-
for (const
|
|
343
|
-
for (const [
|
|
344
|
-
|
|
345
|
-
const [a, ...
|
|
346
|
-
r.push(
|
|
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
|
|
349
|
-
|
|
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 =
|
|
354
|
-
for (const
|
|
355
|
-
for (const [
|
|
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
|
-
|
|
434
|
+
r.push(i.range[0], a === `
|
|
358
435
|
` ? l.range[1] + 1 : l.range[1]);
|
|
359
436
|
}
|
|
360
|
-
|
|
361
|
-
|
|
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
|
|
368
|
-
for (const [
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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
|
-
},
|
|
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
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
const
|
|
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 =
|
|
497
|
+
e = Ke(e, s.id, ...Q(s));
|
|
398
498
|
break;
|
|
399
499
|
case "remove":
|
|
400
|
-
e =
|
|
500
|
+
e = Ye(e, s.id, ...Q(s));
|
|
401
501
|
break;
|
|
402
502
|
case "replace":
|
|
403
|
-
e =
|
|
503
|
+
e = et(e, s.id, s.with, s.space);
|
|
404
504
|
break;
|
|
405
|
-
case "splice":
|
|
406
|
-
|
|
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 =
|
|
526
|
+
e = nt(e, s.id, s.from, s.to, s.space);
|
|
410
527
|
break;
|
|
411
528
|
}
|
|
412
|
-
return n ?
|
|
413
|
-
},
|
|
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
|
|
584
|
+
return O(g._open, g._flag, "BEGIN", g._close);
|
|
419
585
|
},
|
|
420
586
|
get end() {
|
|
421
|
-
return
|
|
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
|
|
592
|
+
return O(g._open, g._flag, "length", t, n, g._close);
|
|
427
593
|
}
|
|
428
|
-
},
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
|
|
434
|
-
),
|
|
435
|
-
const t =
|
|
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
|
|
439
|
-
if (
|
|
604
|
+
const r = t.get(s);
|
|
605
|
+
if (r) return r;
|
|
440
606
|
}
|
|
441
607
|
return 0;
|
|
442
608
|
};
|
|
443
|
-
},
|
|
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
|
-
},
|
|
613
|
+
}, ht = (e, t) => {
|
|
448
614
|
const n = [], s = [
|
|
449
|
-
...e.map((
|
|
450
|
-
...t.map((
|
|
451
|
-
].sort((
|
|
452
|
-
for (const
|
|
453
|
-
if (
|
|
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 =
|
|
456
|
-
if (
|
|
457
|
-
throw
|
|
458
|
-
const
|
|
459
|
-
if (
|
|
460
|
-
n.push({ open:
|
|
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 (
|
|
463
|
-
throw
|
|
628
|
+
if (r.length > 0)
|
|
629
|
+
throw j.openingCommentNotClosed(r[0].node);
|
|
464
630
|
return n;
|
|
465
|
-
},
|
|
466
|
-
const s = [...t].sort(
|
|
467
|
-
return [...n].sort((
|
|
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 <
|
|
471
|
-
if (
|
|
472
|
-
throw
|
|
473
|
-
return
|
|
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
|
-
|
|
641
|
+
r.push(i);
|
|
476
642
|
}
|
|
477
|
-
throw
|
|
478
|
-
}),
|
|
479
|
-
},
|
|
480
|
-
t ?? (t =
|
|
481
|
-
const n =
|
|
482
|
-
return
|
|
483
|
-
},
|
|
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
|
-
},
|
|
652
|
+
}, vt = (e, t, n) => {
|
|
487
653
|
if (t === 0) return e;
|
|
488
|
-
n ?? (n =
|
|
489
|
-
const s =
|
|
654
|
+
n ?? (n = V.md(e));
|
|
655
|
+
const s = I(n, "heading"), r = e.split(`
|
|
490
656
|
`);
|
|
491
|
-
for (const
|
|
492
|
-
const { depth: i, position: { start:
|
|
493
|
-
|
|
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
|
|
661
|
+
return r.join(`
|
|
496
662
|
`);
|
|
497
|
-
},
|
|
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 =
|
|
500
|
-
const
|
|
501
|
-
return
|
|
502
|
-
var
|
|
503
|
-
const { url:
|
|
504
|
-
if (
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
))
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
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
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
692
|
+
E,
|
|
693
|
+
y,
|
|
694
|
+
A,
|
|
695
|
+
v
|
|
523
696
|
/** p↓: ... */
|
|
524
697
|
);
|
|
525
|
-
} else /^(js|ts)x?|svelte$/i.test(
|
|
526
|
-
|
|
698
|
+
} else /^(js|ts)x?|svelte$/i.test(m) && (h = te(
|
|
699
|
+
h,
|
|
527
700
|
"code",
|
|
528
701
|
/** p↓: ... */
|
|
529
|
-
{ extension:
|
|
702
|
+
{ extension: m, inline: U }
|
|
530
703
|
/** p↓: ... */
|
|
531
704
|
));
|
|
532
|
-
const
|
|
533
|
-
return
|
|
534
|
-
} else throw
|
|
535
|
-
}).reduce((
|
|
536
|
-
} catch (
|
|
537
|
-
throw new Error(`Error populating inclusions in file ${s ?? "(unknown)"}: ${
|
|
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
|
-
},
|
|
540
|
-
const t =
|
|
541
|
-
return {
|
|
542
|
-
},
|
|
543
|
-
const { dir:
|
|
544
|
-
|
|
545
|
-
}, wt
|
|
546
|
-
|
|
547
|
-
|
|
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
|
-
|
|
551
|
-
|
|
730
|
+
Nt as depopulateMarkdownInclusions,
|
|
731
|
+
wt as populateMarkdownInclusions
|
|
552
732
|
};
|