@prose-reader/shared 1.130.0 → 1.131.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
@@ -9,11 +9,11 @@ function a(e) {
9
9
  if (typeof e[0] != "string")
10
10
  throw new TypeError("Url must be a string. Received " + e[0]);
11
11
  e[0].match(/^[^/:]+:\/*$/) && e.length > 1 && (e[0] = e.shift() + e[0]), e[0].match(/^file:\/\/\//) ? e[0] = e[0].replace(/^([^/:]+):\/*/, "$1:///") : e[0] = e[0].replace(/^([^/:]+):\/*/, "$1://");
12
- for (let l = 0; l < e.length; l++) {
13
- let r = e[l];
14
- if (typeof r != "string")
15
- throw new TypeError("Url must be a string. Received " + r);
16
- r !== "" && (l > 0 && (r = r.replace(/^[/]+/, "")), l < e.length - 1 ? r = r.replace(/[/]+$/, "") : r = r.replace(/[/]+$/, "/"), n.push(r));
12
+ for (let r = 0; r < e.length; r++) {
13
+ let l = e[r];
14
+ if (typeof l != "string")
15
+ throw new TypeError("Url must be a string. Received " + l);
16
+ l !== "" && (r > 0 && (l = l.replace(/^[/]+/, "")), r < e.length - 1 ? l = l.replace(/[/]+$/, "") : l = l.replace(/[/]+$/, "/"), n.push(l));
17
17
  }
18
18
  let t = n.join("/");
19
19
  t = t.replace(/\/(\?|&|#[^!])/g, "$1");
@@ -24,6 +24,10 @@ function d(...e) {
24
24
  const n = Array.from(Array.isArray(e[0]) ? e[0] : e);
25
25
  return a(n);
26
26
  }
27
+ function R(e) {
28
+ const n = e.split("/");
29
+ return n.pop(), n.join("/");
30
+ }
27
31
  const g = (e) => {
28
32
  switch (f(e)) {
29
33
  case "png":
@@ -39,37 +43,37 @@ const g = (e) => {
39
43
  case "xhtml":
40
44
  return "application/xhtml+xml";
41
45
  }
42
- }, R = ({ mimeType: e, uri: n }) => {
46
+ }, w = ({ mimeType: e, uri: n }) => {
43
47
  const t = e ?? g(n ?? "");
44
48
  return t == null ? void 0 : t.startsWith("application/xhtml+xml");
45
- }, w = (e) => e.length ? e.indexOf(";") ? e.substring(0, e.indexOf(";")) : e : void 0, _ = "prose-reader-resource-error", E = Object.prototype.hasOwnProperty, h = (e, n) => e === n ? e !== 0 || n !== 0 || 1 / e === 1 / n : !1, m = (e, n, t) => {
49
+ }, _ = (e) => e.length ? e.indexOf(";") ? e.substring(0, e.indexOf(";")) : e : void 0, m = "prose-reader-resource-error", E = Object.prototype.hasOwnProperty, h = (e, n) => e === n ? e !== 0 || n !== 0 || 1 / e === 1 / n : !1, O = (e, n, t) => {
46
50
  if (e === n)
47
51
  return !0;
48
52
  if (typeof e != "object" || e === null || typeof n != "object" || n === null)
49
53
  return !1;
50
- const o = Object.keys(e), l = Object.keys(n);
51
- if (o.length !== l.length)
54
+ const o = Object.keys(e), r = Object.keys(n);
55
+ if (o.length !== r.length)
52
56
  return !1;
53
- const r = t && typeof t.customEqual == "function" ? t.customEqual : h;
57
+ const l = t && typeof t.customEqual == "function" ? t.customEqual : h;
54
58
  for (let s = 0; s < o.length; s++) {
55
59
  const u = o[s] || "";
56
- if (!E.call(n, u) || !r(e[u], n[u]))
60
+ if (!E.call(n, u) || !l(e[u], n[u]))
57
61
  return !1;
58
62
  }
59
63
  return !0;
60
- }, O = (e, n) => e.reduce(
64
+ }, y = (e, n) => e.reduce(
61
65
  (t, o) => {
62
- const l = n(o);
63
- return t[l] || (t[l] = []), t[l].push(o), t;
66
+ const r = n(o);
67
+ return t[r] || (t[r] = []), t[r].push(o), t;
64
68
  },
65
69
  {}
66
70
  );
67
- function y(e, n) {
71
+ function $(e, n) {
68
72
  const t = { ...e };
69
73
  for (const o in n)
70
74
  if (Object.prototype.hasOwnProperty.call(n, o)) {
71
- const l = n[o];
72
- (l !== void 0 || !(o in e)) && (t[o] = l);
75
+ const r = n[o];
76
+ (r !== void 0 || !(o in e)) && (t[o] = r);
73
77
  }
74
78
  return t;
75
79
  }
@@ -80,22 +84,23 @@ const c = "@prose-reader", i = (e) => `[${e}]`, p = (e, n) => ({
80
84
  } : e ? Function.prototype.bind.call(console.info, console, i(`${c}`), i(e)) : Function.prototype.bind.call(console.info, console, i(`${c}`)),
81
85
  error: !n || (window == null ? void 0 : window.__PROSE_READER_DEBUG) !== !0 ? () => {
82
86
  } : e ? Function.prototype.bind.call(console.error, console, i(`${c}`), i(e)) : Function.prototype.bind.call(console.error, console, i(`${c}`))
83
- }), $ = {
87
+ }), x = {
84
88
  ...p(),
85
89
  namespace: (e, n) => p(e, n)
86
- }, x = (e, n) => e.length === n.length && e.every((t, o) => t === n[o]);
90
+ }, D = (e, n) => e.length === n.length && e.every((t, o) => t === n[o]);
87
91
  export {
88
- _ as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,
89
- $ as Report,
90
- x as arrayEqual,
92
+ m as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME,
93
+ x as Report,
94
+ D as arrayEqual,
91
95
  g as detectMimeTypeFromName,
96
+ R as getParentPath,
92
97
  f as getUrlExtension,
93
- O as groupBy,
98
+ y as groupBy,
94
99
  h as is,
95
- m as isShallowEqual,
96
- R as isXmlBasedMimeType,
97
- w as parseContentType,
98
- y as shallowMergeIfDefined,
100
+ O as isShallowEqual,
101
+ w as isXmlBasedMimeType,
102
+ _ as parseContentType,
103
+ $ as shallowMergeIfDefined,
99
104
  d as urlJoin
100
105
  };
101
106
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/url.ts","../src/contentType.ts","../src/resources.ts","../src/objects.ts","../src/report.ts","../src/array.ts"],"sourcesContent":["export const getUrlExtension = (url: string) => {\n return url.split(/[#?]/)[0]?.split(`.`).pop()?.trim() || ``\n}\n\nfunction normalize(strArray: string[]) {\n const resultArray = []\n if (strArray.length === 0) {\n return \"\"\n }\n\n if (typeof strArray[0] !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + strArray[0])\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n strArray[0] = strArray.shift() + strArray[0]\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1:///\")\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1://\")\n }\n\n for (let i = 0; i < strArray.length; i++) {\n let component = strArray[i]\n\n if (typeof component !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + component)\n }\n\n if (component === \"\") {\n continue\n }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[/]+/, \"\")\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[/]+$/, \"\")\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[/]+$/, \"/\")\n }\n\n resultArray.push(component)\n }\n\n let str = resultArray.join(\"/\")\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, \"$1\")\n\n // replace ? in parameters with &\n const parts = str.split(\"?\")\n str = parts.shift() + (parts.length > 0 ? \"?\" : \"\") + parts.join(\"&\")\n\n return str\n}\n\nexport function urlJoin(...args: (string | string[])[]) {\n const parts = Array.from(Array.isArray(args[0]) ? args[0] : args) as string[]\n\n return normalize(parts)\n}\n","import { getUrlExtension } from \"./url\"\n\nexport const detectMimeTypeFromName = (name: string) => {\n const extension = getUrlExtension(name)\n\n switch (extension) {\n case `png`:\n return `image/png`\n case `jpg`:\n return `image/jpg`\n case `jpeg`:\n return `image/jpeg`\n case `txt`:\n return `text/plain`\n case `webp`:\n return `image/webp`\n case `xhtml`:\n return `application/xhtml+xml`\n }\n\n return undefined\n}\n\nexport const isXmlBasedMimeType = ({ mimeType, uri }: { uri?: string; mimeType?: string }) => {\n const _mimeType = mimeType ?? detectMimeTypeFromName(uri ?? \"\")\n\n return _mimeType?.startsWith(`application/xhtml+xml`)\n}\n\nexport const parseContentType = (str: string) => {\n if (!str.length) return undefined\n\n const cut = str.indexOf(`;`)\n\n return cut ? str.substring(0, str.indexOf(`;`)) : str\n}\n","export const PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME = \"prose-reader-resource-error\"\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// MIT © 2017 azu\nconst hasOwn = Object.prototype.hasOwnProperty\n\n// Object.is polyfill\nexport const is = (x: any, y: any): boolean => {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y\n } else {\n return false\n }\n}\n\n/**\n * Return true, if `objectA` is shallow equal to `objectB`.\n * Pass Custom equality function to `customEqual`.\n * Default equality is `Object.is`\n * Support Array\n *\n * Options:\n *\n * - `customEqual`: function should return true if the `a` value is equal to `b` value.\n * - `debug`: enable debug info to console log. This log will be disable in production build\n */\nexport const isShallowEqual = <T = any, R = any>(\n objectA: T,\n objectB: R,\n options?: {\n customEqual?: <T>(a: T, b: T) => boolean\n },\n): boolean => {\n // @ts-ignore\n if (objectA === objectB) {\n return true\n }\n if (typeof objectA !== `object` || objectA === null) {\n return false\n }\n if (typeof objectB !== `object` || objectB === null) {\n return false\n }\n\n const keysA = Object.keys(objectA)\n const keysB = Object.keys(objectB)\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n const isEqual = options && typeof options.customEqual === `function` ? options.customEqual : is\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i] || ``\n // @ts-ignore\n if (!hasOwn.call(objectB, key) || !isEqual(objectA[key], objectB[key])) {\n return false\n }\n }\n\n return true\n}\n\nexport const groupBy = <T, K extends keyof any>(list: T[], getKey: (item: T) => K) =>\n list.reduce(\n (previous, currentItem) => {\n const group = getKey(currentItem)\n if (!previous[group]) previous[group] = []\n previous[group].push(currentItem)\n return previous\n },\n {} as Record<K, T[]>,\n )\n\nexport function shallowMergeIfDefined<T, U>(obj1: T, obj2: U): T & U {\n const result = { ...obj1 } as T & U\n\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const value = (obj2 as any)[key]\n // @ts-ignore\n if (value !== undefined || !(key in obj1)) {\n ;(result as any)[key] = value\n }\n }\n }\n\n return result\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nconst ROOT_NAMESPACE = `@prose-reader`\n\ndeclare global {\n interface Window {\n __PROSE_READER_DEBUG?: boolean\n }\n}\n\nconst wrap = (str: string) => `[${str}]`\n\nconst createReport = (namespace?: string, enabled?: boolean) => {\n return {\n debug:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`)),\n info:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`)),\n error:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`)),\n }\n}\n\nexport const Report = {\n ...createReport(),\n namespace: (namespace: string, enabled?: boolean) => createReport(namespace, enabled),\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) => a.length === b.length && a.every((v, i) => v === b[i])\n"],"names":["getUrlExtension","url","_a","_b","normalize","strArray","resultArray","i","component","str","parts","urlJoin","args","detectMimeTypeFromName","name","isXmlBasedMimeType","mimeType","uri","_mimeType","parseContentType","PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME","hasOwn","is","x","y","isShallowEqual","objectA","objectB","options","keysA","keysB","isEqual","key","groupBy","list","getKey","previous","currentItem","group","shallowMergeIfDefined","obj1","obj2","result","value","ROOT_NAMESPACE","wrap","createReport","namespace","enabled","Report","arrayEqual","a","b","v"],"mappings":"AAAa,MAAAA,IAAkB,CAACC,MAAgB;AAAnC,MAAAC,GAAAC;AACX,WAAOA,KAAAD,IAAAD,EAAI,MAAM,MAAM,EAAE,CAAC,MAAnB,gBAAAC,EAAsB,MAAM,KAAK,UAAjC,gBAAAC,EAAwC,WAAU;AAC3D;AAEA,SAASC,EAAUC,GAAoB;AACrC,QAAMC,IAAc,CAAC;AACjB,MAAAD,EAAS,WAAW;AACf,WAAA;AAGT,MAAI,OAAOA,EAAS,CAAC,KAAM;AACzB,UAAM,IAAI,UAAU,oCAAoCA,EAAS,CAAC,CAAC;AAIjE,EAAAA,EAAS,CAAC,EAAE,MAAM,cAAc,KAAKA,EAAS,SAAS,MACzDA,EAAS,CAAC,IAAIA,EAAS,MAAM,IAAIA,EAAS,CAAC,IAIzCA,EAAS,CAAC,EAAE,MAAM,cAAc,IAClCA,EAAS,CAAC,IAAIA,EAAS,CAAC,EAAE,QAAQ,iBAAiB,QAAQ,IAE3DA,EAAS,CAAC,IAAIA,EAAS,CAAC,EAAE,QAAQ,iBAAiB,OAAO;AAG5D,WAASE,IAAI,GAAGA,IAAIF,EAAS,QAAQE,KAAK;AACpC,QAAAC,IAAYH,EAASE,CAAC;AAEtB,QAAA,OAAOC,KAAc;AACjB,YAAA,IAAI,UAAU,oCAAoCA,CAAS;AAGnE,IAAIA,MAAc,OAIdD,IAAI,MAEMC,IAAAA,EAAU,QAAQ,SAAS,EAAE,IAEvCD,IAAIF,EAAS,SAAS,IAEZG,IAAAA,EAAU,QAAQ,SAAS,EAAE,IAG7BA,IAAAA,EAAU,QAAQ,SAAS,GAAG,GAG5CF,EAAY,KAAKE,CAAS;AAAA,EAAA;AAGxB,MAAAC,IAAMH,EAAY,KAAK,GAAG;AAIxB,EAAAG,IAAAA,EAAI,QAAQ,mBAAmB,IAAI;AAGnC,QAAAC,IAAQD,EAAI,MAAM,GAAG;AACrB,SAAAA,IAAAC,EAAM,MAAM,KAAKA,EAAM,SAAS,IAAI,MAAM,MAAMA,EAAM,KAAK,GAAG,GAE7DD;AACT;AAEO,SAASE,KAAWC,GAA6B;AACtD,QAAMF,IAAQ,MAAM,KAAK,MAAM,QAAQE,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,IAAIA,CAAI;AAEhE,SAAOR,EAAUM,CAAK;AACxB;ACnEa,MAAAG,IAAyB,CAACC,MAAiB;AAGtD,UAFkBd,EAAgBc,CAAI,GAEnB;AAAA,IACjB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,EAAA;AAIb,GAEaC,IAAqB,CAAC,EAAE,UAAAC,GAAU,KAAAC,QAA+C;AAC5F,QAAMC,IAAYF,KAAYH,EAAuBI,KAAO,EAAE;AAEvD,SAAAC,KAAA,gBAAAA,EAAW,WAAW;AAC/B,GAEaC,IAAmB,CAACV,MAC1BA,EAAI,SAEGA,EAAI,QAAQ,GAAG,IAEdA,EAAI,UAAU,GAAGA,EAAI,QAAQ,GAAG,CAAC,IAAIA,IAJ1B,QC9BbW,IAAiD,+BCGxDC,IAAS,OAAO,UAAU,gBAGnBC,IAAK,CAACC,GAAQC,MACrBD,MAAMC,IACDD,MAAM,KAAKC,MAAM,KAAK,IAAID,MAAM,IAAIC,IAEpC,IAeEC,IAAiB,CAC5BC,GACAC,GACAC,MAGY;AAEZ,MAAIF,MAAYC;AACP,WAAA;AAKT,MAHI,OAAOD,KAAY,YAAYA,MAAY,QAG3C,OAAOC,KAAY,YAAYA,MAAY;AACtC,WAAA;AAGH,QAAAE,IAAQ,OAAO,KAAKH,CAAO,GAC3BI,IAAQ,OAAO,KAAKH,CAAO;AAE7B,MAAAE,EAAM,WAAWC,EAAM;AAClB,WAAA;AAGT,QAAMC,IAAUH,KAAW,OAAOA,EAAQ,eAAgB,aAAaA,EAAQ,cAAcN;AAE7F,WAASf,IAAI,GAAGA,IAAIsB,EAAM,QAAQtB,KAAK;AAC/B,UAAAyB,IAAMH,EAAMtB,CAAC,KAAK;AAExB,QAAI,CAACc,EAAO,KAAKM,GAASK,CAAG,KAAK,CAACD,EAAQL,EAAQM,CAAG,GAAGL,EAAQK,CAAG,CAAC;AAC5D,aAAA;AAAA,EACT;AAGK,SAAA;AACT,GAEaC,IAAU,CAAyBC,GAAWC,MACzDD,EAAK;AAAA,EACH,CAACE,GAAUC,MAAgB;AACnB,UAAAC,IAAQH,EAAOE,CAAW;AAChC,WAAKD,EAASE,CAAK,MAAYF,EAAAE,CAAK,IAAI,CAAC,IAChCF,EAAAE,CAAK,EAAE,KAAKD,CAAW,GACzBD;AAAA,EACT;AAAA,EACA,CAAA;AACF;AAEc,SAAAG,EAA4BC,GAASC,GAAgB;AAC7D,QAAAC,IAAS,EAAE,GAAGF,EAAK;AAEzB,aAAWR,KAAOS;AAChB,QAAI,OAAO,UAAU,eAAe,KAAKA,GAAMT,CAAG,GAAG;AAC7C,YAAAW,IAASF,EAAaT,CAAG;AAE/B,OAAIW,MAAU,UAAa,EAAEX,KAAOQ,QAChCE,EAAeV,CAAG,IAAIW;AAAA,IAC1B;AAIG,SAAAD;AACT;ACvFA,MAAME,IAAiB,iBAQjBC,IAAO,CAACpC,MAAgB,IAAIA,CAAG,KAE/BqC,IAAe,CAACC,GAAoBC,OACjC;AAAA,EACL,OACE,CAACA,MAAW,iCAAQ,0BAAyB,KACzC,MAAM;AAAA,EACN,IAAAD,IACE,SAAS,UAAU,KAAK,KAAK,QAAQ,OAAO,SAASF,EAAK,GAAGD,CAAc,EAAE,GAAGC,EAAKE,CAAS,CAAC,IAC/F,SAAS,UAAU,KAAK,KAAK,QAAQ,OAAO,SAASF,EAAK,GAAGD,CAAc,EAAE,CAAC;AAAA,EACtF,MACE,CAACI,MAAW,iCAAQ,0BAAyB,KACzC,MAAM;AAAA,EACN,IAAAD,IACE,SAAS,UAAU,KAAK,KAAK,QAAQ,MAAM,SAASF,EAAK,GAAGD,CAAc,EAAE,GAAGC,EAAKE,CAAS,CAAC,IAC9F,SAAS,UAAU,KAAK,KAAK,QAAQ,MAAM,SAASF,EAAK,GAAGD,CAAc,EAAE,CAAC;AAAA,EACrF,OACE,CAACI,MAAW,iCAAQ,0BAAyB,KACzC,MAAM;AAAA,EACN,IAAAD,IACE,SAAS,UAAU,KAAK,KAAK,QAAQ,OAAO,SAASF,EAAK,GAAGD,CAAc,EAAE,GAAGC,EAAKE,CAAS,CAAC,IAC/F,SAAS,UAAU,KAAK,KAAK,QAAQ,OAAO,SAASF,EAAK,GAAGD,CAAc,EAAE,CAAC;AACxF,IAGWK,IAAS;AAAA,EACpB,GAAGH,EAAa;AAAA,EAChB,WAAW,CAACC,GAAmBC,MAAsBF,EAAaC,GAAWC,CAAO;AACtF,GCpCaE,IAAa,CAAmCC,GAAMC,MAASD,EAAE,WAAWC,EAAE,UAAUD,EAAE,MAAM,CAACE,GAAG9C,MAAM8C,MAAMD,EAAE7C,CAAC,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../src/url.ts","../src/contentType.ts","../src/resources.ts","../src/objects.ts","../src/report.ts","../src/array.ts"],"sourcesContent":["export const getUrlExtension = (url: string) => {\n return url.split(/[#?]/)[0]?.split(`.`).pop()?.trim() || ``\n}\n\nfunction normalize(strArray: string[]) {\n const resultArray = []\n if (strArray.length === 0) {\n return \"\"\n }\n\n if (typeof strArray[0] !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + strArray[0])\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n strArray[0] = strArray.shift() + strArray[0]\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1:///\")\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1://\")\n }\n\n for (let i = 0; i < strArray.length; i++) {\n let component = strArray[i]\n\n if (typeof component !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + component)\n }\n\n if (component === \"\") {\n continue\n }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[/]+/, \"\")\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[/]+$/, \"\")\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[/]+$/, \"/\")\n }\n\n resultArray.push(component)\n }\n\n let str = resultArray.join(\"/\")\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, \"$1\")\n\n // replace ? in parameters with &\n const parts = str.split(\"?\")\n str = parts.shift() + (parts.length > 0 ? \"?\" : \"\") + parts.join(\"&\")\n\n return str\n}\n\nexport function urlJoin(...args: (string | string[])[]) {\n const parts = Array.from(Array.isArray(args[0]) ? args[0] : args) as string[]\n\n return normalize(parts)\n}\n\nexport function getParentPath(uri: string): string {\n const parts = uri.split(\"/\")\n\n parts.pop() // Remove the last segment\n\n return parts.join(\"/\")\n}\n","import { getUrlExtension } from \"./url\"\n\nexport const detectMimeTypeFromName = (name: string) => {\n const extension = getUrlExtension(name)\n\n switch (extension) {\n case `png`:\n return `image/png`\n case `jpg`:\n return `image/jpg`\n case `jpeg`:\n return `image/jpeg`\n case `txt`:\n return `text/plain`\n case `webp`:\n return `image/webp`\n case `xhtml`:\n return `application/xhtml+xml`\n }\n\n return undefined\n}\n\nexport const isXmlBasedMimeType = ({ mimeType, uri }: { uri?: string; mimeType?: string }) => {\n const _mimeType = mimeType ?? detectMimeTypeFromName(uri ?? \"\")\n\n return _mimeType?.startsWith(`application/xhtml+xml`)\n}\n\nexport const parseContentType = (str: string) => {\n if (!str.length) return undefined\n\n const cut = str.indexOf(`;`)\n\n return cut ? str.substring(0, str.indexOf(`;`)) : str\n}\n","export const PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME = \"prose-reader-resource-error\"\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// MIT © 2017 azu\nconst hasOwn = Object.prototype.hasOwnProperty\n\n// Object.is polyfill\nexport const is = (x: any, y: any): boolean => {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y\n } else {\n return false\n }\n}\n\n/**\n * Return true, if `objectA` is shallow equal to `objectB`.\n * Pass Custom equality function to `customEqual`.\n * Default equality is `Object.is`\n * Support Array\n *\n * Options:\n *\n * - `customEqual`: function should return true if the `a` value is equal to `b` value.\n * - `debug`: enable debug info to console log. This log will be disable in production build\n */\nexport const isShallowEqual = <T = any, R = any>(\n objectA: T,\n objectB: R,\n options?: {\n customEqual?: <T>(a: T, b: T) => boolean\n },\n): boolean => {\n // @ts-ignore\n if (objectA === objectB) {\n return true\n }\n if (typeof objectA !== `object` || objectA === null) {\n return false\n }\n if (typeof objectB !== `object` || objectB === null) {\n return false\n }\n\n const keysA = Object.keys(objectA)\n const keysB = Object.keys(objectB)\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n const isEqual = options && typeof options.customEqual === `function` ? options.customEqual : is\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i] || ``\n // @ts-ignore\n if (!hasOwn.call(objectB, key) || !isEqual(objectA[key], objectB[key])) {\n return false\n }\n }\n\n return true\n}\n\nexport const groupBy = <T, K extends keyof any>(list: T[], getKey: (item: T) => K) =>\n list.reduce(\n (previous, currentItem) => {\n const group = getKey(currentItem)\n if (!previous[group]) previous[group] = []\n previous[group].push(currentItem)\n return previous\n },\n {} as Record<K, T[]>,\n )\n\nexport function shallowMergeIfDefined<T, U>(obj1: T, obj2: U): T & U {\n const result = { ...obj1 } as T & U\n\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const value = (obj2 as any)[key]\n // @ts-ignore\n if (value !== undefined || !(key in obj1)) {\n ;(result as any)[key] = value\n }\n }\n }\n\n return result\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nconst ROOT_NAMESPACE = `@prose-reader`\n\ndeclare global {\n interface Window {\n __PROSE_READER_DEBUG?: boolean\n }\n}\n\nconst wrap = (str: string) => `[${str}]`\n\nconst createReport = (namespace?: string, enabled?: boolean) => {\n return {\n debug:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`)),\n info:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`)),\n error:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`)),\n }\n}\n\nexport const Report = {\n ...createReport(),\n namespace: (namespace: string, enabled?: boolean) => createReport(namespace, enabled),\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) => a.length === b.length && a.every((v, i) => v === b[i])\n"],"names":["getUrlExtension","url","_a","_b","normalize","strArray","resultArray","i","component","str","parts","urlJoin","args","getParentPath","uri","detectMimeTypeFromName","name","isXmlBasedMimeType","mimeType","_mimeType","parseContentType","PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME","hasOwn","is","x","y","isShallowEqual","objectA","objectB","options","keysA","keysB","isEqual","key","groupBy","list","getKey","previous","currentItem","group","shallowMergeIfDefined","obj1","obj2","result","value","ROOT_NAMESPACE","wrap","createReport","namespace","enabled","Report","arrayEqual","a","b","v"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- (function(o,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(o=typeof globalThis<"u"?globalThis:o||self,u(o["prose-shared"]={}))})(this,function(o){"use strict";const u=e=>{var n,t;return((t=(n=e.split(/[#?]/)[0])==null?void 0:n.split(".").pop())==null?void 0:t.trim())||""};function g(e){const n=[];if(e.length===0)return"";if(typeof e[0]!="string")throw new TypeError("Url must be a string. Received "+e[0]);e[0].match(/^[^/:]+:\/*$/)&&e.length>1&&(e[0]=e.shift()+e[0]),e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(let l=0;l<e.length;l++){let r=e[l];if(typeof r!="string")throw new TypeError("Url must be a string. Received "+r);r!==""&&(l>0&&(r=r.replace(/^[/]+/,"")),l<e.length-1?r=r.replace(/[/]+$/,""):r=r.replace(/[/]+$/,"/"),n.push(r))}let t=n.join("/");t=t.replace(/\/(\?|&|#[^!])/g,"$1");const i=t.split("?");return t=i.shift()+(i.length>0?"?":"")+i.join("&"),t}function h(...e){const n=Array.from(Array.isArray(e[0])?e[0]:e);return g(n)}const a=e=>{switch(u(e)){case"png":return"image/png";case"jpg":return"image/jpg";case"jpeg":return"image/jpeg";case"txt":return"text/plain";case"webp":return"image/webp";case"xhtml":return"application/xhtml+xml"}},R=({mimeType:e,uri:n})=>{const t=e??a(n??"");return t==null?void 0:t.startsWith("application/xhtml+xml")},m=e=>e.length?e.indexOf(";")?e.substring(0,e.indexOf(";")):e:void 0,y="prose-reader-resource-error",_=Object.prototype.hasOwnProperty,E=(e,n)=>e===n?e!==0||n!==0||1/e===1/n:!1,w=(e,n,t)=>{if(e===n)return!0;if(typeof e!="object"||e===null||typeof n!="object"||n===null)return!1;const i=Object.keys(e),l=Object.keys(n);if(i.length!==l.length)return!1;const r=t&&typeof t.customEqual=="function"?t.customEqual:E;for(let f=0;f<i.length;f++){const p=i[f]||"";if(!_.call(n,p)||!r(e[p],n[p]))return!1}return!0},O=(e,n)=>e.reduce((t,i)=>{const l=n(i);return t[l]||(t[l]=[]),t[l].push(i),t},{});function T(e,n){const t={...e};for(const i in n)if(Object.prototype.hasOwnProperty.call(n,i)){const l=n[i];(l!==void 0||!(i in e))&&(t[i]=l)}return t}const s="@prose-reader",c=e=>`[${e}]`,d=(e,n)=>({debug:!n||(window==null?void 0:window.__PROSE_READER_DEBUG)!==!0?()=>{}:e?Function.prototype.bind.call(console.debug,console,c(`${s}`),c(e)):Function.prototype.bind.call(console.debug,console,c(`${s}`)),info:!n||(window==null?void 0:window.__PROSE_READER_DEBUG)!==!0?()=>{}:e?Function.prototype.bind.call(console.info,console,c(`${s}`),c(e)):Function.prototype.bind.call(console.info,console,c(`${s}`)),error:!n||(window==null?void 0:window.__PROSE_READER_DEBUG)!==!0?()=>{}:e?Function.prototype.bind.call(console.error,console,c(`${s}`),c(e)):Function.prototype.bind.call(console.error,console,c(`${s}`))}),$={...d(),namespace:(e,n)=>d(e,n)},D=(e,n)=>e.length===n.length&&e.every((t,i)=>t===n[i]);o.PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME=y,o.Report=$,o.arrayEqual=D,o.detectMimeTypeFromName=a,o.getUrlExtension=u,o.groupBy=O,o.is=E,o.isShallowEqual=w,o.isXmlBasedMimeType=R,o.parseContentType=m,o.shallowMergeIfDefined=T,o.urlJoin=h,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
1
+ (function(o,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(o=typeof globalThis<"u"?globalThis:o||self,u(o["prose-shared"]={}))})(this,function(o){"use strict";const u=e=>{var n,t;return((t=(n=e.split(/[#?]/)[0])==null?void 0:n.split(".").pop())==null?void 0:t.trim())||""};function d(e){const n=[];if(e.length===0)return"";if(typeof e[0]!="string")throw new TypeError("Url must be a string. Received "+e[0]);e[0].match(/^[^/:]+:\/*$/)&&e.length>1&&(e[0]=e.shift()+e[0]),e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(let l=0;l<e.length;l++){let r=e[l];if(typeof r!="string")throw new TypeError("Url must be a string. Received "+r);r!==""&&(l>0&&(r=r.replace(/^[/]+/,"")),l<e.length-1?r=r.replace(/[/]+$/,""):r=r.replace(/[/]+$/,"/"),n.push(r))}let t=n.join("/");t=t.replace(/\/(\?|&|#[^!])/g,"$1");const i=t.split("?");return t=i.shift()+(i.length>0?"?":"")+i.join("&"),t}function h(...e){const n=Array.from(Array.isArray(e[0])?e[0]:e);return d(n)}function R(e){const n=e.split("/");return n.pop(),n.join("/")}const a=e=>{switch(u(e)){case"png":return"image/png";case"jpg":return"image/jpg";case"jpeg":return"image/jpeg";case"txt":return"text/plain";case"webp":return"image/webp";case"xhtml":return"application/xhtml+xml"}},m=({mimeType:e,uri:n})=>{const t=e??a(n??"");return t==null?void 0:t.startsWith("application/xhtml+xml")},y=e=>e.length?e.indexOf(";")?e.substring(0,e.indexOf(";")):e:void 0,_="prose-reader-resource-error",w=Object.prototype.hasOwnProperty,E=(e,n)=>e===n?e!==0||n!==0||1/e===1/n:!1,O=(e,n,t)=>{if(e===n)return!0;if(typeof e!="object"||e===null||typeof n!="object"||n===null)return!1;const i=Object.keys(e),l=Object.keys(n);if(i.length!==l.length)return!1;const r=t&&typeof t.customEqual=="function"?t.customEqual:E;for(let f=0;f<i.length;f++){const p=i[f]||"";if(!w.call(n,p)||!r(e[p],n[p]))return!1}return!0},T=(e,n)=>e.reduce((t,i)=>{const l=n(i);return t[l]||(t[l]=[]),t[l].push(i),t},{});function P(e,n){const t={...e};for(const i in n)if(Object.prototype.hasOwnProperty.call(n,i)){const l=n[i];(l!==void 0||!(i in e))&&(t[i]=l)}return t}const s="@prose-reader",c=e=>`[${e}]`,g=(e,n)=>({debug:!n||(window==null?void 0:window.__PROSE_READER_DEBUG)!==!0?()=>{}:e?Function.prototype.bind.call(console.debug,console,c(`${s}`),c(e)):Function.prototype.bind.call(console.debug,console,c(`${s}`)),info:!n||(window==null?void 0:window.__PROSE_READER_DEBUG)!==!0?()=>{}:e?Function.prototype.bind.call(console.info,console,c(`${s}`),c(e)):Function.prototype.bind.call(console.info,console,c(`${s}`)),error:!n||(window==null?void 0:window.__PROSE_READER_DEBUG)!==!0?()=>{}:e?Function.prototype.bind.call(console.error,console,c(`${s}`),c(e)):Function.prototype.bind.call(console.error,console,c(`${s}`))}),$={...g(),namespace:(e,n)=>g(e,n)},D=(e,n)=>e.length===n.length&&e.every((t,i)=>t===n[i]);o.PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME=_,o.Report=$,o.arrayEqual=D,o.detectMimeTypeFromName=a,o.getParentPath=R,o.getUrlExtension=u,o.groupBy=T,o.is=E,o.isShallowEqual=O,o.isXmlBasedMimeType=m,o.parseContentType=y,o.shallowMergeIfDefined=P,o.urlJoin=h,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=index.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.cjs","sources":["../src/url.ts","../src/contentType.ts","../src/resources.ts","../src/objects.ts","../src/report.ts","../src/array.ts"],"sourcesContent":["export const getUrlExtension = (url: string) => {\n return url.split(/[#?]/)[0]?.split(`.`).pop()?.trim() || ``\n}\n\nfunction normalize(strArray: string[]) {\n const resultArray = []\n if (strArray.length === 0) {\n return \"\"\n }\n\n if (typeof strArray[0] !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + strArray[0])\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n strArray[0] = strArray.shift() + strArray[0]\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1:///\")\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1://\")\n }\n\n for (let i = 0; i < strArray.length; i++) {\n let component = strArray[i]\n\n if (typeof component !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + component)\n }\n\n if (component === \"\") {\n continue\n }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[/]+/, \"\")\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[/]+$/, \"\")\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[/]+$/, \"/\")\n }\n\n resultArray.push(component)\n }\n\n let str = resultArray.join(\"/\")\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, \"$1\")\n\n // replace ? in parameters with &\n const parts = str.split(\"?\")\n str = parts.shift() + (parts.length > 0 ? \"?\" : \"\") + parts.join(\"&\")\n\n return str\n}\n\nexport function urlJoin(...args: (string | string[])[]) {\n const parts = Array.from(Array.isArray(args[0]) ? args[0] : args) as string[]\n\n return normalize(parts)\n}\n","import { getUrlExtension } from \"./url\"\n\nexport const detectMimeTypeFromName = (name: string) => {\n const extension = getUrlExtension(name)\n\n switch (extension) {\n case `png`:\n return `image/png`\n case `jpg`:\n return `image/jpg`\n case `jpeg`:\n return `image/jpeg`\n case `txt`:\n return `text/plain`\n case `webp`:\n return `image/webp`\n case `xhtml`:\n return `application/xhtml+xml`\n }\n\n return undefined\n}\n\nexport const isXmlBasedMimeType = ({ mimeType, uri }: { uri?: string; mimeType?: string }) => {\n const _mimeType = mimeType ?? detectMimeTypeFromName(uri ?? \"\")\n\n return _mimeType?.startsWith(`application/xhtml+xml`)\n}\n\nexport const parseContentType = (str: string) => {\n if (!str.length) return undefined\n\n const cut = str.indexOf(`;`)\n\n return cut ? str.substring(0, str.indexOf(`;`)) : str\n}\n","export const PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME = \"prose-reader-resource-error\"\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// MIT © 2017 azu\nconst hasOwn = Object.prototype.hasOwnProperty\n\n// Object.is polyfill\nexport const is = (x: any, y: any): boolean => {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y\n } else {\n return false\n }\n}\n\n/**\n * Return true, if `objectA` is shallow equal to `objectB`.\n * Pass Custom equality function to `customEqual`.\n * Default equality is `Object.is`\n * Support Array\n *\n * Options:\n *\n * - `customEqual`: function should return true if the `a` value is equal to `b` value.\n * - `debug`: enable debug info to console log. This log will be disable in production build\n */\nexport const isShallowEqual = <T = any, R = any>(\n objectA: T,\n objectB: R,\n options?: {\n customEqual?: <T>(a: T, b: T) => boolean\n },\n): boolean => {\n // @ts-ignore\n if (objectA === objectB) {\n return true\n }\n if (typeof objectA !== `object` || objectA === null) {\n return false\n }\n if (typeof objectB !== `object` || objectB === null) {\n return false\n }\n\n const keysA = Object.keys(objectA)\n const keysB = Object.keys(objectB)\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n const isEqual = options && typeof options.customEqual === `function` ? options.customEqual : is\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i] || ``\n // @ts-ignore\n if (!hasOwn.call(objectB, key) || !isEqual(objectA[key], objectB[key])) {\n return false\n }\n }\n\n return true\n}\n\nexport const groupBy = <T, K extends keyof any>(list: T[], getKey: (item: T) => K) =>\n list.reduce(\n (previous, currentItem) => {\n const group = getKey(currentItem)\n if (!previous[group]) previous[group] = []\n previous[group].push(currentItem)\n return previous\n },\n {} as Record<K, T[]>,\n )\n\nexport function shallowMergeIfDefined<T, U>(obj1: T, obj2: U): T & U {\n const result = { ...obj1 } as T & U\n\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const value = (obj2 as any)[key]\n // @ts-ignore\n if (value !== undefined || !(key in obj1)) {\n ;(result as any)[key] = value\n }\n }\n }\n\n return result\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nconst ROOT_NAMESPACE = `@prose-reader`\n\ndeclare global {\n interface Window {\n __PROSE_READER_DEBUG?: boolean\n }\n}\n\nconst wrap = (str: string) => `[${str}]`\n\nconst createReport = (namespace?: string, enabled?: boolean) => {\n return {\n debug:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`)),\n info:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`)),\n error:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`)),\n }\n}\n\nexport const Report = {\n ...createReport(),\n namespace: (namespace: string, enabled?: boolean) => createReport(namespace, enabled),\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) => a.length === b.length && a.every((v, i) => v === b[i])\n"],"names":["getUrlExtension","url","_b","_a","normalize","strArray","resultArray","i","component","str","parts","urlJoin","args","detectMimeTypeFromName","name","isXmlBasedMimeType","mimeType","uri","_mimeType","parseContentType","PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME","hasOwn","is","x","y","isShallowEqual","objectA","objectB","options","keysA","keysB","isEqual","key","groupBy","list","getKey","previous","currentItem","group","shallowMergeIfDefined","obj1","obj2","result","value","ROOT_NAMESPACE","wrap","createReport","namespace","enabled","Report","arrayEqual","a","b","v"],"mappings":"uOAAa,MAAAA,EAAmBC,GAAgB,SAC9C,QAAOC,GAAAC,EAAAF,EAAI,MAAM,MAAM,EAAE,CAAC,IAAnB,YAAAE,EAAsB,MAAM,KAAK,QAAjC,YAAAD,EAAwC,SAAU,EAC3D,EAEA,SAASE,EAAUC,EAAoB,CACrC,MAAMC,EAAc,CAAC,EACjB,GAAAD,EAAS,SAAW,EACf,MAAA,GAGT,GAAI,OAAOA,EAAS,CAAC,GAAM,SACzB,MAAM,IAAI,UAAU,kCAAoCA,EAAS,CAAC,CAAC,EAIjEA,EAAS,CAAC,EAAE,MAAM,cAAc,GAAKA,EAAS,OAAS,IACzDA,EAAS,CAAC,EAAIA,EAAS,MAAM,EAAIA,EAAS,CAAC,GAIzCA,EAAS,CAAC,EAAE,MAAM,cAAc,EAClCA,EAAS,CAAC,EAAIA,EAAS,CAAC,EAAE,QAAQ,gBAAiB,QAAQ,EAE3DA,EAAS,CAAC,EAAIA,EAAS,CAAC,EAAE,QAAQ,gBAAiB,OAAO,EAG5D,QAASE,EAAI,EAAGA,EAAIF,EAAS,OAAQE,IAAK,CACpC,IAAAC,EAAYH,EAASE,CAAC,EAEtB,GAAA,OAAOC,GAAc,SACjB,MAAA,IAAI,UAAU,kCAAoCA,CAAS,EAG/DA,IAAc,KAIdD,EAAI,IAEMC,EAAAA,EAAU,QAAQ,QAAS,EAAE,GAEvCD,EAAIF,EAAS,OAAS,EAEZG,EAAAA,EAAU,QAAQ,QAAS,EAAE,EAG7BA,EAAAA,EAAU,QAAQ,QAAS,GAAG,EAG5CF,EAAY,KAAKE,CAAS,EAAA,CAGxB,IAAAC,EAAMH,EAAY,KAAK,GAAG,EAIxBG,EAAAA,EAAI,QAAQ,kBAAmB,IAAI,EAGnC,MAAAC,EAAQD,EAAI,MAAM,GAAG,EACrB,OAAAA,EAAAC,EAAM,MAAM,GAAKA,EAAM,OAAS,EAAI,IAAM,IAAMA,EAAM,KAAK,GAAG,EAE7DD,CACT,CAEO,SAASE,KAAWC,EAA6B,CACtD,MAAMF,EAAQ,MAAM,KAAK,MAAM,QAAQE,EAAK,CAAC,CAAC,EAAIA,EAAK,CAAC,EAAIA,CAAI,EAEhE,OAAOR,EAAUM,CAAK,CACxB,CCnEa,MAAAG,EAA0BC,GAAiB,CAGtD,OAFkBd,EAAgBc,CAAI,EAEnB,CACjB,IAAK,MACI,MAAA,YACT,IAAK,MACI,MAAA,YACT,IAAK,OACI,MAAA,aACT,IAAK,MACI,MAAA,aACT,IAAK,OACI,MAAA,aACT,IAAK,QACI,MAAA,uBAAA,CAIb,EAEaC,EAAqB,CAAC,CAAE,SAAAC,EAAU,IAAAC,KAA+C,CAC5F,MAAMC,EAAYF,GAAYH,EAAuBI,GAAO,EAAE,EAEvD,OAAAC,GAAA,YAAAA,EAAW,WAAW,wBAC/B,EAEaC,EAAoBV,GAC1BA,EAAI,OAEGA,EAAI,QAAQ,GAAG,EAEdA,EAAI,UAAU,EAAGA,EAAI,QAAQ,GAAG,CAAC,EAAIA,EAJ1B,OC9BbW,EAAiD,8BCGxDC,EAAS,OAAO,UAAU,eAGnBC,EAAK,CAACC,EAAQC,IACrBD,IAAMC,EACDD,IAAM,GAAKC,IAAM,GAAK,EAAID,IAAM,EAAIC,EAEpC,GAeEC,EAAiB,CAC5BC,EACAC,EACAC,IAGY,CAEZ,GAAIF,IAAYC,EACP,MAAA,GAKT,GAHI,OAAOD,GAAY,UAAYA,IAAY,MAG3C,OAAOC,GAAY,UAAYA,IAAY,KACtC,MAAA,GAGH,MAAAE,EAAQ,OAAO,KAAKH,CAAO,EAC3BI,EAAQ,OAAO,KAAKH,CAAO,EAE7B,GAAAE,EAAM,SAAWC,EAAM,OAClB,MAAA,GAGT,MAAMC,EAAUH,GAAW,OAAOA,EAAQ,aAAgB,WAAaA,EAAQ,YAAcN,EAE7F,QAASf,EAAI,EAAGA,EAAIsB,EAAM,OAAQtB,IAAK,CAC/B,MAAAyB,EAAMH,EAAMtB,CAAC,GAAK,GAExB,GAAI,CAACc,EAAO,KAAKM,EAASK,CAAG,GAAK,CAACD,EAAQL,EAAQM,CAAG,EAAGL,EAAQK,CAAG,CAAC,EAC5D,MAAA,EACT,CAGK,MAAA,EACT,EAEaC,EAAU,CAAyBC,EAAWC,IACzDD,EAAK,OACH,CAACE,EAAUC,IAAgB,CACnB,MAAAC,EAAQH,EAAOE,CAAW,EAChC,OAAKD,EAASE,CAAK,IAAYF,EAAAE,CAAK,EAAI,CAAC,GAChCF,EAAAE,CAAK,EAAE,KAAKD,CAAW,EACzBD,CACT,EACA,CAAA,CACF,EAEc,SAAAG,EAA4BC,EAASC,EAAgB,CAC7D,MAAAC,EAAS,CAAE,GAAGF,CAAK,EAEzB,UAAWR,KAAOS,EAChB,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAMT,CAAG,EAAG,CAC7C,MAAAW,EAASF,EAAaT,CAAG,GAE3BW,IAAU,QAAa,EAAEX,KAAOQ,MAChCE,EAAeV,CAAG,EAAIW,EAC1B,CAIG,OAAAD,CACT,CCvFA,MAAME,EAAiB,gBAQjBC,EAAQpC,GAAgB,IAAIA,CAAG,IAE/BqC,EAAe,CAACC,EAAoBC,KACjC,CACL,MACE,CAACA,IAAW,2BAAQ,wBAAyB,GACzC,IAAM,CACN,EAAAD,EACE,SAAS,UAAU,KAAK,KAAK,QAAQ,MAAO,QAASF,EAAK,GAAGD,CAAc,EAAE,EAAGC,EAAKE,CAAS,CAAC,EAC/F,SAAS,UAAU,KAAK,KAAK,QAAQ,MAAO,QAASF,EAAK,GAAGD,CAAc,EAAE,CAAC,EACtF,KACE,CAACI,IAAW,2BAAQ,wBAAyB,GACzC,IAAM,CACN,EAAAD,EACE,SAAS,UAAU,KAAK,KAAK,QAAQ,KAAM,QAASF,EAAK,GAAGD,CAAc,EAAE,EAAGC,EAAKE,CAAS,CAAC,EAC9F,SAAS,UAAU,KAAK,KAAK,QAAQ,KAAM,QAASF,EAAK,GAAGD,CAAc,EAAE,CAAC,EACrF,MACE,CAACI,IAAW,2BAAQ,wBAAyB,GACzC,IAAM,CACN,EAAAD,EACE,SAAS,UAAU,KAAK,KAAK,QAAQ,MAAO,QAASF,EAAK,GAAGD,CAAc,EAAE,EAAGC,EAAKE,CAAS,CAAC,EAC/F,SAAS,UAAU,KAAK,KAAK,QAAQ,MAAO,QAASF,EAAK,GAAGD,CAAc,EAAE,CAAC,CACxF,GAGWK,EAAS,CACpB,GAAGH,EAAa,EAChB,UAAW,CAACC,EAAmBC,IAAsBF,EAAaC,EAAWC,CAAO,CACtF,ECpCaE,EAAa,CAAmCC,EAAMC,IAASD,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAM,CAACE,EAAG,IAAMA,IAAMD,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"index.umd.cjs","sources":["../src/url.ts","../src/contentType.ts","../src/resources.ts","../src/objects.ts","../src/report.ts","../src/array.ts"],"sourcesContent":["export const getUrlExtension = (url: string) => {\n return url.split(/[#?]/)[0]?.split(`.`).pop()?.trim() || ``\n}\n\nfunction normalize(strArray: string[]) {\n const resultArray = []\n if (strArray.length === 0) {\n return \"\"\n }\n\n if (typeof strArray[0] !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + strArray[0])\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n strArray[0] = strArray.shift() + strArray[0]\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1:///\")\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, \"$1://\")\n }\n\n for (let i = 0; i < strArray.length; i++) {\n let component = strArray[i]\n\n if (typeof component !== \"string\") {\n throw new TypeError(\"Url must be a string. Received \" + component)\n }\n\n if (component === \"\") {\n continue\n }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[/]+/, \"\")\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[/]+$/, \"\")\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[/]+$/, \"/\")\n }\n\n resultArray.push(component)\n }\n\n let str = resultArray.join(\"/\")\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, \"$1\")\n\n // replace ? in parameters with &\n const parts = str.split(\"?\")\n str = parts.shift() + (parts.length > 0 ? \"?\" : \"\") + parts.join(\"&\")\n\n return str\n}\n\nexport function urlJoin(...args: (string | string[])[]) {\n const parts = Array.from(Array.isArray(args[0]) ? args[0] : args) as string[]\n\n return normalize(parts)\n}\n\nexport function getParentPath(uri: string): string {\n const parts = uri.split(\"/\")\n\n parts.pop() // Remove the last segment\n\n return parts.join(\"/\")\n}\n","import { getUrlExtension } from \"./url\"\n\nexport const detectMimeTypeFromName = (name: string) => {\n const extension = getUrlExtension(name)\n\n switch (extension) {\n case `png`:\n return `image/png`\n case `jpg`:\n return `image/jpg`\n case `jpeg`:\n return `image/jpeg`\n case `txt`:\n return `text/plain`\n case `webp`:\n return `image/webp`\n case `xhtml`:\n return `application/xhtml+xml`\n }\n\n return undefined\n}\n\nexport const isXmlBasedMimeType = ({ mimeType, uri }: { uri?: string; mimeType?: string }) => {\n const _mimeType = mimeType ?? detectMimeTypeFromName(uri ?? \"\")\n\n return _mimeType?.startsWith(`application/xhtml+xml`)\n}\n\nexport const parseContentType = (str: string) => {\n if (!str.length) return undefined\n\n const cut = str.indexOf(`;`)\n\n return cut ? str.substring(0, str.indexOf(`;`)) : str\n}\n","export const PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME = \"prose-reader-resource-error\"\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// MIT © 2017 azu\nconst hasOwn = Object.prototype.hasOwnProperty\n\n// Object.is polyfill\nexport const is = (x: any, y: any): boolean => {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y\n } else {\n return false\n }\n}\n\n/**\n * Return true, if `objectA` is shallow equal to `objectB`.\n * Pass Custom equality function to `customEqual`.\n * Default equality is `Object.is`\n * Support Array\n *\n * Options:\n *\n * - `customEqual`: function should return true if the `a` value is equal to `b` value.\n * - `debug`: enable debug info to console log. This log will be disable in production build\n */\nexport const isShallowEqual = <T = any, R = any>(\n objectA: T,\n objectB: R,\n options?: {\n customEqual?: <T>(a: T, b: T) => boolean\n },\n): boolean => {\n // @ts-ignore\n if (objectA === objectB) {\n return true\n }\n if (typeof objectA !== `object` || objectA === null) {\n return false\n }\n if (typeof objectB !== `object` || objectB === null) {\n return false\n }\n\n const keysA = Object.keys(objectA)\n const keysB = Object.keys(objectB)\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n const isEqual = options && typeof options.customEqual === `function` ? options.customEqual : is\n\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i] || ``\n // @ts-ignore\n if (!hasOwn.call(objectB, key) || !isEqual(objectA[key], objectB[key])) {\n return false\n }\n }\n\n return true\n}\n\nexport const groupBy = <T, K extends keyof any>(list: T[], getKey: (item: T) => K) =>\n list.reduce(\n (previous, currentItem) => {\n const group = getKey(currentItem)\n if (!previous[group]) previous[group] = []\n previous[group].push(currentItem)\n return previous\n },\n {} as Record<K, T[]>,\n )\n\nexport function shallowMergeIfDefined<T, U>(obj1: T, obj2: U): T & U {\n const result = { ...obj1 } as T & U\n\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const value = (obj2 as any)[key]\n // @ts-ignore\n if (value !== undefined || !(key in obj1)) {\n ;(result as any)[key] = value\n }\n }\n }\n\n return result\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nconst ROOT_NAMESPACE = `@prose-reader`\n\ndeclare global {\n interface Window {\n __PROSE_READER_DEBUG?: boolean\n }\n}\n\nconst wrap = (str: string) => `[${str}]`\n\nconst createReport = (namespace?: string, enabled?: boolean) => {\n return {\n debug:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.debug, console, wrap(`${ROOT_NAMESPACE}`)),\n info:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.info, console, wrap(`${ROOT_NAMESPACE}`)),\n error:\n !enabled || window?.__PROSE_READER_DEBUG !== true\n ? () => {}\n : namespace\n ? Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`), wrap(namespace))\n : Function.prototype.bind.call(console.error, console, wrap(`${ROOT_NAMESPACE}`)),\n }\n}\n\nexport const Report = {\n ...createReport(),\n namespace: (namespace: string, enabled?: boolean) => createReport(namespace, enabled),\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const arrayEqual = <A extends any[], B extends any[]>(a: A, b: B) => a.length === b.length && a.every((v, i) => v === b[i])\n"],"names":["getUrlExtension","url","_b","_a","normalize","strArray","resultArray","i","component","str","parts","urlJoin","args","getParentPath","uri","detectMimeTypeFromName","name","isXmlBasedMimeType","mimeType","_mimeType","parseContentType","PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME","hasOwn","is","x","y","isShallowEqual","objectA","objectB","options","keysA","keysB","isEqual","key","groupBy","list","getKey","previous","currentItem","group","shallowMergeIfDefined","obj1","obj2","result","value","ROOT_NAMESPACE","wrap","createReport","namespace","enabled","Report","arrayEqual","a","b","v"],"mappings":"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"}
package/dist/url.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export declare const getUrlExtension: (url: string) => string;
2
2
  export declare function urlJoin(...args: (string | string[])[]): string;
3
+ export declare function getParentPath(uri: string): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prose-reader/shared",
3
- "version": "1.130.0",
3
+ "version": "1.131.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.umd.cjs",
6
6
  "module": "./dist/index.js",
@@ -22,5 +22,5 @@
22
22
  "build": "tsc && vite build",
23
23
  "test": "vitest run --coverage"
24
24
  },
25
- "gitHead": "f0375b3979a4f56521ddd40e98784e5f20372213"
25
+ "gitHead": "e3d206ef511e3d562ca063bf2a81091ce0c5f065"
26
26
  }