@prose-reader/cfi 1.212.0 → 1.214.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.
@@ -6,10 +6,12 @@ export interface GenerateOptions {
6
6
  extensions?: Record<string, string>;
7
7
  }
8
8
  export interface CfiPosition {
9
- node: Node;
9
+ node?: Node | null;
10
10
  offset?: number;
11
11
  temporal?: number;
12
12
  spatial?: [number, number];
13
+ spineIndex?: number;
14
+ spineId?: string;
13
15
  }
14
16
  export declare function generate(position: Node | CfiPosition | {
15
17
  start: CfiPosition;
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ const ne = /[\[\]\^,();]/g;
20
20
  function g(e) {
21
21
  return e.replace(ne, "^$&");
22
22
  }
23
- const te = /^epubcfi\((.*)\)$/, b = (e) => e.nodeType === Node.ELEMENT_NODE, I = (e) => typeof e == "object" && e !== null && "nodeType" in e && (e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE), re = (e) => e.nodeType === Node.TEXT_NODE;
23
+ const te = /^epubcfi\((.*)\)$/, w = (e) => e.nodeType === Node.ELEMENT_NODE, p = (e) => typeof e == "object" && e !== null && "nodeType" in e && (e.nodeType === Node.ELEMENT_NODE || e.nodeType === Node.TEXT_NODE), re = (e) => e.nodeType === Node.TEXT_NODE;
24
24
  function ie(e) {
25
25
  const t = e.match(te);
26
26
  return t && t[1] || e;
@@ -32,9 +32,9 @@ function se(e) {
32
32
  t.push(c), n = null, r = "";
33
33
  }, l = (c) => {
34
34
  r += c, i = !1;
35
- }, f = ie(e).trim(), d = Array.from(f).concat("");
36
- for (let c = 0; c < d.length; c++) {
37
- const s = d[c];
35
+ }, f = ie(e).trim(), a = Array.from(f).concat("");
36
+ for (let c = 0; c < a.length; c++) {
37
+ const s = a[c];
38
38
  if (!s) {
39
39
  n === "/" || n === ":" ? o([n, parseInt(r, 10)]) : n === "~" ? o(["~", parseFloat(r)]) : n === "@" ? o(["@", parseFloat(r)]) : n === "[" ? o(["[", r]) : (n === ";" || n != null && n.startsWith(";")) && o([n, r]);
40
40
  break;
@@ -120,34 +120,34 @@ function oe(e) {
120
120
  for (let o = 0; o < e.length; o++) {
121
121
  const l = e[o];
122
122
  if (!l) continue;
123
- const [f, d] = l;
124
- f === "/" ? (i++, t[i] = { index: d }, n[i] = []) : i >= 0 && ((r = n[i]) == null || r.push(l));
123
+ const [f, a] = l;
124
+ f === "/" ? (i++, t[i] = { index: a }, n[i] = []) : i >= 0 && ((r = n[i]) == null || r.push(l));
125
125
  }
126
126
  for (let o = 0; o < t.length; o++) {
127
127
  const l = t[o];
128
128
  if (!l) continue;
129
129
  const f = n[o] || [];
130
- for (let d = 0; d < f.length; d++) {
131
- const c = f[d];
130
+ for (let a = 0; a < f.length; a++) {
131
+ const c = f[a];
132
132
  if (!c) continue;
133
- const [s, a] = c;
133
+ const [s, d] = c;
134
134
  if (s === ":")
135
- l.offset = a;
135
+ l.offset = d;
136
136
  else if (s === "~")
137
- l.temporal = a;
137
+ l.temporal = d;
138
138
  else if (s === "@")
139
- l.spatial = (l.spatial || []).concat(a);
139
+ l.spatial = (l.spatial || []).concat(d);
140
140
  else if (s === ";s")
141
- l.side = a;
141
+ l.side = d;
142
142
  else if (s.startsWith(";") && s !== ";s") {
143
143
  const u = s.substring(1);
144
- l.extensions || (l.extensions = {}), l.extensions[u] = a;
144
+ l.extensions || (l.extensions = {}), l.extensions[u] = d;
145
145
  } else if (s === "[") {
146
- const u = typeof a == "string" && !a.includes(" ") && a.length < 50;
147
- if (d === 0 && u && !l.id)
148
- l.id = a;
149
- else if (a !== "") {
150
- const h = a.split(",").map((x) => x.trim());
146
+ const u = typeof d == "string" && !d.includes(" ") && d.length < 50;
147
+ if (a === 0 && u && !l.id)
148
+ l.id = d;
149
+ else if (d !== "") {
150
+ const h = d.split(",").map((x) => x.trim());
151
151
  l.text = h;
152
152
  }
153
153
  }
@@ -159,7 +159,7 @@ function T(e) {
159
159
  const t = H(e, "!");
160
160
  return U(e, t).map(oe);
161
161
  }
162
- function p(e) {
162
+ function O(e) {
163
163
  if (!e)
164
164
  throw new Error("CFI string cannot be empty");
165
165
  const t = se(e);
@@ -175,15 +175,15 @@ function p(e) {
175
175
  end: T(o || [])
176
176
  };
177
177
  }
178
- function M(e) {
178
+ function P(e) {
179
179
  return e !== null && typeof e == "object" && "parent" in e && "start" in e && "end" in e;
180
180
  }
181
- function ue(e, t, n = {}) {
181
+ function he(e, t, n = {}) {
182
182
  try {
183
183
  if (typeof e != "string")
184
184
  return D(e, t, n);
185
- const i = p(e);
186
- return n.asRange && M(i) ? V(i, t) : D(i, t, n);
185
+ const i = O(e);
186
+ return n.asRange && P(i) ? G(i, t) : D(i, t, n);
187
187
  } catch (i) {
188
188
  if (n.throwOnError)
189
189
  throw i;
@@ -192,31 +192,31 @@ function ue(e, t, n = {}) {
192
192
  }
193
193
  function D(e, t, n = { asRange: !1 }) {
194
194
  const { asRange: i = !1 } = n;
195
- if (M(e)) {
195
+ if (P(e)) {
196
196
  if (i)
197
- return V(e, t);
197
+ return G(e, t);
198
198
  const r = e.start[0] || [];
199
- return E(r, t, n);
199
+ return y(r, t, n);
200
200
  }
201
201
  if (e[0])
202
- return E(e[0], t, n);
202
+ return y(e[0], t, n);
203
203
  throw new Error("Invalid CFI structure");
204
204
  }
205
- function V(e, t) {
205
+ function G(e, t) {
206
206
  const n = e.parent[0] || [], i = e.start[0] || [], r = e.end[0] || [];
207
207
  let o = t.documentElement;
208
208
  if (n.length > 0) {
209
- const a = E(n, t);
210
- I(a.node) && (o = a.node);
209
+ const d = y(n, t);
210
+ p(d.node) && (o = d.node);
211
211
  }
212
212
  if (!o)
213
213
  throw new Error("Failed to resolve parent node in CFI range");
214
- const l = E(i, t), f = E(r, t);
215
- if (!I(l.node) || !I(f.node))
214
+ const l = y(i, t), f = y(r, t);
215
+ if (!p(l.node) || !p(f.node))
216
216
  throw new Error("Failed to resolve start or end node in CFI range");
217
- const d = l.node, c = f.node, s = t.createRange();
217
+ const a = l.node, c = f.node, s = t.createRange();
218
218
  return s.setStart(
219
- d,
219
+ a,
220
220
  (Array.isArray(l.offset) ? l.offset[0] : l.offset) ?? 0
221
221
  ), s.setEnd(
222
222
  c,
@@ -238,14 +238,14 @@ function le(e) {
238
238
  }
239
239
  }
240
240
  }
241
- function k(e) {
241
+ function S(e) {
242
242
  return e.index % 2 !== 0;
243
243
  }
244
- function he(e) {
245
- const n = (M(e) ? e.end : e).at(-1), i = n == null ? void 0 : n.at(-1);
244
+ function xe(e) {
245
+ const n = (P(e) ? e.end : e).at(-1), i = n == null ? void 0 : n.at(-1);
246
246
  return i == null ? void 0 : i.extensions;
247
247
  }
248
- function G(e) {
248
+ function J(e) {
249
249
  const t = le(e), n = e == null ? void 0 : e.extensions;
250
250
  return {
251
251
  offset: e == null ? void 0 : e.offset,
@@ -255,18 +255,18 @@ function G(e) {
255
255
  extensions: n
256
256
  };
257
257
  }
258
- function $(e, t) {
258
+ function E(e, t) {
259
259
  return {
260
260
  node: e,
261
261
  isRange: !1,
262
- ...G(t)
262
+ ...J(t)
263
263
  };
264
264
  }
265
265
  function v(e, t) {
266
266
  return {
267
267
  node: e,
268
268
  isRange: !0,
269
- ...G(t)
269
+ ...J(t)
270
270
  };
271
271
  }
272
272
  function W(e, t, n) {
@@ -282,7 +282,7 @@ function X(e, t, n, i) {
282
282
  for (let o = n; o < t.length; o++) {
283
283
  const l = t[o];
284
284
  if (!r || !l) break;
285
- if (k(l)) {
285
+ if (S(l)) {
286
286
  const f = l.index - 1;
287
287
  if (f >= 0 && f < r.childNodes.length)
288
288
  r = r.childNodes[f];
@@ -295,9 +295,9 @@ function X(e, t, n, i) {
295
295
  } else {
296
296
  const f = Array.from(r.childNodes).filter(
297
297
  (c) => c.nodeType === Node.ELEMENT_NODE
298
- ), d = Math.floor(l.index / 2) - 1;
299
- if (d >= 0 && d < f.length) {
300
- const c = f[d];
298
+ ), a = Math.floor(l.index / 2) - 1;
299
+ if (a >= 0 && a < f.length) {
300
+ const c = f[a];
301
301
  c && (r = c);
302
302
  } else {
303
303
  if (i)
@@ -309,66 +309,66 @@ function X(e, t, n, i) {
309
309
  }
310
310
  return r;
311
311
  }
312
- function E(e, t, n = {}) {
312
+ function y(e, t, n = {}) {
313
313
  const { throwOnError: i = !1, asRange: r = !1 } = n;
314
314
  if (!t) {
315
315
  if (i)
316
316
  throw new Error("Document is not available");
317
- return $(null);
317
+ return E(null);
318
318
  }
319
319
  const { node: o, remainingPathIndex: l } = fe(t, e);
320
320
  if (o && l >= e.length) {
321
321
  const s = e.at(-1);
322
- if (s && k(s)) {
323
- const a = s.index - 1;
324
- if (a >= 0 && a < o.childNodes.length) {
325
- const u = o.childNodes[a];
326
- return $(u, s);
322
+ if (s && S(s)) {
323
+ const d = s.index - 1;
324
+ if (d >= 0 && d < o.childNodes.length) {
325
+ const u = o.childNodes[d];
326
+ return E(u, s);
327
327
  }
328
328
  }
329
329
  if (r) {
330
- const a = W(t, o, s == null ? void 0 : s.offset);
331
- return v(a, s);
330
+ const d = W(t, o, s == null ? void 0 : s.offset);
331
+ return v(d, s);
332
332
  }
333
- return $(o, s);
333
+ return E(o, s);
334
334
  }
335
335
  let f = o || t.documentElement;
336
- const d = o ? l : 0;
336
+ const a = o ? l : 0;
337
337
  if (r && e.length > 0) {
338
338
  const s = e[e.length - 1];
339
- if (s && !k(s)) {
339
+ if (s && !S(s)) {
340
340
  if (s.index === 0 && f) {
341
341
  const u = t.createRange();
342
342
  return u.setStart(f, 0), u.setEnd(f, 0), v(u, s);
343
343
  }
344
- const a = X(
344
+ const d = X(
345
345
  f,
346
346
  e.slice(0, -1),
347
- d,
347
+ a,
348
348
  i
349
349
  );
350
- if (a) {
351
- const u = Array.from(a.childNodes).filter(
350
+ if (d) {
351
+ const u = Array.from(d.childNodes).filter(
352
352
  (x) => x.nodeType === Node.ELEMENT_NODE
353
353
  );
354
354
  if (Math.floor(s.index / 2) - 1 === u.length) {
355
355
  const x = t.createRange();
356
- return x.selectNodeContents(a), x.collapse(!1), v(x, s);
356
+ return x.selectNodeContents(d), x.collapse(!1), v(x, s);
357
357
  }
358
358
  }
359
359
  }
360
360
  }
361
- if (f = X(f, e, d, i), !f) {
361
+ if (f = X(f, e, a, i), !f) {
362
362
  if (i)
363
363
  throw new Error("Failed to resolve CFI path");
364
- return $(null);
364
+ return E(null);
365
365
  }
366
366
  const c = e.at(-1);
367
367
  if (r) {
368
368
  const s = W(t, f, c == null ? void 0 : c.offset);
369
369
  return v(s, c);
370
370
  }
371
- return $(f, c);
371
+ return E(f, c);
372
372
  }
373
373
  function fe(e, t) {
374
374
  for (let n = t.length - 1; n >= 0; n--) {
@@ -380,7 +380,7 @@ function fe(e, t) {
380
380
  }
381
381
  return { node: null, remainingPathIndex: 0 };
382
382
  }
383
- function J(e, t, n = {}) {
383
+ function K(e, t, n = {}) {
384
384
  if (!e.textContent || e.textContent.trim() === "")
385
385
  return null;
386
386
  const i = e.textContent, r = n.textAssertionLength || 10;
@@ -394,11 +394,11 @@ function ce(e) {
394
394
  const [t, n] = e, i = Math.max(0, Math.min(100, t)), r = Math.max(0, Math.min(100, n));
395
395
  return `@${i}:${r}`;
396
396
  }
397
- function S(e, t, n) {
397
+ function j(e, t, n) {
398
398
  let i = e;
399
399
  return t !== void 0 && (i += `~${t}`), n !== void 0 && (i += ce(n)), i;
400
400
  }
401
- function K(e, t, n) {
401
+ function Q(e, t, n) {
402
402
  let i = e;
403
403
  if (t && (i += `[${g(t)}]`), n) {
404
404
  const r = n === "before" ? "b" : "a";
@@ -406,56 +406,56 @@ function K(e, t, n) {
406
406
  }
407
407
  return i;
408
408
  }
409
- function j(e, t, n = {}, i) {
410
- var d;
409
+ function M(e, t, n = {}, i) {
410
+ var a;
411
411
  let r = "", o = e, l = null;
412
- if (e.nodeType === Node.TEXT_NODE) {
412
+ if ((e == null ? void 0 : e.nodeType) === Node.TEXT_NODE) {
413
413
  l = e;
414
414
  const c = e.parentNode;
415
415
  if (!c)
416
416
  throw new Error("Text node doesn't have a parent");
417
- const a = Array.from(c.childNodes).indexOf(e);
418
- if (a === -1)
417
+ const d = Array.from(c.childNodes).indexOf(e);
418
+ if (d === -1)
419
419
  throw new Error("Node not found in parent's children");
420
- if (r = `/${a + 1}`, b(c) && c.id) {
421
- const u = c.id, h = Array.from(((d = c.parentNode) == null ? void 0 : d.childNodes) || []);
422
- r = `/${h.slice(0, h.indexOf(c) + 1).filter((y) => y.nodeType === Node.ELEMENT_NODE).length * 2}[${g(u)}]${r}`, o = c.parentNode;
420
+ if (r = `/${d + 1}`, w(c) && c.id) {
421
+ const u = c.id, h = Array.from(((a = c.parentNode) == null ? void 0 : a.childNodes) || []);
422
+ r = `/${h.slice(0, h.indexOf(c) + 1).filter((I) => I.nodeType === Node.ELEMENT_NODE).length * 2}[${g(u)}]${r}`, o = c.parentNode;
423
423
  } else
424
424
  o = c;
425
425
  }
426
426
  let f = null;
427
- for (l && n.includeTextAssertions && (f = J(l, t, n)); o != null && o.parentNode; ) {
428
- if (!(l && o === l.parentNode && r.includes(`[${b(o) ? o.id : ""}]`))) {
429
- const c = o.parentNode, s = Array.from(c.childNodes), a = s.indexOf(o);
430
- if (a === -1)
427
+ for (l && n.includeTextAssertions && (f = K(l, t, n)); o != null && o.parentNode; ) {
428
+ if (!(l && o === l.parentNode && r.includes(`[${w(o) ? o.id : ""}]`))) {
429
+ const c = o.parentNode, s = Array.from(c.childNodes), d = s.indexOf(o);
430
+ if (d === -1)
431
431
  throw new Error("Node not found in parent's children");
432
- const u = s.slice(0, a + 1).filter((N) => N.nodeType === Node.ELEMENT_NODE);
432
+ const u = s.slice(0, d + 1).filter(($) => $.nodeType === Node.ELEMENT_NODE);
433
433
  let h;
434
434
  o.nodeType, Node.ELEMENT_NODE, h = u.length;
435
435
  const x = h * 2;
436
- b(o) && o.id ? r = `/${x}[${g(o.id)}]${r}` : r = `/${x}${r}`;
436
+ w(o) && o.id ? r = `/${x}[${g(o.id)}]${r}` : r = `/${x}${r}`;
437
437
  }
438
438
  if (o.parentNode.nodeName.toLowerCase() === "html")
439
439
  break;
440
440
  o = o.parentNode;
441
441
  }
442
- return t !== void 0 && (r += `:${t}`), r = S(
442
+ return t !== void 0 && (r += `:${t}`), r = j(
443
443
  r,
444
444
  i == null ? void 0 : i.temporal,
445
445
  (i == null ? void 0 : i.spatial) || n.spatialOffset
446
- ), r = K(r, f, n.includeSideBias), r = Q(r, n.extensions), r;
446
+ ), r = Q(r, f, n.includeSideBias), r = N(r, n.extensions), r;
447
447
  }
448
448
  function z(e, t, n, i = {}, r) {
449
449
  if (e === t) {
450
- let d = n !== void 0 ? `:${n}` : "";
451
- return d = S(d, r == null ? void 0 : r.temporal, r == null ? void 0 : r.spatial), d;
450
+ let a = n !== void 0 ? `:${n}` : "";
451
+ return a = j(a, r == null ? void 0 : r.temporal, r == null ? void 0 : r.spatial), a;
452
452
  }
453
453
  const o = [];
454
454
  let l = t;
455
455
  for (; l && l !== e; ) {
456
- const d = l.parentNode;
457
- if (!d) break;
458
- const c = d.childNodes;
456
+ const a = l.parentNode;
457
+ if (!a) break;
458
+ const c = a.childNodes;
459
459
  let s = -1;
460
460
  for (let u = 0; u < c.length; u++)
461
461
  if (c[u] === l) {
@@ -464,29 +464,39 @@ function z(e, t, n, i = {}, r) {
464
464
  }
465
465
  if (s === -1)
466
466
  throw new Error("Node not found in parent's children");
467
- const a = s + 1;
468
- b(l) && l.id ? o.unshift(`/${a}[${g(l.id)}]`) : o.unshift(`/${a}`), l = d;
467
+ const d = s + 1;
468
+ w(l) && l.id ? o.unshift(`/${d}[${g(l.id)}]`) : o.unshift(`/${d}`), l = a;
469
469
  }
470
470
  let f = o.join("");
471
- if (n !== void 0 && (f += `:${n}`), f = S(f, r == null ? void 0 : r.temporal, r == null ? void 0 : r.spatial), i.includeTextAssertions && t.nodeType === Node.TEXT_NODE) {
472
- const d = J(t, n, i);
473
- f = K(
471
+ if (n !== void 0 && (f += `:${n}`), f = j(f, r == null ? void 0 : r.temporal, r == null ? void 0 : r.spatial), i.includeTextAssertions && t.nodeType === Node.TEXT_NODE) {
472
+ const a = K(t, n, i);
473
+ f = Q(
474
474
  f,
475
- d,
475
+ a,
476
476
  i.includeSideBias
477
477
  );
478
478
  }
479
- return f = Q(f, i.extensions), f;
480
- }
481
- const P = (e) => Object.entries(e).map(([t, n]) => `${t}=${encodeURIComponent(g(n))}`).join(";");
482
- function Q(e, t) {
483
- return !t || Object.keys(t).length === 0 ? e : e.endsWith("]") ? `${e.substring(0, e.length - 1)}[;${P(t)}]` : `${e}[;${P(t)}]`;
479
+ return f = N(f, i.extensions), f;
480
+ }
481
+ const ae = (e) => Object.entries(e).map(([t, n]) => {
482
+ const i = g(n);
483
+ return `${t}=${encodeURIComponent(i)}`;
484
+ }).join(";");
485
+ function N(e, t) {
486
+ if (!t || Object.keys(t).length === 0)
487
+ return e;
488
+ const n = ae(t);
489
+ if (e.endsWith("]")) {
490
+ const i = e.lastIndexOf("["), r = e.substring(i + 1, e.length - 1);
491
+ return r.includes(n) ? e : `${e.substring(0, e.length - 1)}${r.includes(";"), ";"}${n}]`;
492
+ }
493
+ return e.endsWith("!") ? e : `${e}[;${n}]`;
484
494
  }
485
- function ae(e, t, n, i, r = {}, o, l) {
495
+ function de(e, t, n, i, r = {}, o, l) {
486
496
  const f = ee(e, n);
487
497
  if (!f)
488
498
  throw new Error("No common ancestor found");
489
- const d = j(f, void 0, r), c = z(
499
+ const a = M(f, void 0, r), c = z(
490
500
  f,
491
501
  e,
492
502
  t,
@@ -500,63 +510,74 @@ function ae(e, t, n, i, r = {}, o, l) {
500
510
  l
501
511
  );
502
512
  if (r.extensions && Object.keys(r.extensions).length > 0) {
503
- const a = P(r.extensions), u = c.includes("[") ? c.replace(/\]$/, `;${a}]`) : `${c}[;${a}]`, h = s.includes("[") ? s.replace(/\]$/, `;${a}]`) : `${s}[;${a}]`;
513
+ const d = N(a, r.extensions), u = N(c, r.extensions), h = N(s, r.extensions);
504
514
  return `${d},${u},${h}`;
505
515
  }
506
- return `${d},${c},${s}`;
507
- }
508
- function xe(e, t = {}) {
509
- if (I(e))
510
- return `epubcfi(${j(e, void 0, t)})`;
511
- if ("node" in e && !("start" in e))
512
- return `epubcfi(${j(
513
- e.node,
516
+ return `${a},${c},${s}`;
517
+ }
518
+ const Y = (e, t, n = {}, i) => {
519
+ const r = "";
520
+ let l = `/6/${(e + 1) * 2}`;
521
+ return t && (l += `[${g(t)}]`), l = i ? N(l, n.extensions) : l, `${l}${r}!`;
522
+ };
523
+ function ge(e, t = {}) {
524
+ if (p(e))
525
+ return `epubcfi(${M(e, void 0, t)})`;
526
+ let n = "";
527
+ if (!("start" in e))
528
+ return e.spineIndex !== void 0 && (n = Y(
529
+ e.spineIndex,
530
+ e.spineId,
531
+ t,
532
+ !e.node
533
+ ), !e.node) ? `epubcfi(${n})` : (n += M(
534
+ e.node ?? null,
514
535
  e.offset,
515
536
  t,
516
537
  e
517
- )})`;
518
- if ("start" in e && "end" in e) {
519
- const { start: n, end: i } = e;
520
- return `epubcfi(${ae(
521
- n.node,
522
- n.offset ?? 0,
523
- i.node,
524
- i.offset ?? 0,
525
- t,
526
- n,
527
- i
528
- )})`;
529
- }
530
- throw new Error(
531
- "Invalid argument: expected Node, CfiPosition, or {start, end} object"
532
- );
538
+ ), `epubcfi(${n})`);
539
+ const { start: i, end: r } = e;
540
+ return i.spineIndex !== void 0 && (n = Y(
541
+ i.spineIndex,
542
+ i.spineId,
543
+ t,
544
+ !i.node
545
+ )), i.node && r.node && (n += de(
546
+ i.node,
547
+ i.offset ?? 0,
548
+ r.node,
549
+ r.offset ?? 0,
550
+ t,
551
+ i,
552
+ r
553
+ )), `epubcfi(${n})`;
533
554
  }
534
555
  function m(e, t = !1) {
535
- return typeof e == "string" ? m(p(e), t) : "parent" in e ? t ? e.parent.concat(e.end) : e.parent.concat(e.start) : e;
556
+ return typeof e == "string" ? m(O(e), t) : "parent" in e ? t ? e.parent.concat(e.end) : e.parent.concat(e.start) : e;
536
557
  }
537
- function Y(e) {
558
+ function V(e) {
538
559
  return e.offset !== void 0 ? 1 : e.index !== void 0 ? 2 : e.temporal !== void 0 || e.spatial !== void 0 ? 3 : 4;
539
560
  }
540
561
  function q(e, t) {
541
562
  var r, o, l, f;
542
- const n = typeof e == "string" ? p(e) : e, i = typeof t == "string" ? p(t) : t;
563
+ const n = typeof e == "string" ? O(e) : e, i = typeof t == "string" ? O(t) : t;
543
564
  if ("parent" in n || "parent" in i)
544
565
  return q(m(n), m(i)) || q(m(n, !0), m(i, !0));
545
- for (let d = 0; d < Math.max(n.length, i.length); d++) {
546
- const c = n[d] || [], s = i[d] || [], a = Math.max(c.length, s.length) - 1;
547
- for (let u = 0; u <= a; u++) {
566
+ for (let a = 0; a < Math.max(n.length, i.length); a++) {
567
+ const c = n[a] || [], s = i[a] || [], d = Math.max(c.length, s.length) - 1;
568
+ for (let u = 0; u <= d; u++) {
548
569
  const h = c[u], x = s[u];
549
570
  if (!h) return -1;
550
571
  if (!x) return 1;
551
- const N = Y(h), y = Y(x);
552
- if (N !== y)
553
- return N - y;
572
+ const $ = V(h), I = V(x);
573
+ if ($ !== I)
574
+ return $ - I;
554
575
  if (h.index > x.index) return 1;
555
576
  if (h.index < x.index) return -1;
556
- const R = h.temporal !== void 0, O = x.temporal !== void 0;
557
- if (R && !O) return 1;
558
- if (!R && O) return -1;
559
- if (R && O) {
577
+ const R = h.temporal !== void 0, k = x.temporal !== void 0;
578
+ if (R && !k) return 1;
579
+ if (!R && k) return -1;
580
+ if (R && k) {
560
581
  if ((h.temporal ?? 0) > (x.temporal ?? 0)) return 1;
561
582
  if ((h.temporal ?? 0) < (x.temporal ?? 0)) return -1;
562
583
  }
@@ -564,14 +585,14 @@ function q(e, t) {
564
585
  if (A && !C) return 1;
565
586
  if (!A && C) return -1;
566
587
  if (A && C) {
567
- const F = ((r = h.spatial) == null ? void 0 : r[1]) ?? 0, _ = ((o = x.spatial) == null ? void 0 : o[1]) ?? 0;
568
- if (F > _) return 1;
569
- if (F < _) return -1;
570
- const B = ((l = h.spatial) == null ? void 0 : l[0]) ?? 0, L = ((f = x.spatial) == null ? void 0 : f[0]) ?? 0;
571
- if (B > L) return 1;
572
- if (B < L) return -1;
588
+ const F = ((r = h.spatial) == null ? void 0 : r[1]) ?? 0, B = ((o = x.spatial) == null ? void 0 : o[1]) ?? 0;
589
+ if (F > B) return 1;
590
+ if (F < B) return -1;
591
+ const _ = ((l = h.spatial) == null ? void 0 : l[0]) ?? 0, L = ((f = x.spatial) == null ? void 0 : f[0]) ?? 0;
592
+ if (_ > L) return 1;
593
+ if (_ < L) return -1;
573
594
  }
574
- if (u === a) {
595
+ if (u === d) {
575
596
  if ((h.offset ?? 0) > (x.offset ?? 0)) return 1;
576
597
  if ((h.offset ?? 0) < (x.offset ?? 0)) return -1;
577
598
  }
@@ -579,7 +600,7 @@ function q(e, t) {
579
600
  }
580
601
  return 0;
581
602
  }
582
- function de(e) {
603
+ function ue(e) {
583
604
  let t = `/${e.index}`;
584
605
  if (e.id) {
585
606
  if (t += `[${g(e.id)}`, e.extensions)
@@ -594,22 +615,22 @@ function de(e) {
594
615
  n.push(`;${i}=${g(r)}`);
595
616
  return n.length > 0 && (t += `[${n.join("")}]`), t;
596
617
  }
597
- function w(e) {
598
- return e.map((t) => de(t)).join("");
618
+ function b(e) {
619
+ return e.map((t) => ue(t)).join("");
599
620
  }
600
- function ge(e) {
621
+ function Ne(e) {
601
622
  if (Array.isArray(e))
602
- return `epubcfi(${e.map(w).join("!")})`;
603
- const t = e.parent.map(w).join("!"), n = e.start.map(w).join("!"), i = e.end.map(w).join("!");
623
+ return `epubcfi(${e.map(b).join("!")})`;
624
+ const t = e.parent.map(b).join("!"), n = e.start.map(b).join("!"), i = e.end.map(b).join("!");
604
625
  return `epubcfi(${t},${n},${i})`;
605
626
  }
606
627
  export {
607
628
  q as compare,
608
- xe as generate,
609
- M as isParsedCfiRange,
610
- p as parse,
611
- ue as resolve,
612
- he as resolveExtensions,
613
- ge as serialize
629
+ ge as generate,
630
+ P as isParsedCfiRange,
631
+ O as parse,
632
+ he as resolve,
633
+ xe as resolveExtensions,
634
+ Ne as serialize
614
635
  };
615
636
  //# sourceMappingURL=index.js.map