@prose-reader/cfi 1.361.0 → 1.363.0
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/characterData.test.d.ts +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +232 -167
- package/dist/index.js.map +1 -1
- package/dist/utils.d.ts +19 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -17,27 +17,79 @@ var n = /[[\]^,();]/g;
|
|
|
17
17
|
function r(e) {
|
|
18
18
|
return e.replace(n, "^$&");
|
|
19
19
|
}
|
|
20
|
-
var i = /^epubcfi\((.*)\)$/, a = (e) => e.nodeType === Node.ELEMENT_NODE, o = (e) => typeof e == "object" && !!e && "nodeType" in e && (e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE), s = (e) => e.nodeType === Node.TEXT_NODE
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
var i = /^epubcfi\((.*)\)$/, a = (e) => e.nodeType === Node.ELEMENT_NODE, o = (e) => typeof e == "object" && !!e && "nodeType" in e && (e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE || e.nodeType === Node.CDATA_SECTION_NODE), s = (e) => e.nodeType === Node.TEXT_NODE || e.nodeType === Node.CDATA_SECTION_NODE, c = (e) => {
|
|
21
|
+
let t = e.parentNode, n = 0;
|
|
22
|
+
for (let r = 0; t && r < t.childNodes.length; r++) {
|
|
23
|
+
let i = t.childNodes[r];
|
|
24
|
+
if (!i || (a(i) && n++, i === e)) break;
|
|
25
|
+
}
|
|
26
|
+
return n * 2;
|
|
27
|
+
}, l = (e) => {
|
|
28
|
+
let t = e.parentNode, n = 0, r = 0;
|
|
29
|
+
for (let i = 0; t && i < t.childNodes.length; i++) {
|
|
30
|
+
let o = t.childNodes[i];
|
|
31
|
+
if (!o || o === e) break;
|
|
32
|
+
a(o) ? (n++, r = 0) : s(o) && (r += o.data.length);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
step: n * 2 + 1,
|
|
36
|
+
base: r
|
|
37
|
+
};
|
|
38
|
+
}, u = (e, t) => {
|
|
39
|
+
let n = (t - 1) / 2, r = 0, i = 0;
|
|
40
|
+
for (let t = 0; t < e.childNodes.length; t++) {
|
|
41
|
+
let o = e.childNodes[t];
|
|
42
|
+
if (!o) break;
|
|
43
|
+
if (a(o)) {
|
|
44
|
+
if (r++, r > n) break;
|
|
45
|
+
i = t + 1;
|
|
46
|
+
} else if (r === n && s(o)) return {
|
|
47
|
+
kind: "node",
|
|
48
|
+
node: o
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return r < n ? void 0 : {
|
|
52
|
+
kind: "boundary",
|
|
53
|
+
parent: e,
|
|
54
|
+
childIndex: i
|
|
55
|
+
};
|
|
56
|
+
}, d = (e, t) => {
|
|
57
|
+
let n = e, r = 0, i = e;
|
|
58
|
+
for (; i && !a(i);) {
|
|
59
|
+
if (s(i)) {
|
|
60
|
+
if (n = i, t < r + i.data.length) return {
|
|
61
|
+
node: n,
|
|
62
|
+
offset: t - r
|
|
63
|
+
};
|
|
64
|
+
r += i.data.length;
|
|
65
|
+
}
|
|
66
|
+
i = i.nextSibling;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
node: n,
|
|
70
|
+
offset: t - (r - n.data.length)
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
function f(e) {
|
|
74
|
+
if (p(e)) return !1;
|
|
23
75
|
let t = e[e.length - 1];
|
|
24
76
|
return e.length > 1 && (t === void 0 || t.length === 0);
|
|
25
77
|
}
|
|
26
|
-
function
|
|
78
|
+
function p(e) {
|
|
27
79
|
return typeof e == "object" && !!e && "parent" in e && "start" in e && "end" in e;
|
|
28
80
|
}
|
|
29
81
|
//#endregion
|
|
30
82
|
//#region src/parse.ts
|
|
31
|
-
function
|
|
83
|
+
function m(e) {
|
|
32
84
|
let t = e.match(i);
|
|
33
85
|
return t && t[1] || e;
|
|
34
86
|
}
|
|
35
|
-
function
|
|
87
|
+
function h(e) {
|
|
36
88
|
let t = [], n = null, r = !1, i = "", a = (e) => {
|
|
37
89
|
t.push(e), n = null, i = "";
|
|
38
90
|
}, o = (e) => {
|
|
39
91
|
i += e, r = !1;
|
|
40
|
-
}, s =
|
|
92
|
+
}, s = m(e).trim(), c = Array.from(s).concat("");
|
|
41
93
|
for (let e = 0; e < c.length; e++) {
|
|
42
94
|
let t = c[e];
|
|
43
95
|
if (!t) {
|
|
@@ -96,15 +148,15 @@ function d(e) {
|
|
|
96
148
|
}
|
|
97
149
|
return t;
|
|
98
150
|
}
|
|
99
|
-
function
|
|
151
|
+
function g(e, t) {
|
|
100
152
|
return e ? e.map((e, n) => e[0] === t ? n : null).filter((e) => e !== null) : [];
|
|
101
153
|
}
|
|
102
|
-
function
|
|
154
|
+
function _(e, t) {
|
|
103
155
|
let n = [], r = 0;
|
|
104
156
|
for (let i of t) n.push(e.slice(r, i)), r = i;
|
|
105
157
|
return n.push(e.slice(r)), n;
|
|
106
158
|
}
|
|
107
|
-
function
|
|
159
|
+
function v(e) {
|
|
108
160
|
let t = [], n = {}, r = -1;
|
|
109
161
|
for (let i = 0; i < e.length; i++) {
|
|
110
162
|
let a = e[i];
|
|
@@ -135,16 +187,16 @@ function m(e) {
|
|
|
135
187
|
}
|
|
136
188
|
return t;
|
|
137
189
|
}
|
|
138
|
-
function
|
|
139
|
-
return
|
|
190
|
+
function y(e) {
|
|
191
|
+
return _(e, g(e, "!")).map(v);
|
|
140
192
|
}
|
|
141
|
-
function
|
|
193
|
+
function b(e) {
|
|
142
194
|
if (!e) throw Error("CFI string cannot be empty");
|
|
143
|
-
let t =
|
|
195
|
+
let t = h(e);
|
|
144
196
|
if (!t || t.length === 0) throw Error("Failed to tokenize CFI string");
|
|
145
|
-
let n =
|
|
146
|
-
if (n.length === 0) return
|
|
147
|
-
let [r, i, a] =
|
|
197
|
+
let n = g(t, ",");
|
|
198
|
+
if (n.length === 0) return y(t);
|
|
199
|
+
let [r, i, a] = _(t, n);
|
|
148
200
|
function o(e, t) {
|
|
149
201
|
if (!t || t.length === 0) return [[]];
|
|
150
202
|
let n = t.filter((e) => e[0] !== ",");
|
|
@@ -156,9 +208,9 @@ function g(e) {
|
|
|
156
208
|
}
|
|
157
209
|
return [[]];
|
|
158
210
|
}
|
|
159
|
-
return
|
|
211
|
+
return y(t);
|
|
160
212
|
}
|
|
161
|
-
let s =
|
|
213
|
+
let s = y(r || []);
|
|
162
214
|
return {
|
|
163
215
|
parent: s,
|
|
164
216
|
start: o(s, i || []),
|
|
@@ -167,15 +219,15 @@ function g(e) {
|
|
|
167
219
|
}
|
|
168
220
|
//#endregion
|
|
169
221
|
//#region src/compare.ts
|
|
170
|
-
function
|
|
171
|
-
return typeof e == "string" ?
|
|
222
|
+
function x(e, t = !1) {
|
|
223
|
+
return typeof e == "string" ? x(b(e), t) : "parent" in e ? t ? e.parent.concat(e.end) : e.parent.concat(e.start) : e;
|
|
172
224
|
}
|
|
173
|
-
function
|
|
225
|
+
function S(e) {
|
|
174
226
|
return e.offset === void 0 ? e.index === void 0 ? e.temporal !== void 0 || e.spatial !== void 0 ? 3 : 4 : 2 : 1;
|
|
175
227
|
}
|
|
176
|
-
function
|
|
177
|
-
let n = typeof e == "string" ?
|
|
178
|
-
if ("parent" in n || "parent" in r) return
|
|
228
|
+
function C(e, t) {
|
|
229
|
+
let n = typeof e == "string" ? b(e) : e, r = typeof t == "string" ? b(t) : t;
|
|
230
|
+
if ("parent" in n || "parent" in r) return C(x(n), x(r)) || C(x(n, !0), x(r, !0));
|
|
179
231
|
for (let e = 0; e < Math.max(n.length, r.length); e++) {
|
|
180
232
|
let t = n[e] || [], i = r[e] || [], a = Math.max(t.length, i.length) - 1;
|
|
181
233
|
for (let e = 0; e <= a; e++) {
|
|
@@ -183,7 +235,7 @@ function y(e, t) {
|
|
|
183
235
|
if (!n) return -1;
|
|
184
236
|
if (!r || n.index > r.index) return 1;
|
|
185
237
|
if (n.index < r.index) return -1;
|
|
186
|
-
let o =
|
|
238
|
+
let o = S(n), s = S(r);
|
|
187
239
|
if (o !== s) return o - s;
|
|
188
240
|
let c = n.temporal !== void 0, l = r.temporal !== void 0;
|
|
189
241
|
if (c && !l) return 1;
|
|
@@ -213,10 +265,10 @@ function y(e, t) {
|
|
|
213
265
|
}
|
|
214
266
|
//#endregion
|
|
215
267
|
//#region src/constants.ts
|
|
216
|
-
var
|
|
268
|
+
var w = 6;
|
|
217
269
|
//#endregion
|
|
218
270
|
//#region src/generate.ts
|
|
219
|
-
function
|
|
271
|
+
function T(e, t, n = {}) {
|
|
220
272
|
if (!e.textContent || e.textContent.trim() === "") return null;
|
|
221
273
|
let r = e.textContent, i = n.textAssertionLength || 10;
|
|
222
274
|
if (t !== void 0 && t <= r.length) {
|
|
@@ -225,15 +277,15 @@ function x(e, t, n = {}) {
|
|
|
225
277
|
}
|
|
226
278
|
return r.substring(0, Math.min(r.length, i));
|
|
227
279
|
}
|
|
228
|
-
function
|
|
280
|
+
function E(e) {
|
|
229
281
|
let [t, n] = e;
|
|
230
282
|
return `@${Math.max(0, Math.min(100, t))}:${Math.max(0, Math.min(100, n))}`;
|
|
231
283
|
}
|
|
232
|
-
function
|
|
284
|
+
function D(e, t, n) {
|
|
233
285
|
let r = e;
|
|
234
|
-
return t !== void 0 && (r += `~${t}`), n !== void 0 && (r +=
|
|
286
|
+
return t !== void 0 && (r += `~${t}`), n !== void 0 && (r += E(n)), r;
|
|
235
287
|
}
|
|
236
|
-
function
|
|
288
|
+
function O(e, t, n) {
|
|
237
289
|
let i = e;
|
|
238
290
|
if (t && (i += `[${r(t)}]`), n) {
|
|
239
291
|
let e = n === "before" ? "b" : "a";
|
|
@@ -241,90 +293,77 @@ function w(e, t, n) {
|
|
|
241
293
|
}
|
|
242
294
|
return i;
|
|
243
295
|
}
|
|
244
|
-
function
|
|
245
|
-
let o = "",
|
|
246
|
-
if (e
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
if (n === -1) throw Error("Node not found in parent's children");
|
|
252
|
-
if (o = `/${n + 1}`, a(t) && t.id) {
|
|
253
|
-
let e = t.id, n = Array.from(t.parentNode?.childNodes || []);
|
|
254
|
-
o = `/${n.slice(0, n.indexOf(t) + 1).filter((e) => e.nodeType === Node.ELEMENT_NODE).length * 2}[${r(e)}]${o}`, s = t.parentNode;
|
|
255
|
-
} else s = t;
|
|
256
|
-
}
|
|
257
|
-
let l = null;
|
|
258
|
-
for (c && n.includeTextAssertions && (l = x(c, t, n)); s?.parentNode;) {
|
|
259
|
-
if (!(c && s === c.parentNode && o.includes(`[${a(s) ? s.id : ""}]`))) {
|
|
260
|
-
let e = s.parentNode, t = Array.from(e.childNodes), n = t.indexOf(s);
|
|
261
|
-
if (n === -1) throw Error("Node not found in parent's children");
|
|
262
|
-
let i = t.slice(0, n + 1).filter((e) => e.nodeType === Node.ELEMENT_NODE), c;
|
|
263
|
-
c = (s.nodeType, Node.ELEMENT_NODE, i.length);
|
|
264
|
-
let l = c * 2;
|
|
265
|
-
o = a(s) && s.id ? `/${l}[${r(s.id)}]${o}` : `/${l}${o}`;
|
|
266
|
-
}
|
|
267
|
-
if (s.parentNode.nodeName.toLowerCase() === "html") break;
|
|
268
|
-
s = s.parentNode;
|
|
296
|
+
function k(e, t, n = {}, i) {
|
|
297
|
+
let o = "", u = e, d = null, f = t;
|
|
298
|
+
if (e && !a(e)) {
|
|
299
|
+
let n = e.parentNode;
|
|
300
|
+
if (!n) throw Error("Text node doesn't have a parent");
|
|
301
|
+
let { step: r, base: i } = l(e);
|
|
302
|
+
o = `/${r}`, d = s(e) ? e : null, f = t === void 0 ? void 0 : i + t, u = n;
|
|
269
303
|
}
|
|
270
|
-
|
|
304
|
+
let p = null;
|
|
305
|
+
for (d && n.includeTextAssertions && (p = T(d, t, n)); u?.parentNode;) {
|
|
306
|
+
let e = c(u);
|
|
307
|
+
if (o = a(u) && u.id ? `/${e}[${r(u.id)}]${o}` : `/${e}${o}`, u.parentNode.nodeName.toLowerCase() === "html") break;
|
|
308
|
+
u = u.parentNode;
|
|
309
|
+
}
|
|
310
|
+
return f !== void 0 && (o += `:${f}`), o = D(o, i?.temporal, i?.spatial || n.spatialOffset), o = O(o, p, n.includeSideBias), o = M(o, n.extensions), o;
|
|
271
311
|
}
|
|
272
|
-
function
|
|
312
|
+
function A(e, t, n, i = {}, o) {
|
|
313
|
+
let u = a(t) ? 0 : l(t).base;
|
|
273
314
|
if (e === t) {
|
|
274
|
-
let e = n === void 0 ? "" : `:${n}`;
|
|
275
|
-
return e =
|
|
315
|
+
let e = n === void 0 ? "" : `:${u + n}`;
|
|
316
|
+
return e = D(e, o?.temporal, o?.spatial), e;
|
|
276
317
|
}
|
|
277
|
-
let
|
|
278
|
-
for (;
|
|
279
|
-
let e =
|
|
318
|
+
let d = [], f = t;
|
|
319
|
+
for (; f && f !== e;) {
|
|
320
|
+
let e = f.parentNode;
|
|
280
321
|
if (!e) break;
|
|
281
|
-
let t =
|
|
282
|
-
|
|
283
|
-
let i;
|
|
284
|
-
i = c.nodeType === Node.ELEMENT_NODE ? (t.filter((e) => e.nodeType === Node.ELEMENT_NODE).indexOf(c) + 1) * 2 : n + 1, a(c) && c.id ? s.unshift(`/${i}[${r(c.id)}]`) : s.unshift(`/${i}`), c = e;
|
|
322
|
+
let t = a(f) ? c(f) : l(f).step;
|
|
323
|
+
a(f) && f.id ? d.unshift(`/${t}[${r(f.id)}]`) : d.unshift(`/${t}`), f = e;
|
|
285
324
|
}
|
|
286
|
-
let
|
|
287
|
-
if (n !== void 0 && (
|
|
288
|
-
let e =
|
|
289
|
-
|
|
325
|
+
let p = d.join("");
|
|
326
|
+
if (n !== void 0 && (p += `:${u + n}`), p = D(p, o?.temporal, o?.spatial), i.includeTextAssertions && s(t)) {
|
|
327
|
+
let e = T(t, n, i);
|
|
328
|
+
p = O(p, e, i.includeSideBias);
|
|
290
329
|
}
|
|
291
|
-
return
|
|
330
|
+
return p = M(p, i.extensions), p;
|
|
292
331
|
}
|
|
293
|
-
var
|
|
332
|
+
var j = (e) => Object.entries(e).map(([e, t]) => {
|
|
294
333
|
let n = r(t);
|
|
295
334
|
return `${e}=${encodeURIComponent(n)}`;
|
|
296
335
|
}).join(";");
|
|
297
|
-
function
|
|
336
|
+
function M(e, t) {
|
|
298
337
|
if (!t || Object.keys(t).length === 0) return e;
|
|
299
|
-
let n =
|
|
338
|
+
let n = j(t);
|
|
300
339
|
if (e.endsWith("]")) {
|
|
301
340
|
let t = e.lastIndexOf("["), r = e.substring(t + 1, e.length - 1);
|
|
302
341
|
return r.includes(n) ? e : `${e.substring(0, e.length - 1)}${r.includes(";"), ";"}${n}]`;
|
|
303
342
|
}
|
|
304
343
|
return e.endsWith("!") ? e : `${e}[;${n}]`;
|
|
305
344
|
}
|
|
306
|
-
function
|
|
345
|
+
function N(e, n, r, i, a = {}, o, s) {
|
|
307
346
|
let c = t(e, r);
|
|
308
347
|
if (!c) throw Error("No common ancestor found");
|
|
309
|
-
let l =
|
|
310
|
-
return a.extensions && Object.keys(a.extensions).length > 0 ? `${
|
|
348
|
+
let l = k(c, void 0, a), u = A(c, e, n, a, o), d = A(c, r, i, a, s);
|
|
349
|
+
return a.extensions && Object.keys(a.extensions).length > 0 ? `${M(l, a.extensions)},${M(u, a.extensions)},${M(d, a.extensions)}` : `${l},${u},${d}`;
|
|
311
350
|
}
|
|
312
|
-
var
|
|
351
|
+
var P = (e, t, n = {}, i) => {
|
|
313
352
|
let a = `/6/${(e + 1) * 2}`;
|
|
314
|
-
return t && (a += `[${r(t)}]`), a = i ?
|
|
353
|
+
return t && (a += `[${r(t)}]`), a = i ? M(a, n.extensions) : a, `${a}!`;
|
|
315
354
|
};
|
|
316
|
-
function
|
|
317
|
-
if (o(e)) return `epubcfi(${
|
|
355
|
+
function F(e, t = {}) {
|
|
356
|
+
if (o(e)) return `epubcfi(${k(e, void 0, t)})`;
|
|
318
357
|
let n = "";
|
|
319
|
-
if (!("start" in e)) return e.spineIndex !== void 0 && (n =
|
|
358
|
+
if (!("start" in e)) return e.spineIndex !== void 0 && (n = P(e.spineIndex, e.spineId, t, !e.node), !e.node) || (n += k(e.node ?? null, e.offset, t, e)), `epubcfi(${n})`;
|
|
320
359
|
let { start: r, end: i } = e;
|
|
321
|
-
return r.spineIndex !== void 0 && (n =
|
|
360
|
+
return r.spineIndex !== void 0 && (n = P(r.spineIndex, r.spineId, t, !r.node)), r.node && i.node && (n += N(r.node, r.offset ?? 0, i.node, i.offset ?? 0, t, r, i)), `epubcfi(${n})`;
|
|
322
361
|
}
|
|
323
362
|
//#endregion
|
|
324
363
|
//#region src/resolve.ts
|
|
325
|
-
function
|
|
364
|
+
function I(e, t, n = {}) {
|
|
326
365
|
try {
|
|
327
|
-
return
|
|
366
|
+
return L(typeof e == "string" ? b(e) : e, t, n);
|
|
328
367
|
} catch (e) {
|
|
329
368
|
if (n.throwOnError) throw e;
|
|
330
369
|
return {
|
|
@@ -333,72 +372,73 @@ function M(e, t, n = {}) {
|
|
|
333
372
|
};
|
|
334
373
|
}
|
|
335
374
|
}
|
|
336
|
-
function
|
|
337
|
-
if (
|
|
338
|
-
if (
|
|
375
|
+
function L(e, t, n = { asRange: !1 }) {
|
|
376
|
+
if (p(e)) return R(e, t);
|
|
377
|
+
if (f(e)) return U(null);
|
|
339
378
|
let r = e.at(-1);
|
|
340
|
-
if (r) return
|
|
379
|
+
if (r) return J(r, t, n);
|
|
341
380
|
throw Error("Invalid CFI structure");
|
|
342
381
|
}
|
|
343
|
-
function
|
|
382
|
+
function R(e, t) {
|
|
344
383
|
let n = e.parent, r = e.start[0] || [], i = e.end[0] || [], a = t.documentElement;
|
|
345
384
|
if (n.length > 0) if (n.length > 1) {
|
|
346
385
|
let e = n[0];
|
|
347
386
|
if (e) {
|
|
348
|
-
let n =
|
|
387
|
+
let n = J(e, t);
|
|
349
388
|
o(n.node) && (a = n.node);
|
|
350
389
|
}
|
|
351
390
|
if (n.length > 1 && a) {
|
|
352
391
|
let e = n[1];
|
|
353
392
|
if (e) {
|
|
354
|
-
let n =
|
|
393
|
+
let n = J(e, t);
|
|
355
394
|
o(n.node) && (a = n.node);
|
|
356
395
|
}
|
|
357
396
|
}
|
|
358
397
|
} else {
|
|
359
398
|
let e = n[0];
|
|
360
399
|
if (e) {
|
|
361
|
-
let n =
|
|
400
|
+
let n = J(e, t);
|
|
362
401
|
o(n.node) && (a = n.node);
|
|
363
402
|
}
|
|
364
403
|
}
|
|
365
404
|
if (!a) throw Error("Failed to resolve parent node in CFI range");
|
|
366
|
-
let
|
|
367
|
-
if (
|
|
368
|
-
|
|
405
|
+
let c = s(a), l, u, d = 0, f = 0;
|
|
406
|
+
if (c) {
|
|
407
|
+
l = a, u = a;
|
|
369
408
|
let e = r[r.length - 1], t = i[i.length - 1];
|
|
370
|
-
|
|
409
|
+
d = (Array.isArray(e?.offset) ? e.offset[0] : e?.offset) ?? 0, f = (Array.isArray(t?.offset) ? t.offset[0] : t?.offset) ?? 0;
|
|
371
410
|
} else {
|
|
372
411
|
let e = r.length === 0, t = i.length === 0;
|
|
373
412
|
if (e) {
|
|
374
413
|
if (!a) throw Error("Failed to resolve parent node in CFI range (start)");
|
|
375
|
-
|
|
414
|
+
l = a, d = r[0]?.offset ?? 0;
|
|
376
415
|
} else {
|
|
377
|
-
let e =
|
|
416
|
+
let e = q(a, r, 0, !0);
|
|
378
417
|
if (!e) throw Error("Failed to resolve start node in CFI range");
|
|
379
|
-
|
|
418
|
+
l = e.node;
|
|
380
419
|
let t = r[r.length - 1];
|
|
381
|
-
|
|
420
|
+
d = e.childIndex ?? (Array.isArray(t?.offset) ? t.offset[0] : t?.offset) ?? 0;
|
|
382
421
|
}
|
|
383
422
|
if (t) {
|
|
384
423
|
if (!a) throw Error("Failed to resolve parent node in CFI range (end)");
|
|
385
|
-
|
|
424
|
+
u = a, f = i[0]?.offset ?? 0;
|
|
386
425
|
} else {
|
|
387
|
-
let e =
|
|
426
|
+
let e = q(a, i, 0, !0);
|
|
388
427
|
if (!e) throw Error("Failed to resolve end node in CFI range");
|
|
389
|
-
|
|
428
|
+
u = e.node;
|
|
390
429
|
let t = i[i.length - 1];
|
|
391
|
-
|
|
430
|
+
f = e.childIndex ?? (Array.isArray(t?.offset) ? t.offset[0] : t?.offset) ?? 0;
|
|
392
431
|
}
|
|
393
432
|
}
|
|
394
|
-
let f = t.createRange();
|
|
395
|
-
return
|
|
396
|
-
...
|
|
397
|
-
node:
|
|
398
|
-
isRange: !0
|
|
433
|
+
let p = K(l, d), m = K(u, f), h = t.createRange();
|
|
434
|
+
return h.setStart(p.node, p.offset ?? 0), h.setEnd(m.node, m.offset ?? 0), {
|
|
435
|
+
...H(r[r.length - 1]),
|
|
436
|
+
node: h,
|
|
437
|
+
isRange: !0,
|
|
438
|
+
offset: p.offset
|
|
399
439
|
};
|
|
400
440
|
}
|
|
401
|
-
function
|
|
441
|
+
function z(e) {
|
|
402
442
|
if (e?.side) return e.side;
|
|
403
443
|
if (e?.text && e.text.length > 0) {
|
|
404
444
|
let t = e.text[0];
|
|
@@ -408,14 +448,14 @@ function F(e) {
|
|
|
408
448
|
}
|
|
409
449
|
}
|
|
410
450
|
}
|
|
411
|
-
function
|
|
451
|
+
function B(e) {
|
|
412
452
|
return e.index % 2 != 0;
|
|
413
453
|
}
|
|
414
|
-
function
|
|
415
|
-
return (
|
|
454
|
+
function V(e) {
|
|
455
|
+
return (p(e) ? e.end : e).at(-1)?.at(-1)?.extensions;
|
|
416
456
|
}
|
|
417
|
-
function
|
|
418
|
-
let t =
|
|
457
|
+
function H(e) {
|
|
458
|
+
let t = z(e), n = e?.extensions;
|
|
419
459
|
return {
|
|
420
460
|
offset: e?.offset,
|
|
421
461
|
temporal: e?.temporal,
|
|
@@ -424,21 +464,21 @@ function R(e) {
|
|
|
424
464
|
extensions: n
|
|
425
465
|
};
|
|
426
466
|
}
|
|
427
|
-
function
|
|
467
|
+
function U(e, t) {
|
|
428
468
|
return {
|
|
429
469
|
node: e,
|
|
430
470
|
isRange: !1,
|
|
431
|
-
...
|
|
471
|
+
...H(t)
|
|
432
472
|
};
|
|
433
473
|
}
|
|
434
|
-
function
|
|
474
|
+
function W(e, t) {
|
|
435
475
|
return {
|
|
436
476
|
node: e,
|
|
437
477
|
isRange: !0,
|
|
438
|
-
...
|
|
478
|
+
...H(t)
|
|
439
479
|
};
|
|
440
480
|
}
|
|
441
|
-
function
|
|
481
|
+
function G(e, t, n) {
|
|
442
482
|
let r = e.createRange();
|
|
443
483
|
if (r.selectNodeContents(t), n !== void 0) {
|
|
444
484
|
let e = Array.isArray(n) ? n[0] : n;
|
|
@@ -446,19 +486,37 @@ function V(e, t, n) {
|
|
|
446
486
|
}
|
|
447
487
|
return r;
|
|
448
488
|
}
|
|
449
|
-
function
|
|
489
|
+
function K(e, t) {
|
|
490
|
+
let n = Array.isArray(t) ? t[0] : t;
|
|
491
|
+
return n === void 0 || !s(e) ? {
|
|
492
|
+
node: e,
|
|
493
|
+
offset: n
|
|
494
|
+
} : d(e, n);
|
|
495
|
+
}
|
|
496
|
+
function q(e, t, n, r) {
|
|
450
497
|
let i = e;
|
|
451
498
|
for (let e = n; e < t.length; e++) {
|
|
452
499
|
let n = t[e];
|
|
453
500
|
if (!i || !n) break;
|
|
454
|
-
if (
|
|
455
|
-
let
|
|
456
|
-
if (
|
|
457
|
-
|
|
458
|
-
if (r) throw Error(`Invalid text node index: ${n.index}`);
|
|
501
|
+
if (B(n)) {
|
|
502
|
+
let a = u(i, n.index);
|
|
503
|
+
if (!a) {
|
|
504
|
+
if (r) throw Error(`No character data chunk: ${n.index}`);
|
|
459
505
|
i = null;
|
|
460
506
|
break;
|
|
461
507
|
}
|
|
508
|
+
if (a.kind === "boundary") {
|
|
509
|
+
if (e < t.length - 1) {
|
|
510
|
+
if (r) throw Error(`Empty character data chunk: ${n.index}`);
|
|
511
|
+
i = null;
|
|
512
|
+
break;
|
|
513
|
+
}
|
|
514
|
+
return {
|
|
515
|
+
node: a.parent,
|
|
516
|
+
childIndex: a.childIndex
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
i = a.node;
|
|
462
520
|
} else {
|
|
463
521
|
let e = Array.from(i.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE), t = Math.floor(n.index / 2) - 1;
|
|
464
522
|
if (t >= 0 && t < e.length) {
|
|
@@ -471,52 +529,59 @@ function H(e, t, n, r) {
|
|
|
471
529
|
}
|
|
472
530
|
}
|
|
473
531
|
}
|
|
474
|
-
return i;
|
|
532
|
+
return i ? { node: i } : null;
|
|
475
533
|
}
|
|
476
|
-
function
|
|
534
|
+
function J(e, t, n = {}) {
|
|
477
535
|
let { throwOnError: r = !1, asRange: i = !1 } = n;
|
|
478
536
|
if (!t) {
|
|
479
537
|
if (r) throw Error("Document is not available");
|
|
480
|
-
return
|
|
538
|
+
return U(null);
|
|
481
539
|
}
|
|
482
|
-
let { node: a, remainingPathIndex: o } =
|
|
540
|
+
let { node: a, remainingPathIndex: o } = te(t, e);
|
|
483
541
|
if (a && o >= e.length) {
|
|
484
542
|
let n = e.at(-1);
|
|
485
|
-
|
|
486
|
-
let e = n.index - 1;
|
|
487
|
-
if (e >= 0 && e < a.childNodes.length) {
|
|
488
|
-
let t = a.childNodes[e];
|
|
489
|
-
return z(t, n);
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
return i ? B(V(t, a, n?.offset), n) : z(a, n);
|
|
543
|
+
return i ? W(G(t, a, n?.offset), n) : U(a, n);
|
|
493
544
|
}
|
|
494
545
|
let s = a || t.documentElement, c = a ? o : 0;
|
|
495
546
|
if (i && e.length > 0) {
|
|
496
547
|
let n = e[e.length - 1];
|
|
497
|
-
if (n && !
|
|
548
|
+
if (n && !B(n)) {
|
|
498
549
|
if (n.index === 0 && s) {
|
|
499
550
|
let e = t.createRange();
|
|
500
|
-
return e.setStart(s, 0), e.setEnd(s, 0),
|
|
551
|
+
return e.setStart(s, 0), e.setEnd(s, 0), W(e, n);
|
|
501
552
|
}
|
|
502
|
-
let i =
|
|
553
|
+
let i = q(s, e.slice(0, -1), c, r)?.node;
|
|
503
554
|
if (i) {
|
|
504
555
|
let e = Array.from(i.childNodes).filter((e) => e.nodeType === Node.ELEMENT_NODE);
|
|
505
556
|
if (Math.floor(n.index / 2) - 1 === e.length) {
|
|
506
557
|
let e = t.createRange();
|
|
507
|
-
return e.selectNodeContents(i), e.collapse(!1),
|
|
558
|
+
return e.selectNodeContents(i), e.collapse(!1), W(e, n);
|
|
508
559
|
}
|
|
509
560
|
}
|
|
510
561
|
}
|
|
511
562
|
}
|
|
512
|
-
|
|
563
|
+
let l = q(s, e, c, r);
|
|
564
|
+
if (!l) {
|
|
513
565
|
if (r) throw Error("Failed to resolve CFI path");
|
|
514
|
-
return
|
|
566
|
+
return U(null);
|
|
515
567
|
}
|
|
516
|
-
let
|
|
517
|
-
|
|
568
|
+
let u = e.at(-1), d = l.childIndex === void 0 ? K(l.node, u?.offset) : {
|
|
569
|
+
node: l.node,
|
|
570
|
+
offset: l.childIndex
|
|
571
|
+
};
|
|
572
|
+
return i ? {
|
|
573
|
+
...W(l.childIndex === void 0 ? G(t, d.node, d.offset) : ee(t, l.node, l.childIndex), u),
|
|
574
|
+
offset: d.offset
|
|
575
|
+
} : {
|
|
576
|
+
...U(d.node, u),
|
|
577
|
+
offset: d.offset
|
|
578
|
+
};
|
|
518
579
|
}
|
|
519
|
-
function
|
|
580
|
+
function ee(e, t, n) {
|
|
581
|
+
let r = e.createRange();
|
|
582
|
+
return r.setStart(t, n), r.setEnd(t, n), r;
|
|
583
|
+
}
|
|
584
|
+
function te(e, t) {
|
|
520
585
|
for (let n = t.length - 1; n >= 0; n--) {
|
|
521
586
|
let r = t[n];
|
|
522
587
|
if (r?.id) {
|
|
@@ -534,7 +599,7 @@ function W(e, t) {
|
|
|
534
599
|
}
|
|
535
600
|
//#endregion
|
|
536
601
|
//#region src/serialize.ts
|
|
537
|
-
function
|
|
602
|
+
function ne(e) {
|
|
538
603
|
let t = `/${e.index}`;
|
|
539
604
|
if (e.id) {
|
|
540
605
|
if (t += `[${r(e.id)}`, e.extensions) for (let [n, i] of Object.entries(e.extensions)) t += `;${n}=${r(i)}`;
|
|
@@ -545,44 +610,44 @@ function G(e) {
|
|
|
545
610
|
if (e.text && e.text.length > 0 && n.push(e.text.map(r).join(",")), (e.side || e.extensions && !e.id) && (e.side && n.push(`;s=${e.side}`), e.extensions && !e.id)) for (let [t, i] of Object.entries(e.extensions)) n.push(`;${t}=${r(i)}`);
|
|
546
611
|
return n.length > 0 && (t += `[${n.join("")}]`), t;
|
|
547
612
|
}
|
|
548
|
-
function
|
|
549
|
-
return e.map((e) =>
|
|
613
|
+
function Y(e) {
|
|
614
|
+
return e.map((e) => ne(e)).join("");
|
|
550
615
|
}
|
|
551
|
-
function
|
|
552
|
-
return Array.isArray(e) ? `epubcfi(${e.map(
|
|
616
|
+
function X(e) {
|
|
617
|
+
return Array.isArray(e) ? `epubcfi(${e.map(Y).join("!")})` : `epubcfi(${e.parent.map(Y).join("!")},${e.start.map(Y).join("!")},${e.end.map(Y).join("!")})`;
|
|
553
618
|
}
|
|
554
619
|
//#endregion
|
|
555
620
|
//#region src/spineItemref.ts
|
|
556
|
-
var
|
|
557
|
-
let t =
|
|
621
|
+
var Z = (e) => (e + 1) * 2, Q = (e) => e / 2 - 1, re = (e) => p(e) ? e.parent[0] : e[0], $ = (e) => {
|
|
622
|
+
let t = re(e);
|
|
558
623
|
if (t?.[0]?.index === 6) return t[1];
|
|
559
|
-
},
|
|
624
|
+
}, ie = (e, t) => {
|
|
560
625
|
let n = { ...e };
|
|
561
626
|
for (let [e, r] of Object.entries(t)) r === void 0 ? delete n[e] : n[e] = r;
|
|
562
627
|
return Object.keys(n).length > 0 ? n : void 0;
|
|
563
|
-
},
|
|
628
|
+
}, ae = (e) => {
|
|
564
629
|
if (e.id !== void 0) return e.id;
|
|
565
630
|
if (!(!e.text || e.text.length === 0)) return e.text.join(",");
|
|
566
|
-
},
|
|
631
|
+
}, oe = (e) => {
|
|
567
632
|
try {
|
|
568
|
-
let t =
|
|
633
|
+
let t = $(b(e));
|
|
569
634
|
return t ? {
|
|
570
|
-
spineIndex:
|
|
571
|
-
spineId:
|
|
635
|
+
spineIndex: Q(t.index),
|
|
636
|
+
spineId: ae(t),
|
|
572
637
|
extensions: t.extensions
|
|
573
638
|
} : void 0;
|
|
574
639
|
} catch {
|
|
575
640
|
return;
|
|
576
641
|
}
|
|
577
|
-
},
|
|
642
|
+
}, se = (e, t) => {
|
|
578
643
|
try {
|
|
579
|
-
let n =
|
|
580
|
-
return r ? (t.spineIndex !== void 0 && (r.index =
|
|
644
|
+
let n = b(e), r = $(n);
|
|
645
|
+
return r ? (t.spineIndex !== void 0 && (r.index = Z(t.spineIndex)), t.spineId !== void 0 && (r.id = t.spineId, r.text = void 0, r.side = void 0), t.extensions !== void 0 && (r.extensions = ie(r.extensions, t.extensions)), X(n)) : void 0;
|
|
581
646
|
} catch {
|
|
582
647
|
return;
|
|
583
648
|
}
|
|
584
649
|
};
|
|
585
650
|
//#endregion
|
|
586
|
-
export {
|
|
651
|
+
export { w as EPUB_CFI_PACKAGE_SPINE_STEP_INDEX, C as compare, Q as epubCfiItemrefStepIndexToSpineIndex, F as generate, oe as getEpubCfiSpineItemref, f as isIndirectionOnly, p as isParsedCfiRange, b as parse, I as resolve, V as resolveExtensions, X as serialize, Z as spineIndexToEpubCfiItemrefStepIndex, se as updateEpubCfiSpineItemref };
|
|
587
652
|
|
|
588
653
|
//# sourceMappingURL=index.js.map
|