@prose-reader/cfi 1.362.0 → 1.364.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/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
- function c(e) {
22
- if (l(e)) return !1;
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 l(e) {
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 u(e) {
83
+ function m(e) {
32
84
  let t = e.match(i);
33
85
  return t && t[1] || e;
34
86
  }
35
- function d(e) {
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 = u(e).trim(), c = Array.from(s).concat("");
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 f(e, t) {
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 p(e, t) {
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 m(e) {
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 h(e) {
139
- return p(e, f(e, "!")).map(m);
190
+ function y(e) {
191
+ return _(e, g(e, "!")).map(v);
140
192
  }
141
- function g(e) {
193
+ function b(e) {
142
194
  if (!e) throw Error("CFI string cannot be empty");
143
- let t = d(e);
195
+ let t = h(e);
144
196
  if (!t || t.length === 0) throw Error("Failed to tokenize CFI string");
145
- let n = f(t, ",");
146
- if (n.length === 0) return h(t);
147
- let [r, i, a] = p(t, n);
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 h(t);
211
+ return y(t);
160
212
  }
161
- let s = h(r || []);
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 _(e, t = !1) {
171
- return typeof e == "string" ? _(g(e), t) : "parent" in e ? t ? e.parent.concat(e.end) : e.parent.concat(e.start) : e;
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 v(e) {
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 y(e, t) {
177
- let n = typeof e == "string" ? g(e) : e, r = typeof t == "string" ? g(t) : t;
178
- if ("parent" in n || "parent" in r) return y(_(n), _(r)) || y(_(n, !0), _(r, !0));
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 = v(n), s = v(r);
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 b = 6;
268
+ var w = 6;
217
269
  //#endregion
218
270
  //#region src/generate.ts
219
- function x(e, t, n = {}) {
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 S(e) {
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 C(e, t, n) {
284
+ function D(e, t, n) {
233
285
  let r = e;
234
- return t !== void 0 && (r += `~${t}`), n !== void 0 && (r += S(n)), r;
286
+ return t !== void 0 && (r += `~${t}`), n !== void 0 && (r += E(n)), r;
235
287
  }
236
- function w(e, t, n) {
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 T(e, t, n = {}, i) {
245
- let o = "", s = e, c = null;
246
- if (e?.nodeType === Node.TEXT_NODE) {
247
- c = e;
248
- let t = e.parentNode;
249
- if (!t) throw Error("Text node doesn't have a parent");
250
- let n = Array.from(t.childNodes).indexOf(e);
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
- return t !== void 0 && (o += `:${t}`), o = C(o, i?.temporal, i?.spatial || n.spatialOffset), o = w(o, l, n.includeSideBias), o = O(o, n.extensions), o;
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 E(e, t, n, i = {}, o) {
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 = C(e, o?.temporal, o?.spatial), e;
315
+ let e = n === void 0 ? "" : `:${u + n}`;
316
+ return e = D(e, o?.temporal, o?.spatial), e;
276
317
  }
277
- let s = [], c = t;
278
- for (; c && c !== e;) {
279
- let e = c.parentNode;
318
+ let d = [], f = t;
319
+ for (; f && f !== e;) {
320
+ let e = f.parentNode;
280
321
  if (!e) break;
281
- let t = Array.from(e.childNodes), n = t.indexOf(c);
282
- if (n === -1) throw Error("Node not found in parent's children");
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 l = s.join("");
287
- if (n !== void 0 && (l += `:${n}`), l = C(l, o?.temporal, o?.spatial), i.includeTextAssertions && t.nodeType === Node.TEXT_NODE) {
288
- let e = x(t, n, i);
289
- l = w(l, e, i.includeSideBias);
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 l = O(l, i.extensions), l;
330
+ return p = M(p, i.extensions), p;
292
331
  }
293
- var D = (e) => Object.entries(e).map(([e, t]) => {
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 O(e, t) {
336
+ function M(e, t) {
298
337
  if (!t || Object.keys(t).length === 0) return e;
299
- let n = D(t);
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 k(e, n, r, i, a = {}, o, s) {
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 = T(c, void 0, a), u = E(c, e, n, a, o), d = E(c, r, i, a, s);
310
- return a.extensions && Object.keys(a.extensions).length > 0 ? `${O(l, a.extensions)},${O(u, a.extensions)},${O(d, a.extensions)}` : `${l},${u},${d}`;
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 A = (e, t, n = {}, i) => {
351
+ var P = (e, t, n = {}, i) => {
313
352
  let a = `/6/${(e + 1) * 2}`;
314
- return t && (a += `[${r(t)}]`), a = i ? O(a, n.extensions) : a, `${a}!`;
353
+ return t && (a += `[${r(t)}]`), a = i ? M(a, n.extensions) : a, `${a}!`;
315
354
  };
316
- function j(e, t = {}) {
317
- if (o(e)) return `epubcfi(${T(e, void 0, t)})`;
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 = A(e.spineIndex, e.spineId, t, !e.node), !e.node) || (n += T(e.node ?? null, e.offset, t, e)), `epubcfi(${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 = A(r.spineIndex, r.spineId, t, !r.node)), r.node && i.node && (n += k(r.node, r.offset ?? 0, i.node, i.offset ?? 0, t, r, i)), `epubcfi(${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 M(e, t, n = {}) {
364
+ function I(e, t, n = {}) {
326
365
  try {
327
- return N(typeof e == "string" ? g(e) : e, t, n);
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 N(e, t, n = { asRange: !1 }) {
337
- if (l(e)) return P(e, t);
338
- if (c(e)) return z(null);
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 U(r, t, n);
379
+ if (r) return J(r, t, n);
341
380
  throw Error("Invalid CFI structure");
342
381
  }
343
- function P(e, t) {
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 = U(e, t);
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 = U(e, t);
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 = U(e, t);
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 s = a.nodeType === Node.TEXT_NODE, c, l, u = 0, d = 0;
367
- if (s) {
368
- c = a, l = a;
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
- u = (Array.isArray(e?.offset) ? e.offset[0] : e?.offset) ?? 0, d = (Array.isArray(t?.offset) ? t.offset[0] : t?.offset) ?? 0;
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
- c = a, u = r[0]?.offset ?? 0;
414
+ l = a, d = r[0]?.offset ?? 0;
376
415
  } else {
377
- let e = H(a, r, 0, !0);
416
+ let e = q(a, r, 0, !0);
378
417
  if (!e) throw Error("Failed to resolve start node in CFI range");
379
- c = e;
418
+ l = e.node;
380
419
  let t = r[r.length - 1];
381
- u = (Array.isArray(t?.offset) ? t.offset[0] : t?.offset) ?? 0;
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
- l = a, d = i[0]?.offset ?? 0;
424
+ u = a, f = i[0]?.offset ?? 0;
386
425
  } else {
387
- let e = H(a, i, 0, !0);
426
+ let e = q(a, i, 0, !0);
388
427
  if (!e) throw Error("Failed to resolve end node in CFI range");
389
- l = e;
428
+ u = e.node;
390
429
  let t = i[i.length - 1];
391
- d = (Array.isArray(t?.offset) ? t.offset[0] : t?.offset) ?? 0;
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 f.setStart(c, u), f.setEnd(l, d), {
396
- ...R(r[r.length - 1]),
397
- node: f,
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 F(e) {
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 I(e) {
451
+ function B(e) {
412
452
  return e.index % 2 != 0;
413
453
  }
414
- function L(e) {
415
- return (l(e) ? e.end : e).at(-1)?.at(-1)?.extensions;
454
+ function V(e) {
455
+ return (p(e) ? e.end : e).at(-1)?.at(-1)?.extensions;
416
456
  }
417
- function R(e) {
418
- let t = F(e), n = e?.extensions;
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 z(e, t) {
467
+ function U(e, t) {
428
468
  return {
429
469
  node: e,
430
470
  isRange: !1,
431
- ...R(t)
471
+ ...H(t)
432
472
  };
433
473
  }
434
- function B(e, t) {
474
+ function W(e, t) {
435
475
  return {
436
476
  node: e,
437
477
  isRange: !0,
438
- ...R(t)
478
+ ...H(t)
439
479
  };
440
480
  }
441
- function V(e, t, n) {
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 H(e, t, n, r) {
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 (I(n)) {
455
- let e = n.index - 1;
456
- if (e >= 0 && e < i.childNodes.length) i = i.childNodes[e];
457
- else {
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 U(e, t, n = {}) {
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 z(null);
538
+ return U(null);
481
539
  }
482
- let { node: a, remainingPathIndex: o } = W(t, e);
540
+ let { node: a, remainingPathIndex: o } = te(t, e);
483
541
  if (a && o >= e.length) {
484
542
  let n = e.at(-1);
485
- if (n && I(n)) {
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 && !I(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), B(e, n);
551
+ return e.setStart(s, 0), e.setEnd(s, 0), W(e, n);
501
552
  }
502
- let i = H(s, e.slice(0, -1), c, r);
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), B(e, n);
558
+ return e.selectNodeContents(i), e.collapse(!1), W(e, n);
508
559
  }
509
560
  }
510
561
  }
511
562
  }
512
- if (s = H(s, e, c, r), !s) {
563
+ let l = q(s, e, c, r);
564
+ if (!l) {
513
565
  if (r) throw Error("Failed to resolve CFI path");
514
- return z(null);
566
+ return U(null);
515
567
  }
516
- let l = e.at(-1);
517
- return i ? B(V(t, s, l?.offset), l) : z(s, l);
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 W(e, t) {
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 G(e) {
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 K(e) {
549
- return e.map((e) => G(e)).join("");
613
+ function Y(e) {
614
+ return e.map((e) => ne(e)).join("");
550
615
  }
551
- function q(e) {
552
- return Array.isArray(e) ? `epubcfi(${e.map(K).join("!")})` : `epubcfi(${e.parent.map(K).join("!")},${e.start.map(K).join("!")},${e.end.map(K).join("!")})`;
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 J = (e) => (e + 1) * 2, Y = (e) => e / 2 - 1, X = (e) => l(e) ? e.parent[0] : e[0], Z = (e) => {
557
- let t = X(e);
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
- }, Q = (e, t) => {
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
- }, $ = (e) => {
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
- }, ee = (e) => {
631
+ }, oe = (e) => {
567
632
  try {
568
- let t = Z(g(e));
633
+ let t = $(b(e));
569
634
  return t ? {
570
- spineIndex: Y(t.index),
571
- spineId: $(t),
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
- }, te = (e, t) => {
642
+ }, se = (e, t) => {
578
643
  try {
579
- let n = g(e), r = Z(n);
580
- return r ? (t.spineIndex !== void 0 && (r.index = J(t.spineIndex)), t.spineId !== void 0 && (r.id = t.spineId, r.text = void 0, r.side = void 0), t.extensions !== void 0 && (r.extensions = Q(r.extensions, t.extensions)), q(n)) : void 0;
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 { b as EPUB_CFI_PACKAGE_SPINE_STEP_INDEX, y as compare, Y as epubCfiItemrefStepIndexToSpineIndex, j as generate, ee as getEpubCfiSpineItemref, c as isIndirectionOnly, l as isParsedCfiRange, g as parse, M as resolve, L as resolveExtensions, q as serialize, J as spineIndexToEpubCfiItemrefStepIndex, te as updateEpubCfiSpineItemref };
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