@foxycape/core 1.2.0 → 1.2.1

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.
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./hash.cjs"),t=require("../common/buffer.cjs");var n=()=>{let e=globalThis.crypto||globalThis.msCrypto;return e.subtle||e.webkitSubtle},r=e=>typeof e==`string`?new TextEncoder().encode(e):e,i=(e,t)=>{if(e==null)throw Error(`iv is required for AES`);return typeof e==`string`?new TextEncoder().encode(e.substring(0,t)):e.byteLength>t?e.slice(0,t):e},a=(e,n,r,i=!1)=>{let a=e.trim();if(a.startsWith(`-----`)){if(i&&!a.includes(n))throw Error(`RSA decrypt requires PKCS#8 private key (BEGIN PRIVATE KEY)`);let e=a.indexOf(n);a=a.substring(e>=0?e+n.length:0).trim();let t=a.indexOf(r);a=(t>=0?a.substring(0,t):a).trim()}return t.convertBase64ToArrayBuffer(a)},o=async e=>{let t=typeof e==`string`?a(e,`-----BEGIN PUBLIC KEY-----`,`-----END PUBLIC KEY-----`):e;return await globalThis.crypto.subtle.importKey(`spki`,t,{name:`RSA-OAEP`,hash:`SHA-256`},!0,[`encrypt`])},s=async e=>{let t=typeof e==`string`?a(e,`-----BEGIN PRIVATE KEY-----`,`-----END PRIVATE KEY-----`,!0):e;return await globalThis.crypto.subtle.importKey(`pkcs8`,t,{name:`RSA-OAEP`,hash:`SHA-256`},!0,[`decrypt`])},c=class{async digest(t,n){return e.digestStream(t,n??`SHA-256`)}async encrypt(e,t){let a=n(),{key:s,iv:c,mode:l,algorithm:u}=t;if(!u||u==`aes`){let t=r(s);if(!t||t.byteLength<16||t.byteLength%16>0)throw Error(`key must greater than 16`);let n=typeof e==`string`?new TextEncoder().encode(e):e,o=i(c,t.byteLength),u=l===`CBC`?`AES-CBC`:l,d=await a.importKey(`raw`,t,u,!0,[`encrypt`]);return await a.encrypt({name:u,iv:o},d,n)}{let t=typeof e==`string`?new TextEncoder().encode(e):e,n=await o(s);return await a.encrypt({name:`RSA-OAEP`},n,t)}}async decrypt(e,t){let{key:a,iv:o,mode:c,algorithm:l}=t,u=n();if(!l||l==`aes`){let t=r(a);if(!t||t.byteLength<16||t.byteLength%16>0)throw Error(`key must greater than 16`);let n=i(o,t.byteLength),s=c===`CBC`?`AES-CBC`:c,l=await u.importKey(`raw`,t,s,!0,[`decrypt`]);return await u.decrypt({name:s,iv:n},l,e)}let d=await s(a);return await u.decrypt({name:`RSA-OAEP`},d,e)}};exports.WebCrypto=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../common/buffer.cjs");var t=()=>{let e=globalThis.crypto||globalThis.msCrypto;return e.subtle||e.webkitSubtle},n=e=>typeof e==`string`?new TextEncoder().encode(e):e,r=(e,t)=>{if(e==null)throw Error(`iv is required for AES`);return typeof e==`string`?new TextEncoder().encode(e.substring(0,t)):e.byteLength>t?e.slice(0,t):e},i=(t,n,r,i=!1)=>{let a=t.trim();if(a.startsWith(`-----`)){if(i&&!a.includes(n))throw Error(`RSA decrypt requires PKCS#8 private key (BEGIN PRIVATE KEY)`);let e=a.indexOf(n);a=a.substring(e>=0?e+n.length:0).trim();let t=a.indexOf(r);a=(t>=0?a.substring(0,t):a).trim()}return e.convertBase64ToArrayBuffer(a)},a=async e=>{let t=typeof e==`string`?i(e,`-----BEGIN PUBLIC KEY-----`,`-----END PUBLIC KEY-----`):e;return await globalThis.crypto.subtle.importKey(`spki`,t,{name:`RSA-OAEP`,hash:`SHA-256`},!0,[`encrypt`])},o=async e=>{let t=typeof e==`string`?i(e,`-----BEGIN PRIVATE KEY-----`,`-----END PRIVATE KEY-----`,!0):e;return await globalThis.crypto.subtle.importKey(`pkcs8`,t,{name:`RSA-OAEP`,hash:`SHA-256`},!0,[`decrypt`])},s=async e=>typeof e==`string`?new TextEncoder().encode(e):e instanceof Blob?await e.arrayBuffer():e,c=e=>{let t=new Uint8Array(e),n=``;for(let e=0;e<t.length;e++)n+=t[e].toString(16).padStart(2,`0`);return n},l=class{async digest(e,n){let r=n??`SHA-256`;if(r===`MD5`)throw Error(`MD5 is not implemented`);return c(await t().digest(r,await s(e)))}async encrypt(e,i){let o=t(),{key:s,iv:c,mode:l,algorithm:u}=i;if(!u||u==`aes`){let t=n(s);if(!t||t.byteLength<16||t.byteLength%16>0)throw Error(`key must greater than 16`);let i=typeof e==`string`?new TextEncoder().encode(e):e,a=r(c,t.byteLength),u=l===`CBC`?`AES-CBC`:l,d=await o.importKey(`raw`,t,u,!0,[`encrypt`]);return await o.encrypt({name:u,iv:a},d,i)}{let t=typeof e==`string`?new TextEncoder().encode(e):e,n=await a(s);return await o.encrypt({name:`RSA-OAEP`},n,t)}}async decrypt(e,i){let{key:a,iv:s,mode:c,algorithm:l}=i,u=t();if(!l||l==`aes`){let t=n(a);if(!t||t.byteLength<16||t.byteLength%16>0)throw Error(`key must greater than 16`);let i=r(s,t.byteLength),o=c===`CBC`?`AES-CBC`:c,l=await u.importKey(`raw`,t,o,!0,[`decrypt`]);return await u.decrypt({name:o,iv:i},l,e)}let d=await o(a);return await u.decrypt({name:`RSA-OAEP`},d,e)}};exports.WebCrypto=l;
@@ -1,14 +1,13 @@
1
- import { digestStream as e } from "./hash.mjs";
2
- import { convertBase64ToArrayBuffer as t } from "../common/buffer.mjs";
1
+ import { convertBase64ToArrayBuffer as e } from "../common/buffer.mjs";
3
2
  //#region kernal/crypto/WebCrypto.ts
4
- var n = () => {
3
+ var t = () => {
5
4
  let e = globalThis.crypto || globalThis.msCrypto;
6
5
  return e.subtle || e.webkitSubtle;
7
- }, r = (e) => typeof e == "string" ? new TextEncoder().encode(e) : e, i = (e, t) => {
6
+ }, n = (e) => typeof e == "string" ? new TextEncoder().encode(e) : e, r = (e, t) => {
8
7
  if (e == null) throw Error("iv is required for AES");
9
8
  return typeof e == "string" ? new TextEncoder().encode(e.substring(0, t)) : e.byteLength > t ? e.slice(0, t) : e;
10
- }, a = (e, n, r, i = !1) => {
11
- let a = e.trim();
9
+ }, i = (t, n, r, i = !1) => {
10
+ let a = t.trim();
12
11
  if (a.startsWith("-----")) {
13
12
  if (i && !a.includes(n)) throw Error("RSA decrypt requires PKCS#8 private key (BEGIN PRIVATE KEY)");
14
13
  let e = a.indexOf(n);
@@ -16,53 +15,59 @@ var n = () => {
16
15
  let t = a.indexOf(r);
17
16
  a = (t >= 0 ? a.substring(0, t) : a).trim();
18
17
  }
19
- return t(a);
20
- }, o = async (e) => {
21
- let t = typeof e == "string" ? a(e, "-----BEGIN PUBLIC KEY-----", "-----END PUBLIC KEY-----") : e;
18
+ return e(a);
19
+ }, a = async (e) => {
20
+ let t = typeof e == "string" ? i(e, "-----BEGIN PUBLIC KEY-----", "-----END PUBLIC KEY-----") : e;
22
21
  return await globalThis.crypto.subtle.importKey("spki", t, {
23
22
  name: "RSA-OAEP",
24
23
  hash: "SHA-256"
25
24
  }, !0, ["encrypt"]);
26
- }, s = async (e) => {
27
- let t = typeof e == "string" ? a(e, "-----BEGIN PRIVATE KEY-----", "-----END PRIVATE KEY-----", !0) : e;
25
+ }, o = async (e) => {
26
+ let t = typeof e == "string" ? i(e, "-----BEGIN PRIVATE KEY-----", "-----END PRIVATE KEY-----", !0) : e;
28
27
  return await globalThis.crypto.subtle.importKey("pkcs8", t, {
29
28
  name: "RSA-OAEP",
30
29
  hash: "SHA-256"
31
30
  }, !0, ["decrypt"]);
32
- }, c = class {
33
- async digest(t, n) {
34
- return e(t, n ?? "SHA-256");
31
+ }, s = async (e) => typeof e == "string" ? new TextEncoder().encode(e) : e instanceof Blob ? await e.arrayBuffer() : e, c = (e) => {
32
+ let t = new Uint8Array(e), n = "";
33
+ for (let e = 0; e < t.length; e++) n += t[e].toString(16).padStart(2, "0");
34
+ return n;
35
+ }, l = class {
36
+ async digest(e, n) {
37
+ let r = n ?? "SHA-256";
38
+ if (r === "MD5") throw Error("MD5 is not implemented");
39
+ return c(await t().digest(r, await s(e)));
35
40
  }
36
- async encrypt(e, t) {
37
- let a = n(), { key: s, iv: c, mode: l, algorithm: u } = t;
41
+ async encrypt(e, i) {
42
+ let o = t(), { key: s, iv: c, mode: l, algorithm: u } = i;
38
43
  if (!u || u == "aes") {
39
- let t = r(s);
44
+ let t = n(s);
40
45
  if (!t || t.byteLength < 16 || t.byteLength % 16 > 0) throw Error("key must greater than 16");
41
- let n = typeof e == "string" ? new TextEncoder().encode(e) : e, o = i(c, t.byteLength), u = l === "CBC" ? "AES-CBC" : l, d = await a.importKey("raw", t, u, !0, ["encrypt"]);
42
- return await a.encrypt({
46
+ let i = typeof e == "string" ? new TextEncoder().encode(e) : e, a = r(c, t.byteLength), u = l === "CBC" ? "AES-CBC" : l, d = await o.importKey("raw", t, u, !0, ["encrypt"]);
47
+ return await o.encrypt({
43
48
  name: u,
44
- iv: o
45
- }, d, n);
49
+ iv: a
50
+ }, d, i);
46
51
  }
47
52
  {
48
- let t = typeof e == "string" ? new TextEncoder().encode(e) : e, n = await o(s);
49
- return await a.encrypt({ name: "RSA-OAEP" }, n, t);
53
+ let t = typeof e == "string" ? new TextEncoder().encode(e) : e, n = await a(s);
54
+ return await o.encrypt({ name: "RSA-OAEP" }, n, t);
50
55
  }
51
56
  }
52
- async decrypt(e, t) {
53
- let { key: a, iv: o, mode: c, algorithm: l } = t, u = n();
57
+ async decrypt(e, i) {
58
+ let { key: a, iv: s, mode: c, algorithm: l } = i, u = t();
54
59
  if (!l || l == "aes") {
55
- let t = r(a);
60
+ let t = n(a);
56
61
  if (!t || t.byteLength < 16 || t.byteLength % 16 > 0) throw Error("key must greater than 16");
57
- let n = i(o, t.byteLength), s = c === "CBC" ? "AES-CBC" : c, l = await u.importKey("raw", t, s, !0, ["decrypt"]);
62
+ let i = r(s, t.byteLength), o = c === "CBC" ? "AES-CBC" : c, l = await u.importKey("raw", t, o, !0, ["decrypt"]);
58
63
  return await u.decrypt({
59
- name: s,
60
- iv: n
64
+ name: o,
65
+ iv: i
61
66
  }, l, e);
62
67
  }
63
- let d = await s(a);
68
+ let d = await o(a);
64
69
  return await u.decrypt({ name: "RSA-OAEP" }, d, e);
65
70
  }
66
71
  };
67
72
  //#endregion
68
- export { c as WebCrypto };
73
+ export { l as WebCrypto };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./EventNames.cjs"),t=require("./common/data.cjs"),n=require("./web/BrowserCapabilities.cjs"),r=require("./EventEmitter.cjs"),i=require("./logger/LogLevel.cjs"),a=require("./MediaTypeRegistry.cjs"),o=require("./Options.cjs"),s=require("./Metadata.cjs"),c=require("./OpenOptions.cjs"),l=require("./progress/Progress.cjs"),u=require("./progress/userChangedProgress.cjs"),d=require("./Context.cjs"),f=require("./IFileParser.cjs"),p=require("./crypto/hash.cjs"),m=require("./crypto/MD5.cjs"),h=require("./Constants.cjs"),g=require("./services/ServiceCollection.cjs"),_=require("./FileLoader.cjs"),v=require("./hostViewport.cjs"),y=require("./plugins/PluginRegistry.cjs"),b=require("./plugins/PluginManager.cjs"),x=require("./Theme.cjs"),S=require("./OptionsProvider.cjs"),C=require("./Reader.cjs"),w=require("./LocationState.cjs"),T=require("./JsonConvert.cjs"),E=require("./IWallpaperProvider.cjs"),D=require("./network/HttpClient.cjs"),O=require("./services/file/IFileDecrypter.cjs"),k=require("./navigator/INavigator.cjs"),A=require("./navigator/IPagingNavigator.cjs"),j=require("./services/loading/ILoading.cjs"),M=require("./device/IDevice.cjs"),N=require("./web/scheduler.cjs"),P=require("./device/WebBrowser.cjs"),F=require("./IDocument.cjs"),I=require("./shape/SimpleMatrix.cjs"),L=require("./i18n/ILocale.cjs"),R=require("./i18n/textDirection.cjs"),z=require("./plugins/PluginCore.cjs"),B=require("./services/font/IFontProvider.cjs"),V=require("./nav/Nav.cjs"),H=require("./web/debounce.cjs"),U=require("./io/IByteSource.cjs"),W=require("./io/BlobByteSource.cjs"),G=require("./io/MemoryByteSource.cjs"),K=require("./io/HttpByteSource.cjs"),q=require("./ContentRange.cjs");let J=require("js-logger"),Y=require("perfect-debounce");exports.AnimationClassName=h.AnimationClassName,exports.BlobByteSource=W.BlobByteSource,exports.BrowserCapabilities=n.BrowserCapabilities,exports.CORE_SERVICE_KEYS=g.CORE_SERVICE_KEYS,exports.Context=d.Context,exports.DecryptFile=O.DecryptFile,exports.DecryptParentFile=O.DecryptParentFile,exports.DeviceInfo=M.DeviceInfo,exports.ElementInitialNumberName=h.ElementInitialNumberName,exports.ElementMtInitialNumberName=h.ElementMtInitialNumberName,exports.EventEmitter=r.EventEmitter,exports.EventNames=e.EventNames,exports.ExtractImageOptions=F.ExtractImageOptions,exports.FileLoader=_.FileLoader,exports.FileLocation=l.FileLocation,exports.FilePackage=f.FilePackage,exports.Font=B.Font,exports.FontConfig=B.FontConfig,exports.FontResource=B.FontResource,Object.defineProperty(exports,"GlobalLogger",{enumerable:!0,get:function(){return J.GlobalLogger}}),exports.GotoPercentegeOptions=k.GotoPercentegeOptions,exports.GotoResult=F.GotoResult,exports.HASH_CHUNK_SIZE=p.HASH_CHUNK_SIZE,exports.HttpByteSource=K.HttpByteSource,exports.HttpClient=D.HttpClient,Object.defineProperty(exports,"ILogHandler",{enumerable:!0,get:function(){return J.ILogHandler}}),Object.defineProperty(exports,"ILogLevel",{enumerable:!0,get:function(){return J.ILogLevel}}),Object.defineProperty(exports,"ILogger",{enumerable:!0,get:function(){return J.ILogger}}),Object.defineProperty(exports,"ILoggerOpts",{enumerable:!0,get:function(){return J.ILoggerOpts}}),exports.ImageActionDescriptor=F.ImageActionDescriptor,exports.ImageDescriptor=F.ImageDescriptor,exports.JsonConvert=T.JsonConvert,exports.Language=L.Language,exports.LastElementAttributeName=h.LastElementAttributeName,exports.LoadingOptions=j.LoadingOptions,exports.LocationState=w.LocationState,exports.LogLevel=i.LogLevel,exports.MIN_HOST_VIEWPORT_PX=v.MIN_HOST_VIEWPORT_PX,exports.MTTAG=h.MTTAG,exports.MediaTypeRegistry=a.MediaTypeRegistry,exports.MemoryByteSource=G.MemoryByteSource,exports.Metadata=s.Metadata,exports.Nav=V.Nav,exports.NavPoint=V.NavPoint,exports.OpenOptions=c.OpenOptions,exports.OptionKeys=o.OptionKeys,exports.Options=o.Options,exports.OptionsCssKeys=o.OptionsCssKeys,exports.OptionsProvider=S.OptionsProvider,exports.PageChangeOptions=A.PageChangeOptions,exports.PagingExtra=A.PagingExtra,exports.PluginCore=z.PluginCore,exports.PluginManager=b.PluginManager,exports.PluginRegistry=y.PluginRegistry,exports.Progress=l.Progress,exports.ROOT_IDX=h.ROOT_IDX,exports.Reader=C.Reader,exports.ReadingLocation=l.ReadingLocation,exports.RtlLanguageCodes=R.RtlLanguageCodes,exports.SIMPLE_ID_BYTE_LENGTH=p.SIMPLE_ID_BYTE_LENGTH,exports.STTAG=h.STTAG,exports.ServiceCollection=g.ServiceCollection,exports.SimpleMatrix=I.SimpleMatrix,exports.SpineFile=f.SpineFile,exports.TextFormatOptions=F.TextFormatOptions,exports.Theme=x.Theme,exports.ThemeCssKeys=x.ThemeCssKeys,exports.UI_SERVICE_KEYS=g.UI_SERVICE_KEYS,exports.Wallpaper=E.Wallpaper,exports.WebBrowser=P.WebBrowser,exports.applyPagingLocationFrom=u.applyPagingLocationFrom,exports.assertByteRange=U.assertByteRange,exports.asyncDebounce=Y.debounce,exports.computeMd5=m.computeMd5,exports.computeSimpleId=m.computeSimpleId,exports.createHasher=p.createHasher,exports.debounce=H.debounce,exports.digestMany=p.digestMany,exports.digestStream=p.digestStream,exports.fillMetadata=s.fillMetadata,exports.findNearestObserverRoot=v.findNearestObserverRoot,exports.findNearestScrollElement=v.findNearestScrollElement,exports.formatFileSize=t.formatFileSize,exports.isAppLocationFrom=u.isAppLocationFrom,exports.isFixedContentRange=q.isFixedContentRange,exports.isMediaContentRange=q.isMediaContentRange,exports.isOptionKey=o.isOptionKey,exports.isOptionsCssKey=o.isOptionsCssKey,exports.isReflowableContentRange=q.isReflowableContentRange,exports.isRtlLanguage=R.isRtlLanguage,exports.locationFromOfPagingExtra=u.locationFromOfPagingExtra,exports.materialize=U.materialize,exports.normalizeLanguageCode=R.normalizeLanguageCode,exports.openHttpByteSource=K.openHttpByteSource,exports.probeDefiniteHostHeight=v.probeDefiniteHostHeight,exports.readExact=U.readExact,exports.readerPrefixName=h.readerPrefixName,exports.refreshHostViewportSize=v.refreshHostViewportSize,exports.resolveHostViewport=v.resolveHostViewport,exports.resolveTextDirectionFromLanguage=R.resolveTextDirectionFromLanguage,exports.resolveViewportHeight=v.resolveViewportHeight,exports.shouldSetUserChangedProgress=u.shouldSetUserChangedProgress,exports.sliceByteSource=U.sliceByteSource,exports.supportScheduler=N.supportScheduler,exports.throttle=H.throttle,exports.toMetadataList=s.toMetadataList,exports.unescapeHtml=s.unescapeHtml,exports.whitespaceRegex=h.whitespaceRegex,exports.yieldToMain=N.yieldToMain;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./EventNames.cjs"),t=require("./common/data.cjs"),n=require("./web/BrowserCapabilities.cjs"),r=require("./EventEmitter.cjs"),i=require("./logger/LogLevel.cjs"),a=require("./MediaTypeRegistry.cjs"),o=require("./Options.cjs"),s=require("./Metadata.cjs"),c=require("./OpenOptions.cjs"),l=require("./progress/Progress.cjs"),u=require("./progress/userChangedProgress.cjs"),d=require("./Context.cjs"),f=require("./IFileParser.cjs"),p=require("./Constants.cjs"),m=require("./services/ServiceCollection.cjs"),h=require("./FileLoader.cjs"),g=require("./hostViewport.cjs"),_=require("./plugins/PluginRegistry.cjs"),v=require("./plugins/PluginManager.cjs"),y=require("./Theme.cjs"),b=require("./OptionsProvider.cjs"),x=require("./Reader.cjs"),S=require("./LocationState.cjs"),C=require("./JsonConvert.cjs"),w=require("./IWallpaperProvider.cjs"),T=require("./network/HttpClient.cjs"),E=require("./services/file/IFileDecrypter.cjs"),D=require("./navigator/INavigator.cjs"),O=require("./navigator/IPagingNavigator.cjs"),k=require("./services/loading/ILoading.cjs"),A=require("./device/IDevice.cjs"),j=require("./web/scheduler.cjs"),M=require("./device/WebBrowser.cjs"),N=require("./IDocument.cjs"),P=require("./shape/SimpleMatrix.cjs"),F=require("./i18n/ILocale.cjs"),I=require("./i18n/textDirection.cjs"),L=require("./plugins/PluginCore.cjs"),R=require("./services/font/IFontProvider.cjs"),z=require("./nav/Nav.cjs"),B=require("./web/debounce.cjs"),V=require("./io/IByteSource.cjs"),H=require("./io/BlobByteSource.cjs"),U=require("./io/MemoryByteSource.cjs"),W=require("./io/HttpByteSource.cjs"),G=require("./ContentRange.cjs");let K=require("js-logger"),q=require("perfect-debounce");exports.AnimationClassName=p.AnimationClassName,exports.BlobByteSource=H.BlobByteSource,exports.BrowserCapabilities=n.BrowserCapabilities,exports.CORE_SERVICE_KEYS=m.CORE_SERVICE_KEYS,exports.Context=d.Context,exports.DecryptFile=E.DecryptFile,exports.DecryptParentFile=E.DecryptParentFile,exports.DeviceInfo=A.DeviceInfo,exports.ElementInitialNumberName=p.ElementInitialNumberName,exports.ElementMtInitialNumberName=p.ElementMtInitialNumberName,exports.EventEmitter=r.EventEmitter,exports.EventNames=e.EventNames,exports.ExtractImageOptions=N.ExtractImageOptions,exports.FileLoader=h.FileLoader,exports.FileLocation=l.FileLocation,exports.FilePackage=f.FilePackage,exports.Font=R.Font,exports.FontConfig=R.FontConfig,exports.FontResource=R.FontResource,Object.defineProperty(exports,"GlobalLogger",{enumerable:!0,get:function(){return K.GlobalLogger}}),exports.GotoPercentegeOptions=D.GotoPercentegeOptions,exports.GotoResult=N.GotoResult,exports.HttpByteSource=W.HttpByteSource,exports.HttpClient=T.HttpClient,Object.defineProperty(exports,"ILogHandler",{enumerable:!0,get:function(){return K.ILogHandler}}),Object.defineProperty(exports,"ILogLevel",{enumerable:!0,get:function(){return K.ILogLevel}}),Object.defineProperty(exports,"ILogger",{enumerable:!0,get:function(){return K.ILogger}}),Object.defineProperty(exports,"ILoggerOpts",{enumerable:!0,get:function(){return K.ILoggerOpts}}),exports.ImageActionDescriptor=N.ImageActionDescriptor,exports.ImageDescriptor=N.ImageDescriptor,exports.JsonConvert=C.JsonConvert,exports.Language=F.Language,exports.LastElementAttributeName=p.LastElementAttributeName,exports.LoadingOptions=k.LoadingOptions,exports.LocationState=S.LocationState,exports.LogLevel=i.LogLevel,exports.MIN_HOST_VIEWPORT_PX=g.MIN_HOST_VIEWPORT_PX,exports.MTTAG=p.MTTAG,exports.MediaTypeRegistry=a.MediaTypeRegistry,exports.MemoryByteSource=U.MemoryByteSource,exports.Metadata=s.Metadata,exports.Nav=z.Nav,exports.NavPoint=z.NavPoint,exports.OpenOptions=c.OpenOptions,exports.OptionKeys=o.OptionKeys,exports.Options=o.Options,exports.OptionsCssKeys=o.OptionsCssKeys,exports.OptionsProvider=b.OptionsProvider,exports.PageChangeOptions=O.PageChangeOptions,exports.PagingExtra=O.PagingExtra,exports.PluginCore=L.PluginCore,exports.PluginManager=v.PluginManager,exports.PluginRegistry=_.PluginRegistry,exports.Progress=l.Progress,exports.ROOT_IDX=p.ROOT_IDX,exports.Reader=x.Reader,exports.ReadingLocation=l.ReadingLocation,exports.RtlLanguageCodes=I.RtlLanguageCodes,exports.STTAG=p.STTAG,exports.ServiceCollection=m.ServiceCollection,exports.SimpleMatrix=P.SimpleMatrix,exports.SpineFile=f.SpineFile,exports.TextFormatOptions=N.TextFormatOptions,exports.Theme=y.Theme,exports.ThemeCssKeys=y.ThemeCssKeys,exports.UI_SERVICE_KEYS=m.UI_SERVICE_KEYS,exports.Wallpaper=w.Wallpaper,exports.WebBrowser=M.WebBrowser,exports.applyPagingLocationFrom=u.applyPagingLocationFrom,exports.assertByteRange=V.assertByteRange,exports.asyncDebounce=q.debounce,exports.debounce=B.debounce,exports.fillMetadata=s.fillMetadata,exports.findNearestObserverRoot=g.findNearestObserverRoot,exports.findNearestScrollElement=g.findNearestScrollElement,exports.formatFileSize=t.formatFileSize,exports.isAppLocationFrom=u.isAppLocationFrom,exports.isFixedContentRange=G.isFixedContentRange,exports.isMediaContentRange=G.isMediaContentRange,exports.isOptionKey=o.isOptionKey,exports.isOptionsCssKey=o.isOptionsCssKey,exports.isReflowableContentRange=G.isReflowableContentRange,exports.isRtlLanguage=I.isRtlLanguage,exports.locationFromOfPagingExtra=u.locationFromOfPagingExtra,exports.materialize=V.materialize,exports.normalizeLanguageCode=I.normalizeLanguageCode,exports.openHttpByteSource=W.openHttpByteSource,exports.probeDefiniteHostHeight=g.probeDefiniteHostHeight,exports.readExact=V.readExact,exports.readerPrefixName=p.readerPrefixName,exports.refreshHostViewportSize=g.refreshHostViewportSize,exports.resolveHostViewport=g.resolveHostViewport,exports.resolveTextDirectionFromLanguage=I.resolveTextDirectionFromLanguage,exports.resolveViewportHeight=g.resolveViewportHeight,exports.shouldSetUserChangedProgress=u.shouldSetUserChangedProgress,exports.sliceByteSource=V.sliceByteSource,exports.supportScheduler=j.supportScheduler,exports.throttle=B.throttle,exports.toMetadataList=s.toMetadataList,exports.unescapeHtml=s.unescapeHtml,exports.whitespaceRegex=p.whitespaceRegex,exports.yieldToMain=j.yieldToMain;
@@ -58,8 +58,5 @@ export { assertByteRange, materialize, readExact, sliceByteSource } from './io/I
58
58
  export { BlobByteSource } from './io/BlobByteSource';
59
59
  export { HttpByteSource, openHttpByteSource } from './io/HttpByteSource';
60
60
  export { MemoryByteSource } from './io/MemoryByteSource';
61
- export { computeMd5, computeSimpleId } from './crypto/MD5';
62
- export { createHasher, digestMany, digestStream, HASH_CHUNK_SIZE, SIMPLE_ID_BYTE_LENGTH } from './crypto/hash';
63
- export type { DigestSource, HashSpec, StreamingHasher } from './crypto/hash';
64
61
  export * from './JsonConvert';
65
62
  export * from './ContentRange';
@@ -11,40 +11,38 @@ import { FileLocation as g, Progress as _, ReadingLocation as v } from "./progre
11
11
  import { applyPagingLocationFrom as y, isAppLocationFrom as b, locationFromOfPagingExtra as x, shouldSetUserChangedProgress as S } from "./progress/userChangedProgress.mjs";
12
12
  import { Context as C } from "./Context.mjs";
13
13
  import { FilePackage as w, SpineFile as T } from "./IFileParser.mjs";
14
- import { HASH_CHUNK_SIZE as E, SIMPLE_ID_BYTE_LENGTH as D, createHasher as O, digestMany as k, digestStream as A } from "./crypto/hash.mjs";
15
- import { computeMd5 as j, computeSimpleId as M } from "./crypto/MD5.mjs";
16
- import { AnimationClassName as N, ElementInitialNumberName as P, ElementMtInitialNumberName as F, LastElementAttributeName as I, MTTAG as L, ROOT_IDX as R, STTAG as z, readerPrefixName as B, whitespaceRegex as V } from "./Constants.mjs";
17
- import { CORE_SERVICE_KEYS as H, ServiceCollection as U, UI_SERVICE_KEYS as W } from "./services/ServiceCollection.mjs";
18
- import { FileLoader as G } from "./FileLoader.mjs";
19
- import { MIN_HOST_VIEWPORT_PX as K, findNearestObserverRoot as q, findNearestScrollElement as J, probeDefiniteHostHeight as Y, refreshHostViewportSize as X, resolveHostViewport as Z, resolveViewportHeight as Q } from "./hostViewport.mjs";
20
- import { PluginRegistry as $ } from "./plugins/PluginRegistry.mjs";
21
- import { PluginManager as ee } from "./plugins/PluginManager.mjs";
22
- import { Theme as te, ThemeCssKeys as ne } from "./Theme.mjs";
23
- import { OptionsProvider as re } from "./OptionsProvider.mjs";
24
- import { Reader as ie } from "./Reader.mjs";
25
- import { LocationState as ae } from "./LocationState.mjs";
26
- import { JsonConvert as oe } from "./JsonConvert.mjs";
27
- import { Wallpaper as se } from "./IWallpaperProvider.mjs";
28
- import { HttpClient as ce } from "./network/HttpClient.mjs";
29
- import { DecryptFile as le, DecryptParentFile as ue } from "./services/file/IFileDecrypter.mjs";
30
- import { GotoPercentegeOptions as de } from "./navigator/INavigator.mjs";
31
- import { PageChangeOptions as fe, PagingExtra as pe } from "./navigator/IPagingNavigator.mjs";
32
- import { LoadingOptions as me } from "./services/loading/ILoading.mjs";
33
- import { DeviceInfo as he } from "./device/IDevice.mjs";
34
- import { supportScheduler as ge, yieldToMain as _e } from "./web/scheduler.mjs";
35
- import { WebBrowser as ve } from "./device/WebBrowser.mjs";
36
- import { ExtractImageOptions as ye, GotoResult as be, ImageActionDescriptor as xe, ImageDescriptor as Se, TextFormatOptions as Ce } from "./IDocument.mjs";
37
- import { SimpleMatrix as we } from "./shape/SimpleMatrix.mjs";
38
- import { Language as Te } from "./i18n/ILocale.mjs";
39
- import { RtlLanguageCodes as Ee, isRtlLanguage as De, normalizeLanguageCode as Oe, resolveTextDirectionFromLanguage as ke } from "./i18n/textDirection.mjs";
40
- import { PluginCore as Ae } from "./plugins/PluginCore.mjs";
41
- import { Font as je, FontConfig as Me, FontResource as Ne } from "./services/font/IFontProvider.mjs";
42
- import { Nav as Pe, NavPoint as Fe } from "./nav/Nav.mjs";
43
- import { asyncDebounce as Ie, debounce as Le, throttle as Re } from "./web/debounce.mjs";
44
- import { assertByteRange as ze, materialize as Be, readExact as Ve, sliceByteSource as He } from "./io/IByteSource.mjs";
45
- import { BlobByteSource as Ue } from "./io/BlobByteSource.mjs";
46
- import { MemoryByteSource as We } from "./io/MemoryByteSource.mjs";
47
- import { HttpByteSource as Ge, openHttpByteSource as Ke } from "./io/HttpByteSource.mjs";
48
- import { isFixedContentRange as qe, isMediaContentRange as Je, isReflowableContentRange as Ye } from "./ContentRange.mjs";
49
- import { GlobalLogger as Xe, ILogHandler as Ze, ILogLevel as Qe, ILogger as $e, ILoggerOpts as et } from "js-logger";
50
- export { N as AnimationClassName, Ue as BlobByteSource, n as BrowserCapabilities, H as CORE_SERVICE_KEYS, C as Context, le as DecryptFile, ue as DecryptParentFile, he as DeviceInfo, P as ElementInitialNumberName, F as ElementMtInitialNumberName, r as EventEmitter, e as EventNames, ye as ExtractImageOptions, G as FileLoader, g as FileLocation, w as FilePackage, je as Font, Me as FontConfig, Ne as FontResource, Xe as GlobalLogger, de as GotoPercentegeOptions, be as GotoResult, E as HASH_CHUNK_SIZE, Ge as HttpByteSource, ce as HttpClient, Ze as ILogHandler, Qe as ILogLevel, $e as ILogger, et as ILoggerOpts, xe as ImageActionDescriptor, Se as ImageDescriptor, oe as JsonConvert, Te as Language, I as LastElementAttributeName, me as LoadingOptions, ae as LocationState, i as LogLevel, K as MIN_HOST_VIEWPORT_PX, L as MTTAG, a as MediaTypeRegistry, We as MemoryByteSource, d as Metadata, Pe as Nav, Fe as NavPoint, h as OpenOptions, o as OptionKeys, s as Options, c as OptionsCssKeys, re as OptionsProvider, fe as PageChangeOptions, pe as PagingExtra, Ae as PluginCore, ee as PluginManager, $ as PluginRegistry, _ as Progress, R as ROOT_IDX, ie as Reader, v as ReadingLocation, Ee as RtlLanguageCodes, D as SIMPLE_ID_BYTE_LENGTH, z as STTAG, U as ServiceCollection, we as SimpleMatrix, T as SpineFile, Ce as TextFormatOptions, te as Theme, ne as ThemeCssKeys, W as UI_SERVICE_KEYS, se as Wallpaper, ve as WebBrowser, y as applyPagingLocationFrom, ze as assertByteRange, Ie as asyncDebounce, j as computeMd5, M as computeSimpleId, O as createHasher, Le as debounce, k as digestMany, A as digestStream, f as fillMetadata, q as findNearestObserverRoot, J as findNearestScrollElement, t as formatFileSize, b as isAppLocationFrom, qe as isFixedContentRange, Je as isMediaContentRange, l as isOptionKey, u as isOptionsCssKey, Ye as isReflowableContentRange, De as isRtlLanguage, x as locationFromOfPagingExtra, Be as materialize, Oe as normalizeLanguageCode, Ke as openHttpByteSource, Y as probeDefiniteHostHeight, Ve as readExact, B as readerPrefixName, X as refreshHostViewportSize, Z as resolveHostViewport, ke as resolveTextDirectionFromLanguage, Q as resolveViewportHeight, S as shouldSetUserChangedProgress, He as sliceByteSource, ge as supportScheduler, Re as throttle, p as toMetadataList, m as unescapeHtml, V as whitespaceRegex, _e as yieldToMain };
14
+ import { AnimationClassName as E, ElementInitialNumberName as D, ElementMtInitialNumberName as O, LastElementAttributeName as k, MTTAG as A, ROOT_IDX as j, STTAG as M, readerPrefixName as N, whitespaceRegex as P } from "./Constants.mjs";
15
+ import { CORE_SERVICE_KEYS as F, ServiceCollection as I, UI_SERVICE_KEYS as L } from "./services/ServiceCollection.mjs";
16
+ import { FileLoader as R } from "./FileLoader.mjs";
17
+ import { MIN_HOST_VIEWPORT_PX as z, findNearestObserverRoot as B, findNearestScrollElement as V, probeDefiniteHostHeight as H, refreshHostViewportSize as U, resolveHostViewport as W, resolveViewportHeight as G } from "./hostViewport.mjs";
18
+ import { PluginRegistry as K } from "./plugins/PluginRegistry.mjs";
19
+ import { PluginManager as q } from "./plugins/PluginManager.mjs";
20
+ import { Theme as J, ThemeCssKeys as Y } from "./Theme.mjs";
21
+ import { OptionsProvider as X } from "./OptionsProvider.mjs";
22
+ import { Reader as Z } from "./Reader.mjs";
23
+ import { LocationState as Q } from "./LocationState.mjs";
24
+ import { JsonConvert as $ } from "./JsonConvert.mjs";
25
+ import { Wallpaper as ee } from "./IWallpaperProvider.mjs";
26
+ import { HttpClient as te } from "./network/HttpClient.mjs";
27
+ import { DecryptFile as ne, DecryptParentFile as re } from "./services/file/IFileDecrypter.mjs";
28
+ import { GotoPercentegeOptions as ie } from "./navigator/INavigator.mjs";
29
+ import { PageChangeOptions as ae, PagingExtra as oe } from "./navigator/IPagingNavigator.mjs";
30
+ import { LoadingOptions as se } from "./services/loading/ILoading.mjs";
31
+ import { DeviceInfo as ce } from "./device/IDevice.mjs";
32
+ import { supportScheduler as le, yieldToMain as ue } from "./web/scheduler.mjs";
33
+ import { WebBrowser as de } from "./device/WebBrowser.mjs";
34
+ import { ExtractImageOptions as fe, GotoResult as pe, ImageActionDescriptor as me, ImageDescriptor as he, TextFormatOptions as ge } from "./IDocument.mjs";
35
+ import { SimpleMatrix as _e } from "./shape/SimpleMatrix.mjs";
36
+ import { Language as ve } from "./i18n/ILocale.mjs";
37
+ import { RtlLanguageCodes as ye, isRtlLanguage as be, normalizeLanguageCode as xe, resolveTextDirectionFromLanguage as Se } from "./i18n/textDirection.mjs";
38
+ import { PluginCore as Ce } from "./plugins/PluginCore.mjs";
39
+ import { Font as we, FontConfig as Te, FontResource as Ee } from "./services/font/IFontProvider.mjs";
40
+ import { Nav as De, NavPoint as Oe } from "./nav/Nav.mjs";
41
+ import { asyncDebounce as ke, debounce as Ae, throttle as je } from "./web/debounce.mjs";
42
+ import { assertByteRange as Me, materialize as Ne, readExact as Pe, sliceByteSource as Fe } from "./io/IByteSource.mjs";
43
+ import { BlobByteSource as Ie } from "./io/BlobByteSource.mjs";
44
+ import { MemoryByteSource as Le } from "./io/MemoryByteSource.mjs";
45
+ import { HttpByteSource as Re, openHttpByteSource as ze } from "./io/HttpByteSource.mjs";
46
+ import { isFixedContentRange as Be, isMediaContentRange as Ve, isReflowableContentRange as He } from "./ContentRange.mjs";
47
+ import { GlobalLogger as Ue, ILogHandler as We, ILogLevel as Ge, ILogger as Ke, ILoggerOpts as qe } from "js-logger";
48
+ export { E as AnimationClassName, Ie as BlobByteSource, n as BrowserCapabilities, F as CORE_SERVICE_KEYS, C as Context, ne as DecryptFile, re as DecryptParentFile, ce as DeviceInfo, D as ElementInitialNumberName, O as ElementMtInitialNumberName, r as EventEmitter, e as EventNames, fe as ExtractImageOptions, R as FileLoader, g as FileLocation, w as FilePackage, we as Font, Te as FontConfig, Ee as FontResource, Ue as GlobalLogger, ie as GotoPercentegeOptions, pe as GotoResult, Re as HttpByteSource, te as HttpClient, We as ILogHandler, Ge as ILogLevel, Ke as ILogger, qe as ILoggerOpts, me as ImageActionDescriptor, he as ImageDescriptor, $ as JsonConvert, ve as Language, k as LastElementAttributeName, se as LoadingOptions, Q as LocationState, i as LogLevel, z as MIN_HOST_VIEWPORT_PX, A as MTTAG, a as MediaTypeRegistry, Le as MemoryByteSource, d as Metadata, De as Nav, Oe as NavPoint, h as OpenOptions, o as OptionKeys, s as Options, c as OptionsCssKeys, X as OptionsProvider, ae as PageChangeOptions, oe as PagingExtra, Ce as PluginCore, q as PluginManager, K as PluginRegistry, _ as Progress, j as ROOT_IDX, Z as Reader, v as ReadingLocation, ye as RtlLanguageCodes, M as STTAG, I as ServiceCollection, _e as SimpleMatrix, T as SpineFile, ge as TextFormatOptions, J as Theme, Y as ThemeCssKeys, L as UI_SERVICE_KEYS, ee as Wallpaper, de as WebBrowser, y as applyPagingLocationFrom, Me as assertByteRange, ke as asyncDebounce, Ae as debounce, f as fillMetadata, B as findNearestObserverRoot, V as findNearestScrollElement, t as formatFileSize, b as isAppLocationFrom, Be as isFixedContentRange, Ve as isMediaContentRange, l as isOptionKey, u as isOptionsCssKey, He as isReflowableContentRange, be as isRtlLanguage, x as locationFromOfPagingExtra, Ne as materialize, xe as normalizeLanguageCode, ze as openHttpByteSource, H as probeDefiniteHostHeight, Pe as readExact, N as readerPrefixName, U as refreshHostViewportSize, W as resolveHostViewport, Se as resolveTextDirectionFromLanguage, G as resolveViewportHeight, S as shouldSetUserChangedProgress, Fe as sliceByteSource, le as supportScheduler, je as throttle, p as toMetadataList, m as unescapeHtml, P as whitespaceRegex, ue as yieldToMain };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../crypto/hash.cjs");var t=(e,t)=>{if(!Number.isInteger(e)||!Number.isInteger(t)||e<0||t<e)throw RangeError(`Invalid byte range: ${e}-${t}`)},n=async(e,n,r)=>{t(n,r);let i=await e.read(n,r),a=r-n;if(i.byteLength!==a)throw RangeError(`Expected ${a} bytes at ${n}, received ${i.byteLength}`);return i},r=(e,n,r)=>{if(t(n,r),r>e.size)throw RangeError(`Byte window ${n}-${r} exceeds source size ${e.size}`);let i=r-n;return{size:i,read:async(r,a)=>{if(t(r,a),r>=i)return new Uint8Array;let o=Math.min(a,i);return e.read(n+r,n+o)},close:async()=>{}}},i=async t=>{let n=new Uint8Array(t.size),r=0;for(;r<t.size;){let i=Math.min(r+e.HASH_CHUNK_SIZE,t.size),a=await t.read(r,i);if(a.byteLength===0)break;n.set(a,r),r+=a.byteLength}return n.buffer};exports.assertByteRange=t,exports.materialize=i,exports.readExact=n,exports.sliceByteSource=r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=2097152,t=(e,t)=>{if(!Number.isInteger(e)||!Number.isInteger(t)||e<0||t<e)throw RangeError(`Invalid byte range: ${e}-${t}`)},n=async(e,n,r)=>{t(n,r);let i=await e.read(n,r),a=r-n;if(i.byteLength!==a)throw RangeError(`Expected ${a} bytes at ${n}, received ${i.byteLength}`);return i},r=(e,n,r)=>{if(t(n,r),r>e.size)throw RangeError(`Byte window ${n}-${r} exceeds source size ${e.size}`);let i=r-n;return{size:i,read:async(r,a)=>{if(t(r,a),r>=i)return new Uint8Array;let o=Math.min(a,i);return e.read(n+r,n+o)},close:async()=>{}}},i=async t=>{let n=new Uint8Array(t.size),r=0;for(;r<t.size;){let i=Math.min(r+e,t.size),a=await t.read(r,i);if(a.byteLength===0)break;n.set(a,r),r+=a.byteLength}return n.buffer};exports.assertByteRange=t,exports.materialize=i,exports.readExact=n,exports.sliceByteSource=r;
@@ -1,32 +1,31 @@
1
- import { HASH_CHUNK_SIZE as e } from "../crypto/hash.mjs";
2
1
  //#region kernal/io/IByteSource.ts
3
- var t = (e, t) => {
2
+ var e = (e, t) => {
4
3
  if (!Number.isInteger(e) || !Number.isInteger(t) || e < 0 || t < e) throw RangeError(`Invalid byte range: ${e}-${t}`);
5
- }, n = async (e, n, r) => {
6
- t(n, r);
7
- let i = await e.read(n, r), a = r - n;
4
+ }, t = async (t, n, r) => {
5
+ e(n, r);
6
+ let i = await t.read(n, r), a = r - n;
8
7
  if (i.byteLength !== a) throw RangeError(`Expected ${a} bytes at ${n}, received ${i.byteLength}`);
9
8
  return i;
10
- }, r = (e, n, r) => {
11
- if (t(n, r), r > e.size) throw RangeError(`Byte window ${n}-${r} exceeds source size ${e.size}`);
9
+ }, n = (t, n, r) => {
10
+ if (e(n, r), r > t.size) throw RangeError(`Byte window ${n}-${r} exceeds source size ${t.size}`);
12
11
  let i = r - n;
13
12
  return {
14
13
  size: i,
15
14
  read: async (r, a) => {
16
- if (t(r, a), r >= i) return /* @__PURE__ */ new Uint8Array();
15
+ if (e(r, a), r >= i) return /* @__PURE__ */ new Uint8Array();
17
16
  let o = Math.min(a, i);
18
- return e.read(n + r, n + o);
17
+ return t.read(n + r, n + o);
19
18
  },
20
19
  close: async () => {}
21
20
  };
22
- }, i = async (t) => {
23
- let n = new Uint8Array(t.size), r = 0;
24
- for (; r < t.size;) {
25
- let i = Math.min(r + e, t.size), a = await t.read(r, i);
26
- if (a.byteLength === 0) break;
27
- n.set(a, r), r += a.byteLength;
21
+ }, r = async (e) => {
22
+ let t = new Uint8Array(e.size), n = 0;
23
+ for (; n < e.size;) {
24
+ let r = Math.min(n + 2097152, e.size), i = await e.read(n, r);
25
+ if (i.byteLength === 0) break;
26
+ t.set(i, n), n += i.byteLength;
28
27
  }
29
- return n.buffer;
28
+ return t.buffer;
30
29
  };
31
30
  //#endregion
32
- export { t as assertByteRange, i as materialize, n as readExact, r as sliceByteSource };
31
+ export { e as assertByteRange, r as materialize, t as readExact, n as sliceByteSource };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../Metadata.cjs"),t=require("../progress/Progress.cjs"),n=require("../Context.cjs"),r=require("../IFileParser.cjs"),i=require("./metadata.cjs");var a=class{constructor(e){this.deps=e}async load(r,a,o){let{inputFormatter:s,mediaTypeRegistry:c,options:l,events:u,lifecycle:d}=this.deps;s.guardUrl(r);let f=await s.formatInputParameters(r,a);if(!f.extension)throw Error(`file extension is required`);await d.onInitialize?.(f.extension);let p=await this.resolveSimpleId(f.url,f.openOptions);await d.onOptionsParse?.(l);let m={url:f.url,openOptions:f.openOptions,extension:f.extension,id:p},h=await o?.prepareContext?.(m),g=new n.Context(u,{id:p,url:f.url,extension:f.extension,options:l,openOptions:f.openOptions,...o?.contextInit,...h});o?.attachContext?.(g);let{url:_,abortController:v}=s.formatParserUrl(f.url,f.extension,f.openOptions);o?.onAbortController?.(v);let y=await c.createFileParser(_,f.extension);if(await y.load({measureFilePercentage:o?.measureFilePercentage}),o?.isCancelled?.())throw Error(`User cancelled task`);let b=s.formatLocation(f.openOptions?.location,f.extension),x=b.location,S=b.percentage;if(!(x!=null||!isNaN(S)&&S<=1&&S>=0))try{x=await d.onLocationRequest?.(p)??new t.FileLocation(`0`,1,`ratio`)}catch{x=new t.FileLocation(`0`,1,`ratio`)}await o?.afterParserReady?.(f.extension);let C=typeof f.openOptions?.fileName==`string`?f.openOptions.fileName.trim():``,w=i.formatMetadata(await y.getMetadata(),f.url,f.extension,C),T=f.openOptions?.metadata,E=e.fillMetadata(w,T);return T?.fileName&&typeof T.fileName==`string`&&T.fileName.trim()?E.fileName=T.fileName.trim():C&&!i.isUriLikeBookTitle(C)&&(E.fileName=C),g.metadata=E,await d.onFileParsed?.(y),{url:f.url,openOptions:f.openOptions,extension:f.extension,id:p,fileParser:y,metadata:E,context:g,abortController:v,location:x,percentage:S}}async resolveSimpleId(e,t){let n=typeof t?.id==`string`?t.id.trim():``;if(n)return n;if(e instanceof r.FilePackage){let t=typeof e.id==`string`?e.id.trim():``;if(t)return t}let i=await this.deps.services.get(`simpleIdProvider`);return i?i.getSimpleId(e):this.deps.inputFormatter.getSimpleId(e,t?.id)}};exports.FileLoadPipeline=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../Metadata.cjs"),t=require("../progress/Progress.cjs"),n=require("../Context.cjs"),r=require("../IFileParser.cjs"),i=require("./metadata.cjs");var a=class{constructor(e){this.deps=e}async load(r,a,o){let{inputFormatter:s,mediaTypeRegistry:c,options:l,events:u,lifecycle:d}=this.deps;s.guardUrl(r);let f=await s.formatInputParameters(r,a);if(!f.extension)throw Error(`file extension is required`);await d.onInitialize?.(f.extension);let p=await this.resolveSimpleId(f.url,f.openOptions);await d.onOptionsParse?.(l);let m={url:f.url,openOptions:f.openOptions,extension:f.extension,id:p},h=await o?.prepareContext?.(m),g=new n.Context(u,{id:p,url:f.url,extension:f.extension,options:l,openOptions:f.openOptions,...o?.contextInit,...h});o?.attachContext?.(g);let{url:_,abortController:v}=s.formatParserUrl(f.url,f.extension,f.openOptions);o?.onAbortController?.(v);let y=await c.createFileParser(_,f.extension);if(await y.load({measureFilePercentage:o?.measureFilePercentage}),o?.isCancelled?.())throw Error(`User cancelled task`);let b=s.formatLocation(f.openOptions?.location,f.extension),x=b.location,S=b.percentage;if(!(x!=null||!isNaN(S)&&S<=1&&S>=0))try{x=await d.onLocationRequest?.(p)??new t.FileLocation(`0`,1,`ratio`)}catch{x=new t.FileLocation(`0`,1,`ratio`)}await o?.afterParserReady?.(f.extension);let C=typeof f.openOptions?.fileName==`string`?f.openOptions.fileName.trim():``,w=i.formatMetadata(await y.getMetadata(),f.url,f.extension,C),T=f.openOptions?.metadata,E=e.fillMetadata(w,T);return T?.fileName&&typeof T.fileName==`string`&&T.fileName.trim()?E.fileName=T.fileName.trim():C&&!i.isUriLikeBookTitle(C)&&(E.fileName=C),g.metadata=E,await d.onFileParsed?.(y),{url:f.url,openOptions:f.openOptions,extension:f.extension,id:p,fileParser:y,metadata:E,context:g,abortController:v,location:x,percentage:S}}async resolveSimpleId(e,t){let n=typeof t?.id==`string`?t.id.trim():``;if(n)return n;if(e instanceof r.FilePackage){let t=typeof e.id==`string`?e.id.trim():``;if(t)return t}let i=await this.deps.services.get(`simpleIdProvider`);if(i)return i.getSimpleId(e);throw Error(`simpleIdProvider is not registered`)}};exports.FileLoadPipeline=a;
@@ -64,7 +64,8 @@ var o = class {
64
64
  if (t) return t;
65
65
  }
66
66
  let i = await this.deps.services.get("simpleIdProvider");
67
- return i ? i.getSimpleId(e) : this.deps.inputFormatter.getSimpleId(e, t?.id);
67
+ if (i) return i.getSimpleId(e);
68
+ throw Error("simpleIdProvider is not registered");
68
69
  }
69
70
  };
70
71
  //#endregion
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../common/object.cjs"),t=require("../common/uuid.cjs"),n=require("../common/text.cjs"),r=require("../common/url.cjs"),i=require("../common/path.cjs"),a=require("../OpenOptions.cjs"),o=require("../progress/Progress.cjs"),s=require("../IFileParser.cjs"),c=require("../crypto/MD5.cjs"),l=require("../html/finder.cjs");var u=class{constructor(r,i){this.services=r,this.options=i,this.isFilePackageLike=e=>typeof e!=`object`||!e?!1:e instanceof s.FilePackage?!0:Array.isArray(e)||e instanceof ArrayBuffer||e instanceof Uint8Array||e instanceof Blob||typeof FileSystemFileHandle<`u`&&e instanceof FileSystemFileHandle?!1:`fileUrl`in e||`spineFiles`in e,this.getSimpleId=async(e,r)=>{let i=r??``;if(!i&&e instanceof s.FilePackage&&(i=e.id),i)return i;if(n.isNullOrWhiteSpace(i)){if(typeof e==`string`||e instanceof ArrayBuffer||e instanceof Uint8Array||e instanceof Blob||globalThis.FileSystemFileHandle&&e instanceof FileSystemFileHandle)i=await c.computeSimpleId(e);else if(e instanceof s.FilePackage){if(e.id)i=e.id;else throw Error(`Missing id in FilePackage`)}else i=t.getUuid()}return i},this.formatLocation=(t,r)=>{let i,a;if(!t)return{location:i,percentage:a};if(t instanceof o.FileLocation)i=t;else if(Object.prototype.toString.call(t)===`[object Object]`){let n=JSON.parse(JSON.stringify(t));if(n.url)return{location:e.deepClone(n),percentage:a}}else if(typeof t==`number`)!isNaN(a)&&a<=1&&a>=0&&(a=t);else if(typeof t==`string`&&!n.isNullOrWhiteSpace(t)){let e=!1;if(t.trim().indexOf(`{`)>=0)try{i=JSON.parse(t.trim()),e=!0}catch{e=!1}if(!e){let e=t.split(/[-_]/);if(e.length==1){let e=parseFloat(t);!isNaN(e)&&e<=1&&e>=0?a=e:!isNaN(e)&&r===`.pdf`&&(i=new o.FileLocation(``,1,`page`),i.current=e)}else if(e.length==2){i=new o.FileLocation(e[0],1,`ratio`);let t=parseFloat(e[1]);if(isNaN(t)){let n=e[1].split(`@`);if(n.length>1){let e=n[0].toLowerCase();e==`char`?i.symbolType=e:i.symbolType=`custom`,t=parseFloat(n[1]),isNaN(t)||t<0?i.current=0:i.current=t}else i.current=0}else i.current=t<0?0:t}else if(e.length==3){i=new o.FileLocation(e[0],1,`ratio`),i.tagName=e[1];let t=parseInt(e[2]);isNaN(t)||t<0?i.tagIndex=0:i.tagIndex=t}}}return{location:i,percentage:a}}}formatOpenOptions(e){let t=Object.assign(new a.OpenOptions,e);return t||=new a.OpenOptions,Object.keys(t).forEach(e=>{(t[e]===null||t[e]===void 0||t[e]===``)&&delete t[e]}),t}async getOpenUrl(e,t){let n=e;if(!this.isValidFileUrl(e)){let e=await this.services.get(`fileUrlProvider`,!1);if(!e)return;n=await e.getUrl(t)}return this.formatUrl(n)}async formatInputParameters(e,t){let n=await this.getOpenUrl(e,t),r=this.formatOpenOptions(t);return{url:n,openOptions:r,extension:this.formatExtension(n,r.extension)}}guardUrl(e){if(!this.isValidFileUrl(e)&&!this.services.has(`fileUrlProvider`))throw Error(`FileUrlProvider is not registered`)}formatUrl(e){return this.isFilePackageLike(e)&&!(e instanceof s.FilePackage)&&(e=Object.assign(new s.FilePackage,e)),e}isValidFileUrl(e){return e?typeof e==`string`||e instanceof Array||e instanceof s.FilePackage||e instanceof ArrayBuffer||e instanceof Uint8Array||e instanceof Blob||globalThis.FileSystemFileHandle&&e instanceof FileSystemFileHandle?!0:(typeof e==`object`&&Object.keys(e).length,!1):!1}formatReaderWrapper(e){let t;return t=typeof e==`string`?document.querySelector(e):e,t instanceof t.ownerDocument.defaultView.window.HTMLHtmlElement&&(t=l.getDocumentBody(t.ownerDocument)),t.style.overflow=`hidden`,t.style.position=`relative`,t}formatExtension(e,t){let r=t??``;if(n.isNullOrWhiteSpace(r)){if(typeof e==`string`)r=i.getExtension(e)??``;else if(e instanceof Array){let t=e;if(t.length==0)throw Error(`multiUrls is required`);r=i.getExtension(t[0])??``}else e instanceof s.FilePackage?n.isNullOrWhiteSpace(e.extension)?!n.isNullOrWhiteSpace(e.fileUrl)&&typeof e.fileUrl==`string`&&(r=i.getExtension(e.fileUrl)):r=e.extension:globalThis.FileSystemFileHandle&&e instanceof FileSystemFileHandle&&(r=i.getExtension(e.name))}return r.startsWith(`.`)||(r=`.`+r),r?.toLowerCase()}formatParserUrl(e,t,n){let i;e instanceof s.FilePackage||e instanceof Array?i=e:(i=new s.FilePackage,i.fileUrl=e,i.extension=t);let{metadata:a,...o}=n;i=Object.assign(i,o);let c;return(typeof e==`string`||e?.fileUrl&&typeof e.fileUrl==`string`&&r.checkIsHttpUrl(e.fileUrl))&&(c=new AbortController,i.abortController=c),{url:i,abortController:c}}};exports.InputFormatter=u;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../common/object.cjs"),t=require("../common/text.cjs"),n=require("../common/url.cjs"),r=require("../common/path.cjs"),i=require("../OpenOptions.cjs"),a=require("../progress/Progress.cjs"),o=require("../IFileParser.cjs"),s=require("../html/finder.cjs");var c=class{constructor(n,r){this.services=n,this.options=r,this.isFilePackageLike=e=>typeof e!=`object`||!e?!1:e instanceof o.FilePackage?!0:Array.isArray(e)||e instanceof ArrayBuffer||e instanceof Uint8Array||e instanceof Blob||typeof FileSystemFileHandle<`u`&&e instanceof FileSystemFileHandle?!1:`fileUrl`in e||`spineFiles`in e,this.formatLocation=(n,r)=>{let i,o;if(!n)return{location:i,percentage:o};if(n instanceof a.FileLocation)i=n;else if(Object.prototype.toString.call(n)===`[object Object]`){let t=JSON.parse(JSON.stringify(n));if(t.url)return{location:e.deepClone(t),percentage:o}}else if(typeof n==`number`)!isNaN(o)&&o<=1&&o>=0&&(o=n);else if(typeof n==`string`&&!t.isNullOrWhiteSpace(n)){let e=!1;if(n.trim().indexOf(`{`)>=0)try{i=JSON.parse(n.trim()),e=!0}catch{e=!1}if(!e){let e=n.split(/[-_]/);if(e.length==1){let e=parseFloat(n);!isNaN(e)&&e<=1&&e>=0?o=e:!isNaN(e)&&r===`.pdf`&&(i=new a.FileLocation(``,1,`page`),i.current=e)}else if(e.length==2){i=new a.FileLocation(e[0],1,`ratio`);let t=parseFloat(e[1]);if(isNaN(t)){let n=e[1].split(`@`);if(n.length>1){let e=n[0].toLowerCase();e==`char`?i.symbolType=e:i.symbolType=`custom`,t=parseFloat(n[1]),isNaN(t)||t<0?i.current=0:i.current=t}else i.current=0}else i.current=t<0?0:t}else if(e.length==3){i=new a.FileLocation(e[0],1,`ratio`),i.tagName=e[1];let t=parseInt(e[2]);isNaN(t)||t<0?i.tagIndex=0:i.tagIndex=t}}}return{location:i,percentage:o}}}formatOpenOptions(e){let t=Object.assign(new i.OpenOptions,e);return t||=new i.OpenOptions,Object.keys(t).forEach(e=>{(t[e]===null||t[e]===void 0||t[e]===``)&&delete t[e]}),t}async getOpenUrl(e,t){let n=e;if(!this.isValidFileUrl(e)){let e=await this.services.get(`fileUrlProvider`,!1);if(!e)return;n=await e.getUrl(t)}return this.formatUrl(n)}async formatInputParameters(e,t){let n=await this.getOpenUrl(e,t),r=this.formatOpenOptions(t);return{url:n,openOptions:r,extension:this.formatExtension(n,r.extension)}}guardUrl(e){if(!this.isValidFileUrl(e)&&!this.services.has(`fileUrlProvider`))throw Error(`FileUrlProvider is not registered`)}formatUrl(e){return this.isFilePackageLike(e)&&!(e instanceof o.FilePackage)&&(e=Object.assign(new o.FilePackage,e)),e}isValidFileUrl(e){return e?typeof e==`string`||e instanceof Array||e instanceof o.FilePackage||e instanceof ArrayBuffer||e instanceof Uint8Array||e instanceof Blob||globalThis.FileSystemFileHandle&&e instanceof FileSystemFileHandle?!0:(typeof e==`object`&&Object.keys(e).length,!1):!1}formatReaderWrapper(e){let t;return t=typeof e==`string`?document.querySelector(e):e,t instanceof t.ownerDocument.defaultView.window.HTMLHtmlElement&&(t=s.getDocumentBody(t.ownerDocument)),t.style.overflow=`hidden`,t.style.position=`relative`,t}formatExtension(e,n){let i=n??``;if(t.isNullOrWhiteSpace(i)){if(typeof e==`string`)i=r.getExtension(e)??``;else if(e instanceof Array){let t=e;if(t.length==0)throw Error(`multiUrls is required`);i=r.getExtension(t[0])??``}else e instanceof o.FilePackage?t.isNullOrWhiteSpace(e.extension)?!t.isNullOrWhiteSpace(e.fileUrl)&&typeof e.fileUrl==`string`&&(i=r.getExtension(e.fileUrl)):i=e.extension:globalThis.FileSystemFileHandle&&e instanceof FileSystemFileHandle&&(i=r.getExtension(e.name))}return i.startsWith(`.`)||(i=`.`+i),i?.toLowerCase()}formatParserUrl(e,t,r){let i;e instanceof o.FilePackage||e instanceof Array?i=e:(i=new o.FilePackage,i.fileUrl=e,i.extension=t);let{metadata:a,...s}=r;i=Object.assign(i,s);let c;return(typeof e==`string`||e?.fileUrl&&typeof e.fileUrl==`string`&&n.checkIsHttpUrl(e.fileUrl))&&(c=new AbortController,i.abortController=c),{url:i,abortController:c}}};exports.InputFormatter=c;
@@ -20,7 +20,6 @@ export declare class InputFormatter {
20
20
  private isValidFileUrl;
21
21
  formatReaderWrapper(container: string | HTMLElement): HTMLElement;
22
22
  private formatExtension;
23
- getSimpleId: (url: any, existId?: string) => Promise<string>;
24
23
  formatLocation: (inputLocation: FileLocation | number | string, extension: string) => {
25
24
  location: FileLocation;
26
25
  percentage: number;
@@ -1,55 +1,42 @@
1
1
  import { deepClone as e } from "../common/object.mjs";
2
- import { getUuid as t } from "../common/uuid.mjs";
3
- import { isNullOrWhiteSpace as n } from "../common/text.mjs";
4
- import { checkIsHttpUrl as r } from "../common/url.mjs";
5
- import { getExtension as i } from "../common/path.mjs";
6
- import { OpenOptions as a } from "../OpenOptions.mjs";
7
- import { FileLocation as o } from "../progress/Progress.mjs";
8
- import { FilePackage as s } from "../IFileParser.mjs";
9
- import { computeSimpleId as c } from "../crypto/MD5.mjs";
10
- import { getDocumentBody as l } from "../html/finder.mjs";
2
+ import { isNullOrWhiteSpace as t } from "../common/text.mjs";
3
+ import { checkIsHttpUrl as n } from "../common/url.mjs";
4
+ import { getExtension as r } from "../common/path.mjs";
5
+ import { OpenOptions as i } from "../OpenOptions.mjs";
6
+ import { FileLocation as a } from "../progress/Progress.mjs";
7
+ import { FilePackage as o } from "../IFileParser.mjs";
8
+ import { getDocumentBody as s } from "../html/finder.mjs";
11
9
  //#region kernal/pipelines/InputFormatter.ts
12
- var u = class {
13
- constructor(r, i) {
14
- this.services = r, this.options = i, this.isFilePackageLike = (e) => typeof e != "object" || !e ? !1 : e instanceof s ? !0 : Array.isArray(e) || e instanceof ArrayBuffer || e instanceof Uint8Array || e instanceof Blob || typeof FileSystemFileHandle < "u" && e instanceof FileSystemFileHandle ? !1 : "fileUrl" in e || "spineFiles" in e, this.getSimpleId = async (e, r) => {
15
- let i = r ?? "";
16
- if (!i && e instanceof s && (i = e.id), i) return i;
17
- if (n(i)) {
18
- if (typeof e == "string" || e instanceof ArrayBuffer || e instanceof Uint8Array || e instanceof Blob || globalThis.FileSystemFileHandle && e instanceof FileSystemFileHandle) i = await c(e);
19
- else if (e instanceof s) {
20
- if (e.id) i = e.id;
21
- else throw Error("Missing id in FilePackage");
22
- } else i = t();
23
- }
24
- return i;
25
- }, this.formatLocation = (t, r) => {
26
- let i, a;
27
- if (!t) return {
10
+ var c = class {
11
+ constructor(n, r) {
12
+ this.services = n, this.options = r, this.isFilePackageLike = (e) => typeof e != "object" || !e ? !1 : e instanceof o ? !0 : Array.isArray(e) || e instanceof ArrayBuffer || e instanceof Uint8Array || e instanceof Blob || typeof FileSystemFileHandle < "u" && e instanceof FileSystemFileHandle ? !1 : "fileUrl" in e || "spineFiles" in e, this.formatLocation = (n, r) => {
13
+ let i, o;
14
+ if (!n) return {
28
15
  location: i,
29
- percentage: a
16
+ percentage: o
30
17
  };
31
- if (t instanceof o) i = t;
32
- else if (Object.prototype.toString.call(t) === "[object Object]") {
33
- let n = JSON.parse(JSON.stringify(t));
34
- if (n.url) return {
35
- location: e(n),
36
- percentage: a
18
+ if (n instanceof a) i = n;
19
+ else if (Object.prototype.toString.call(n) === "[object Object]") {
20
+ let t = JSON.parse(JSON.stringify(n));
21
+ if (t.url) return {
22
+ location: e(t),
23
+ percentage: o
37
24
  };
38
- } else if (typeof t == "number") !isNaN(a) && a <= 1 && a >= 0 && (a = t);
39
- else if (typeof t == "string" && !n(t)) {
25
+ } else if (typeof n == "number") !isNaN(o) && o <= 1 && o >= 0 && (o = n);
26
+ else if (typeof n == "string" && !t(n)) {
40
27
  let e = !1;
41
- if (t.trim().indexOf("{") >= 0) try {
42
- i = JSON.parse(t.trim()), e = !0;
28
+ if (n.trim().indexOf("{") >= 0) try {
29
+ i = JSON.parse(n.trim()), e = !0;
43
30
  } catch {
44
31
  e = !1;
45
32
  }
46
33
  if (!e) {
47
- let e = t.split(/[-_]/);
34
+ let e = n.split(/[-_]/);
48
35
  if (e.length == 1) {
49
- let e = parseFloat(t);
50
- !isNaN(e) && e <= 1 && e >= 0 ? a = e : !isNaN(e) && r === ".pdf" && (i = new o("", 1, "page"), i.current = e);
36
+ let e = parseFloat(n);
37
+ !isNaN(e) && e <= 1 && e >= 0 ? o = e : !isNaN(e) && r === ".pdf" && (i = new a("", 1, "page"), i.current = e);
51
38
  } else if (e.length == 2) {
52
- i = new o(e[0], 1, "ratio");
39
+ i = new a(e[0], 1, "ratio");
53
40
  let t = parseFloat(e[1]);
54
41
  if (isNaN(t)) {
55
42
  let n = e[1].split("@");
@@ -59,7 +46,7 @@ var u = class {
59
46
  } else i.current = 0;
60
47
  } else i.current = t < 0 ? 0 : t;
61
48
  } else if (e.length == 3) {
62
- i = new o(e[0], 1, "ratio"), i.tagName = e[1];
49
+ i = new a(e[0], 1, "ratio"), i.tagName = e[1];
63
50
  let t = parseInt(e[2]);
64
51
  isNaN(t) || t < 0 ? i.tagIndex = 0 : i.tagIndex = t;
65
52
  }
@@ -67,13 +54,13 @@ var u = class {
67
54
  }
68
55
  return {
69
56
  location: i,
70
- percentage: a
57
+ percentage: o
71
58
  };
72
59
  };
73
60
  }
74
61
  formatOpenOptions(e) {
75
- let t = Object.assign(new a(), e);
76
- return t ||= new a(), Object.keys(t).forEach((e) => {
62
+ let t = Object.assign(new i(), e);
63
+ return t ||= new i(), Object.keys(t).forEach((e) => {
77
64
  (t[e] === null || t[e] === void 0 || t[e] === "") && delete t[e];
78
65
  }), t;
79
66
  }
@@ -98,38 +85,38 @@ var u = class {
98
85
  if (!this.isValidFileUrl(e) && !this.services.has("fileUrlProvider")) throw Error("FileUrlProvider is not registered");
99
86
  }
100
87
  formatUrl(e) {
101
- return this.isFilePackageLike(e) && !(e instanceof s) && (e = Object.assign(new s(), e)), e;
88
+ return this.isFilePackageLike(e) && !(e instanceof o) && (e = Object.assign(new o(), e)), e;
102
89
  }
103
90
  isValidFileUrl(e) {
104
- return e ? typeof e == "string" || e instanceof Array || e instanceof s || e instanceof ArrayBuffer || e instanceof Uint8Array || e instanceof Blob || globalThis.FileSystemFileHandle && e instanceof FileSystemFileHandle ? !0 : (typeof e == "object" && Object.keys(e).length, !1) : !1;
91
+ return e ? typeof e == "string" || e instanceof Array || e instanceof o || e instanceof ArrayBuffer || e instanceof Uint8Array || e instanceof Blob || globalThis.FileSystemFileHandle && e instanceof FileSystemFileHandle ? !0 : (typeof e == "object" && Object.keys(e).length, !1) : !1;
105
92
  }
106
93
  formatReaderWrapper(e) {
107
94
  let t;
108
- return t = typeof e == "string" ? document.querySelector(e) : e, t instanceof t.ownerDocument.defaultView.window.HTMLHtmlElement && (t = l(t.ownerDocument)), t.style.overflow = "hidden", t.style.position = "relative", t;
95
+ return t = typeof e == "string" ? document.querySelector(e) : e, t instanceof t.ownerDocument.defaultView.window.HTMLHtmlElement && (t = s(t.ownerDocument)), t.style.overflow = "hidden", t.style.position = "relative", t;
109
96
  }
110
- formatExtension(e, t) {
111
- let r = t ?? "";
112
- if (n(r)) {
113
- if (typeof e == "string") r = i(e) ?? "";
97
+ formatExtension(e, n) {
98
+ let i = n ?? "";
99
+ if (t(i)) {
100
+ if (typeof e == "string") i = r(e) ?? "";
114
101
  else if (e instanceof Array) {
115
102
  let t = e;
116
103
  if (t.length == 0) throw Error("multiUrls is required");
117
- r = i(t[0]) ?? "";
118
- } else e instanceof s ? n(e.extension) ? !n(e.fileUrl) && typeof e.fileUrl == "string" && (r = i(e.fileUrl)) : r = e.extension : globalThis.FileSystemFileHandle && e instanceof FileSystemFileHandle && (r = i(e.name));
104
+ i = r(t[0]) ?? "";
105
+ } else e instanceof o ? t(e.extension) ? !t(e.fileUrl) && typeof e.fileUrl == "string" && (i = r(e.fileUrl)) : i = e.extension : globalThis.FileSystemFileHandle && e instanceof FileSystemFileHandle && (i = r(e.name));
119
106
  }
120
- return r.startsWith(".") || (r = "." + r), r?.toLowerCase();
107
+ return i.startsWith(".") || (i = "." + i), i?.toLowerCase();
121
108
  }
122
- formatParserUrl(e, t, n) {
109
+ formatParserUrl(e, t, r) {
123
110
  let i;
124
- e instanceof s || e instanceof Array ? i = e : (i = new s(), i.fileUrl = e, i.extension = t);
125
- let { metadata: a, ...o } = n;
126
- i = Object.assign(i, o);
111
+ e instanceof o || e instanceof Array ? i = e : (i = new o(), i.fileUrl = e, i.extension = t);
112
+ let { metadata: a, ...s } = r;
113
+ i = Object.assign(i, s);
127
114
  let c;
128
- return (typeof e == "string" || e?.fileUrl && typeof e.fileUrl == "string" && r(e.fileUrl)) && (c = new AbortController(), i.abortController = c), {
115
+ return (typeof e == "string" || e?.fileUrl && typeof e.fileUrl == "string" && n(e.fileUrl)) && (c = new AbortController(), i.abortController = c), {
129
116
  url: i,
130
117
  abortController: c
131
118
  };
132
119
  }
133
120
  };
134
121
  //#endregion
135
- export { u as InputFormatter };
122
+ export { c as InputFormatter };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.keys({httpClient:!0,internalUrlBuilder:!0,fileUrlParser:!0,crypto:!0,fileUrlProvider:!0,fileDecrypter:!0,fileProvider:!0,simpleIdProvider:!0}),t=Object.keys({notifier:!0,loading:!0,themeProvider:!0,wallpaperProvider:!0,loadLayer:!0,fullscreen:!0}),n=class{constructor(e,t,n){this.locale=e,this.events=t,this.readerInfo=n,this.services=new Map}add(e,t){this.services.set(e,t)}async get(e,t){let n=this.services.get(e);if(n===void 0){if(t)throw Error(`Service "${String(e)}" is not registered.`);return}return await n()}has(e){return this.services.has(e)}remove(e){this.services.delete(e)}clear(){this.services.clear()}asReaderServices(){return this}registerCoreServices(){this.has(`httpClient`)||this.add(`httpClient`,async()=>{let{HttpClient:e}=await Promise.resolve().then(()=>require("../network/HttpClient.cjs"));return new e}),this.has(`crypto`)||this.add(`crypto`,async()=>{let{WebCrypto:e}=await Promise.resolve().then(()=>require("../crypto/WebCrypto.cjs"));return new e}),this.has(`internalUrlBuilder`)||this.add(`internalUrlBuilder`,async()=>{let{DefaultInternalUrlBuilder:e}=await Promise.resolve().then(()=>require("./internalUrlBuilder/DefaultInternalUrlBuilder.cjs"));return new e(this.readerInfo.baseUrl,this.readerInfo.preventCacheHash)}),this.has(`fileUrlParser`)||this.add(`fileUrlParser`,async()=>{let{DefaultFileUrlParser:e}=await Promise.resolve().then(()=>require("./fileUrlParser/DefaultFileUrlParser.cjs"));return new e(await this.get(`httpClient`,!0),await this.get(`internalUrlBuilder`,!0),this.locale)})}registerUiServices(){this.has(`notifier`)||this.add(`notifier`,async()=>{let{DefaultNotifier:e}=await Promise.resolve().then(()=>require("./notifier/DefaultNotifier.cjs"));return new e}),this.has(`loading`)||this.add(`loading`,async()=>{let{DefaultLoading:e}=await Promise.resolve().then(()=>require("./loading/DefaultLoading.cjs"));return new e(this.locale)}),this.has(`loadLayer`)||this.add(`loadLayer`,async()=>{let{HtmlLoadLayer:e}=await Promise.resolve().then(()=>require("./docLoadLayer/HtmlLoadLayer.cjs"));return new e(this.events,this.locale)})}};exports.CORE_SERVICE_KEYS=e,exports.ServiceCollection=n,exports.UI_SERVICE_KEYS=t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.keys({httpClient:!0,internalUrlBuilder:!0,fileUrlParser:!0,crypto:!0,fileUrlProvider:!0,fileDecrypter:!0,fileProvider:!0,simpleIdProvider:!0}),t=Object.keys({notifier:!0,loading:!0,themeProvider:!0,wallpaperProvider:!0,loadLayer:!0,fullscreen:!0}),n=class{constructor(e,t,n){this.locale=e,this.events=t,this.readerInfo=n,this.services=new Map}add(e,t){this.services.set(e,t)}async get(e,t){let n=this.services.get(e);if(n===void 0){if(t)throw Error(`Service "${String(e)}" is not registered.`);return}return await n()}has(e){return this.services.has(e)}remove(e){this.services.delete(e)}clear(){this.services.clear()}asReaderServices(){return this}registerCoreServices(){this.has(`httpClient`)||this.add(`httpClient`,async()=>{let{HttpClient:e}=await Promise.resolve().then(()=>require("../network/HttpClient.cjs"));return new e}),this.has(`internalUrlBuilder`)||this.add(`internalUrlBuilder`,async()=>{let{DefaultInternalUrlBuilder:e}=await Promise.resolve().then(()=>require("./internalUrlBuilder/DefaultInternalUrlBuilder.cjs"));return new e(this.readerInfo.baseUrl,this.readerInfo.preventCacheHash)}),this.has(`fileUrlParser`)||this.add(`fileUrlParser`,async()=>{let{DefaultFileUrlParser:e}=await Promise.resolve().then(()=>require("./fileUrlParser/DefaultFileUrlParser.cjs"));return new e(await this.get(`httpClient`,!0),await this.get(`internalUrlBuilder`,!0),this.locale)})}registerUiServices(){this.has(`notifier`)||this.add(`notifier`,async()=>{let{DefaultNotifier:e}=await Promise.resolve().then(()=>require("./notifier/DefaultNotifier.cjs"));return new e}),this.has(`loading`)||this.add(`loading`,async()=>{let{DefaultLoading:e}=await Promise.resolve().then(()=>require("./loading/DefaultLoading.cjs"));return new e(this.locale)}),this.has(`loadLayer`)||this.add(`loadLayer`,async()=>{let{HtmlLoadLayer:e}=await Promise.resolve().then(()=>require("./docLoadLayer/HtmlLoadLayer.cjs"));return new e(this.events,this.locale)})}};exports.CORE_SERVICE_KEYS=e,exports.ServiceCollection=n,exports.UI_SERVICE_KEYS=t;
@@ -46,9 +46,6 @@ var e = Object.keys({
46
46
  this.has("httpClient") || this.add("httpClient", async () => {
47
47
  let { HttpClient: e } = await import("../network/HttpClient.mjs");
48
48
  return new e();
49
- }), this.has("crypto") || this.add("crypto", async () => {
50
- let { WebCrypto: e } = await import("../crypto/WebCrypto.mjs");
51
- return new e();
52
49
  }), this.has("internalUrlBuilder") || this.add("internalUrlBuilder", async () => {
53
50
  let { DefaultInternalUrlBuilder: e } = await import("./internalUrlBuilder/DefaultInternalUrlBuilder.mjs");
54
51
  return new e(this.readerInfo.baseUrl, this.readerInfo.preventCacheHash);
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/EventNames.cjs"),t=require("../../../../kernal/common/uuid.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),r=require("../../../../kernal/Constants.cjs"),i=require("../../../../kernal/html/finder.cjs"),a=require("../../../../kernal/html/dom.cjs"),o=require("../../../../kernal/web/scheduler.cjs"),s=require("../../../../kernal/html/geometry.cjs"),c=require("../../HtmlSettings.cjs"),l=require("../../../base/renderer/BaseDocument.cjs"),u=require("../../../base/renderer/eventKeys.cjs"),d=require("../visibilityCandidates.cjs"),f=require("../layout/resolveLayoutRoute.cjs"),p=require("../../fileParser/IHtmlFileParser.cjs"),m=require("../html/template.cjs"),h=require("./HtmlPageCalculator.cjs"),g=require("./HtmlSymbolCalclator.cjs"),_=require("./HtmlDocumentResizeObserver.cjs"),v=require("../location/HtmlLayoutStatePreserver.cjs"),y=require("../location/remapStoredPageNumber.cjs");var b=class extends l.BaseDocument{constructor(t,n,r,i,a,s){super(t,r,i,a),this.options=s,this.eventKeyMap=u.getEventKeyMap(),this.visibilityCandidates=null,this.callbacks=[],this.retainLoadingLayer=!1,this.pendingPageLayoutState=null,this.pageStripConcealed=!1,this.waitForRevealPaint=async()=>{await o.yieldToMain(),await new Promise(e=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>e())})}),await new Promise(e=>{window.setTimeout(e,120)}),await this.waitForVisibleImagesReady()},this.waitForVisibleImagesReady=async()=>{let e=this.getContentContainer(),t=e?.ownerDocument?.defaultView;if(!e||!t)return;let n=[...e.querySelectorAll(`img`),...e.getElementsByTagName(`image`)];if(n.length==0)return;let r=t.innerHeight||e.clientHeight,i=n.filter(e=>{let t=e.getBoundingClientRect();return t.bottom>-200&&t.top<r+200});i.length!=0&&await Promise.race([Promise.all(i.map(e=>this.waitForImageReady(e))),new Promise(e=>{window.setTimeout(e,800)})])},this.waitForImageReady=e=>this.isImageReady(e)?Promise.resolve():new Promise(t=>{let n=!1,r=()=>{n||(n=!0,e.removeEventListener(`load`,r),e.removeEventListener(`error`,r),i.disconnect(),t())},i=new MutationObserver(()=>{this.isImageReady(e)&&r()});i.observe(e,{attributes:!0,attributeFilter:[`src`,`href`,`data-load-state`]}),e.addEventListener(`load`,r),e.addEventListener(`error`,r),window.setTimeout(r,800)}),this.isImageReady=e=>{let t=e.getAttribute(`data-load-state`);if(t==`loaded`||t==`fail`)return!0;let n=e.ownerDocument.defaultView?.window.HTMLImageElement;if(!n||!(e instanceof n))return!1;let r=e.currentSrc||e.src;return!r||r.startsWith(`data:image/svg+xml`)?!1:e.complete&&e.naturalWidth>0},this.bringLoadingLayerToFront=()=>{let e=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);e&&this.wrapperContainer.appendChild(e)},this.fadeOutCover=async(e=200)=>{let t=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);if(!t)return;let n=Math.max(0,e);t.style.pointerEvents=`none`,t.style.transition=`opacity ${n}ms ease`,t.style.opacity=`0`,await new Promise(e=>{let r=!1,i=()=>{r||(r=!0,t.removeEventListener(`transitionend`,i),e())};t.addEventListener(`transitionend`,i),window.setTimeout(i,n+50)})},this.releaseLoadingLayer=async()=>{this.loadingLayer?.removeLoadingLayer(),await this.loadingLayer?.dispose(),this.loadingLayer=void 0},this.buildLoadingContent=async()=>{let e=await this.getFormattedVirtualDocument(),t=this.owner.getRenderer()?.documentPreprocesses??[];for(let e of t)try{await e(this)}catch(t){this.logger.error(`preprocess`,`function`,e?.name,t)}let n=e.documentElement.outerHTML.replace(/<([^<]*)\?xml([^>]*)\?.*?>/i,``);return n.match(/<!DOCTYPE[^>]*>/i)||(n=`<!DOCTYPE html>`+n),n},this.processAfterLoaded=async()=>{let t=this.getContentContainer();if(!t){this.revealPendingPageStrip();return}t.setAttribute(`data-url`,this.url);let n=this.pendingPageLayoutState??this.captureLayoutState();this.pendingPageLayoutState=null;let r=f.getLayoutGeometry(this.options).iframeGrow==`width`;r||this.wrapperContainer.classList.remove(c.HtmlSettings.FileContentContainerHeightClassName);try{let e=this.owner.getRenderer()?.documentPostprocesses??[];for(let t of e)try{await t(this),await o.yieldToMain()}catch(e){this.logger.error(`postprocess`,`function`,t?.name,e)}await this.layoutStatePreserver.waitUntilPageTransformStable(),this.resetLayoutSizes(),r&&this.wrapperContainer.classList.remove(c.HtmlSettings.FileContentContainerHeightClassName),await this.layoutStatePreserver.restore(n)}finally{this.revealPendingPageStrip()}this.retainLoadingLayer||await this.releaseLoadingLayer(),this.loadStatus=`success`,this.visibilityCandidates=null,this.bindDocumentEvents(),this.owner.events.emit(e.EventNames.DocumentLoad,this),this.resizeObserver.observeIframeSize(async()=>{let e=f.getLayoutGeometry(this.options),t=y.shouldKeepPageEndOnContentGrow(this.owner.context.currentLocation,this.url),n=e.restoresScrollAfterResize||t,r=n?this.captureLayoutState():null;if(this.resetLayoutSizes(),e.flipMode==`page`&&this.pageCalculator.calcNumberOfPages(!0),n&&r&&(await this.restoreLayoutState(r),t)){let e=this.internalGetNumberOfPages(),t=this.owner.context.currentLocation;t?.url==this.url&&(t.current=e,t.total=e)}}),this.loadCompleted(!0)},this.loadCompleted=e=>{for(let t=0;t<this.callbacks.length;t++)try{e?this.callbacks[t].resolve():this.callbacks[t].reject()}catch{}this.callbacks=[]},this.capture=!0,this.eventListener=e=>{let t=this.eventKeyMap.get(e.type);t&&this.owner.events.emit(t,e,this)},this.pageCalculator=new h.HtmlPageCalculator(this,n,s),this.symbolCalclator=new g.HtmlSymbolCalclator(this,p.asHtmlFileParser(r).symbolMeasure),this.layoutStatePreserver=new v.HtmlLayoutStatePreserver(this,n,s),this.logger=this.owner.loggerFactory.getLogger(this.constructor.name),this.resizeObserver=new _.HtmlDocumentResizeObserver(this,this.owner.events)}get inIframe(){return!0}async load(){await new Promise(async(i,s)=>{if(this.loadStatus==`success`){i();return}if(this.callbacks.push({resolve:i,reject:s}),this.loadStatus!=`loading`){this.loadStatus=`loading`,this.loadingLayer=await this.owner.services.get(`loadLayer`),this.loadingLayer?.setDoc(this),a.emptyElement(this.wrapperContainer),this.loadingLayer.removeLoadingLayer(),this.loadingLayer.loadLoadingLayer(),await o.yieldToMain();try{if(this.inIframe){if(!this.iframe){let i=r.readerPrefixName+t.getUuid(!0);this.iframe=m.createIframe(this.wrapperContainer.ownerDocument,i,this.options.forceScroll,f.getLayoutGeometry(this.options)),this.options.forceScroll?this.iframe.removeAttribute(`scrolling`):this.iframe.setAttribute(`scrolling`,`no`);let a=await this.buildLoadingContent();await o.yieldToMain(),this.wrapperContainer.appendChild(this.iframe),this.bringLoadingLayerToFront(),await o.yieldToMain(),this.iframe.addEventListener(`load`,async()=>{await this.processAfterLoaded()},!1),this.iframe.addEventListener(`error`,t=>{this.revealPendingPageStrip(),this.retainLoadingLayer=!1,this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.logger.error(t),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t),this.loadCompleted(!0)},!1);let s=this.iframe.contentDocument,c=this.captureLayoutState(),l=f.getLayoutGeometry(this.options).flipMode==`page`&&n.BrowserCapabilities.isSafari();l&&(this.pendingPageLayoutState=c,this.concealPageStrip()),this.options.preferSrcdoc&&`srcdoc`in this.iframe||!(`write`in s)?this.iframe.srcdoc=a:(s.open(),s.write(a),s.close()),l||await this.restoreLayoutState(c),await o.yieldToMain()}}else{let e=await this.buildLoadingContent();a.setElementHtml(this.wrapperContainer,e),await this.processAfterLoaded(),await o.yieldToMain()}}catch(t){this.revealPendingPageStrip(),this.logger.error(t),this.retainLoadingLayer=!1,this.owner?.context?(this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t?.toString()),this.loadCompleted(!0)):(await this.releaseLoadingLayer(),this.loadCompleted(!0))}}})}prepareCoveredLoad(){this.retainLoadingLayer=!0}async revealCoveredLoad(){this.retainLoadingLayer=!1;try{await this.waitForRevealPaint(),await this.fadeOutCover()}finally{await this.releaseLoadingLayer()}}resetLayoutSizes(){this.resetIframeMinSize()}captureLayoutState(){return this.layoutStatePreserver.capture()}async restoreLayoutState(e){await this.layoutStatePreserver.restore(e)}concealPageStrip(){this.pageStripConcealed=!0,this.layoutStatePreserver.concealPageStrip()}revealPendingPageStrip(){this.pendingPageLayoutState=null,this.pageStripConcealed&&(this.pageStripConcealed=!1,this.layoutStatePreserver.revealPageStrip())}resetIframeMinSize(){let e=this.getContentRootElement();if(!e||!this.iframe)return;let t=f.getLayoutGeometry(this.options),n=i.getDocumentBody(e.ownerDocument);this.iframe.style.removeProperty(`transform`),this.iframe.style.removeProperty(`will-change`);let r=this.owner.getRenderer()?.getRendererContainer(),a=parseFloat(r?.getAttribute(`data-column-width`)??``)||Math.round(this.iframe.getBoundingClientRect().width),o=parseFloat(r?.getAttribute(`data-page-height`)??``)||Math.round(this.iframe.getBoundingClientRect().height),s=parseFloat(r?.getAttribute(`data-column-gap`)??``);t.sizeIframe({iframe:this.iframe,contentRoot:e,body:n,forceScroll:!!this.options.forceScroll,columnWidth:Number.isFinite(a)?Math.round(a):0,pageHeight:Number.isFinite(o)?Math.round(o):0,columnGap:Number.isFinite(s)&&s>0?s:0,parentContentHeight:this.getParentContentHeight(this.iframe.parentElement)}),t.useColumnLayout&&this.pageCalculator.calcNumberOfPages(!0)}getParentContentHeight(e){if(!e)return 0;let t=e.ownerDocument.defaultView?.getComputedStyle(e),n=parseFloat(t?.paddingTop??`0`)||0,r=parseFloat(t?.paddingBottom??`0`)||0;return Math.max(0,Math.round(e.clientHeight-n-r))}async getContent(){return this.docContent?this.docContent:(this.docContent=await(await this.fileParser.getTextDocument(this.url)).getPlaintext(),this.docContent.length>this.options.singleDocMaxSize?m.getTooBigHtmlTemplate(this.docContent.length):this.docContent)}async getFormattedVirtualDocument(){if(this.formattedVirtualDocument)return this.formattedVirtualDocument;let e=await this.fileParser.getTextDocument(this.url);return this.formattedVirtualDocument=await e.getFormattedDocument(),this.formattedVirtualDocument}async getText(e){return await(await this.fileParser.getTextDocument(this.url)).getPlaintext(e)}internalGetNumberOfPages(){let e=1;return this.getFlipMode()==`page`&&(e=this.pageCalculator.calcNumberOfPages()),e}async getNumberOfPages(){return await this.load(),this.internalGetNumberOfPages()}async getPageNumber(e){return this.pageCalculator.getPageNumber(e)}getContentRootElement(){return this.inIframe?this.iframe?.contentDocument?.documentElement:this.wrapperContainer}getContentContainer(){return this.inIframe?i.getDocumentBody(this.iframe?.contentDocument):this.wrapperContainer}async getVirtualContentContainer(e){if(e){let e=await this.fileParser.getTextDocument(this.url);return i.getDocumentBody(await e.getFormattedDocument())}let t=await this.getFormattedVirtualDocument();return i.getDocumentBody(t)}getVisibleElements(e){if(this.loadStatus!=`success`)return[];let t=this.getContentContainer(),n=t?.ownerDocument?.defaultView;if(!t||!n)return[];this.visibilityCandidates||=d.collectContentUnitElements(t,{htmlBlockTags:this.options.htmlBlockTags});let r=this.owner.getRenderer()?.getRendererContainer().getBoundingClientRect().top,i=s.resolveVisibleViewportInContentWindow(n,{topInset:r});return i?s.getOrderedElementsIntersectingRect(this.visibilityCandidates,i,{writingMode:f.getLayoutGeometry(this.options).writingMode,fullVisible:e}):[]}async dispose(){let t=this.captureLayoutState();this.owner.events.emit(e.EventNames.DocumentDisposing,this),this.unbindDocumentEvents(),this.resizeObserver.unobserveIframeSize(),this.callbacks?.splice(0),this.visibilityCandidates=null,this.retainLoadingLayer=!1,await this.releaseLoadingLayer();let n=this.getWrapperContainer();n.classList.add(c.HtmlSettings.FileContentContainerHeightClassName),this.iframe&&n.contains(this.iframe)&&n.removeChild(this.iframe),a.emptyElement(this.wrapperContainer),this.iframe=void 0,this.formattedVirtualDocument=null,await this.symbolCalclator.dispose(),await this.restoreLayoutState(t),await super.dispose()}bindDocumentEvents(){let e=this.inIframe?this.getContentContainer().ownerDocument:this.getContentRootElement();for(let t of this.eventKeyMap.keys())e.addEventListener(t,this.eventListener,this.capture)}unbindDocumentEvents(){let e=this.inIframe?this.getContentContainer()?.ownerDocument:this.getContentRootElement();if(e)for(let t of this.eventKeyMap.keys())e?.removeEventListener(t,this.eventListener,this.capture)}getFlipMode(){return this.options.forceScroll?`scroll`:this.options.flipMode}};exports.HtmlDocument=b;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/EventNames.cjs"),t=require("../../../../kernal/common/uuid.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),r=require("../../../../kernal/Constants.cjs"),i=require("../../../../kernal/html/finder.cjs"),a=require("../../../../kernal/html/dom.cjs"),o=require("../../../../kernal/web/scheduler.cjs"),s=require("../../../../kernal/html/geometry.cjs"),c=require("../../HtmlSettings.cjs"),l=require("../../../base/renderer/BaseDocument.cjs"),u=require("../visibilityCandidates.cjs"),d=require("../layout/resolveLayoutRoute.cjs"),f=require("../../fileParser/IHtmlFileParser.cjs"),p=require("../../../base/renderer/eventKeys.cjs"),m=require("../html/template.cjs"),h=require("./HtmlPageCalculator.cjs"),g=require("./HtmlSymbolCalclator.cjs"),_=require("./HtmlDocumentResizeObserver.cjs"),v=require("../location/HtmlLayoutStatePreserver.cjs"),y=require("../location/remapStoredPageNumber.cjs");var b=class extends l.BaseDocument{constructor(t,n,r,i,a,s){super(t,r,i,a),this.options=s,this.eventKeyMap=p.getEventKeyMap(),this.visibilityCandidates=null,this.callbacks=[],this.retainLoadingLayer=!1,this.pendingPageLayoutState=null,this.pageStripConcealed=!1,this.waitForRevealPaint=async()=>{await o.yieldToMain(),await new Promise(e=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>e())})}),await new Promise(e=>{window.setTimeout(e,120)}),await this.waitForVisibleImagesReady()},this.waitForVisibleImagesReady=async()=>{let e=this.getContentContainer(),t=e?.ownerDocument?.defaultView;if(!e||!t)return;let n=[...e.querySelectorAll(`img`),...e.getElementsByTagName(`image`)];if(n.length==0)return;let r=t.innerHeight||e.clientHeight,i=n.filter(e=>{let t=e.getBoundingClientRect();return t.bottom>-200&&t.top<r+200});i.length!=0&&await Promise.race([Promise.all(i.map(e=>this.waitForImageReady(e))),new Promise(e=>{window.setTimeout(e,800)})])},this.waitForImageReady=e=>this.isImageReady(e)?Promise.resolve():new Promise(t=>{let n=!1,r=()=>{n||(n=!0,e.removeEventListener(`load`,r),e.removeEventListener(`error`,r),i.disconnect(),t())},i=new MutationObserver(()=>{this.isImageReady(e)&&r()});i.observe(e,{attributes:!0,attributeFilter:[`src`,`href`,`data-load-state`]}),e.addEventListener(`load`,r),e.addEventListener(`error`,r),window.setTimeout(r,800)}),this.isImageReady=e=>{let t=e.getAttribute(`data-load-state`);if(t==`loaded`||t==`fail`)return!0;let n=e.ownerDocument.defaultView?.window.HTMLImageElement;if(!n||!(e instanceof n))return!1;let r=e.currentSrc||e.src;return!r||r.startsWith(`data:image/svg+xml`)?!1:e.complete&&e.naturalWidth>0},this.bringLoadingLayerToFront=()=>{let e=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);e&&this.wrapperContainer.appendChild(e)},this.fadeOutCover=async(e=200)=>{let t=this.wrapperContainer.querySelector(`div[data-type='loading-layer']`);if(!t)return;let n=Math.max(0,e);t.style.pointerEvents=`none`,t.style.transition=`opacity ${n}ms ease`,t.style.opacity=`0`,await new Promise(e=>{let r=!1,i=()=>{r||(r=!0,t.removeEventListener(`transitionend`,i),e())};t.addEventListener(`transitionend`,i),window.setTimeout(i,n+50)})},this.releaseLoadingLayer=async()=>{this.loadingLayer?.removeLoadingLayer(),await this.loadingLayer?.dispose(),this.loadingLayer=void 0},this.buildLoadingContent=async()=>{let e=await this.getFormattedVirtualDocument(),t=this.owner.getRenderer()?.documentPreprocesses??[];for(let e of t)try{await e(this)}catch(t){this.logger.error(`preprocess`,`function`,e?.name,t)}let n=e.documentElement.outerHTML.replace(/<([^<]*)\?xml([^>]*)\?.*?>/i,``);return n.match(/<!DOCTYPE[^>]*>/i)||(n=`<!DOCTYPE html>`+n),n},this.processAfterLoaded=async()=>{let t=this.getContentContainer();if(!t){this.revealPendingPageStrip();return}t.setAttribute(`data-url`,this.url);let n=this.pendingPageLayoutState??this.captureLayoutState();this.pendingPageLayoutState=null;let r=d.getLayoutGeometry(this.options).iframeGrow==`width`;r||this.wrapperContainer.classList.remove(c.HtmlSettings.FileContentContainerHeightClassName);try{let e=this.owner.getRenderer()?.documentPostprocesses??[];for(let t of e)try{await t(this),await o.yieldToMain()}catch(e){this.logger.error(`postprocess`,`function`,t?.name,e)}await this.layoutStatePreserver.waitUntilPageTransformStable(),this.resetLayoutSizes(),r&&this.wrapperContainer.classList.remove(c.HtmlSettings.FileContentContainerHeightClassName),await this.layoutStatePreserver.restore(n)}finally{this.revealPendingPageStrip()}this.retainLoadingLayer||await this.releaseLoadingLayer(),this.loadStatus=`success`,this.visibilityCandidates=null,this.bindDocumentEvents(),this.owner.events.emit(e.EventNames.DocumentLoad,this),this.resizeObserver.observeIframeSize(async()=>{let e=d.getLayoutGeometry(this.options),t=y.shouldKeepPageEndOnContentGrow(this.owner.context.currentLocation,this.url),n=e.restoresScrollAfterResize||t,r=n?this.captureLayoutState():null;if(this.resetLayoutSizes(),e.flipMode==`page`&&this.pageCalculator.calcNumberOfPages(!0),n&&r&&(await this.restoreLayoutState(r),t)){let e=this.internalGetNumberOfPages(),t=this.owner.context.currentLocation;t?.url==this.url&&(t.current=e,t.total=e)}}),this.loadCompleted(!0)},this.loadCompleted=e=>{for(let t=0;t<this.callbacks.length;t++)try{e?this.callbacks[t].resolve():this.callbacks[t].reject()}catch{}this.callbacks=[]},this.capture=!0,this.eventListener=e=>{let t=this.eventKeyMap.get(e.type);t&&this.owner.events.emit(t,e,this)},this.pageCalculator=new h.HtmlPageCalculator(this,n,s),this.symbolCalclator=new g.HtmlSymbolCalclator(this,f.asHtmlFileParser(r).symbolMeasure),this.layoutStatePreserver=new v.HtmlLayoutStatePreserver(this,n,s),this.logger=this.owner.loggerFactory.getLogger(this.constructor.name),this.resizeObserver=new _.HtmlDocumentResizeObserver(this,this.owner.events)}get inIframe(){return!0}async load(){await new Promise(async(i,s)=>{if(this.loadStatus==`success`){i();return}if(this.callbacks.push({resolve:i,reject:s}),this.loadStatus!=`loading`){this.loadStatus=`loading`,this.loadingLayer=await this.owner.services.get(`loadLayer`),this.loadingLayer?.setDoc(this),a.emptyElement(this.wrapperContainer),this.loadingLayer.removeLoadingLayer(),this.loadingLayer.loadLoadingLayer(),await o.yieldToMain();try{if(this.inIframe){if(!this.iframe){let i=r.readerPrefixName+t.getUuid(!0);this.iframe=m.createIframe(this.wrapperContainer.ownerDocument,i,this.options.forceScroll,d.getLayoutGeometry(this.options)),this.options.forceScroll?this.iframe.removeAttribute(`scrolling`):this.iframe.setAttribute(`scrolling`,`no`);let a=await this.buildLoadingContent();await o.yieldToMain(),this.wrapperContainer.appendChild(this.iframe),this.bringLoadingLayerToFront(),await o.yieldToMain(),this.iframe.addEventListener(`load`,async()=>{await this.processAfterLoaded()},!1),this.iframe.addEventListener(`error`,t=>{this.revealPendingPageStrip(),this.retainLoadingLayer=!1,this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.logger.error(t),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t),this.loadCompleted(!0)},!1);let s=this.iframe.contentDocument,c=this.captureLayoutState(),l=d.getLayoutGeometry(this.options).flipMode==`page`&&n.BrowserCapabilities.isSafari();l&&(this.pendingPageLayoutState=c,this.concealPageStrip()),this.options.preferSrcdoc&&`srcdoc`in this.iframe||!(`write`in s)?this.iframe.srcdoc=a:(s.open(),s.write(a),s.close()),l||await this.restoreLayoutState(c),await o.yieldToMain()}}else{let e=await this.buildLoadingContent();a.setElementHtml(this.wrapperContainer,e),await this.processAfterLoaded(),await o.yieldToMain()}}catch(t){this.revealPendingPageStrip(),this.logger.error(t),this.retainLoadingLayer=!1,this.owner?.context?(this.loadingLayer?.removeLoadingLayer(),this.loadStatus=`fail`,this.iframe=void 0,this.loadingLayer?.setReloadButton(),this.owner.events.emit(e.EventNames.DocumentLoadFailed,this,t?.toString()),this.loadCompleted(!0)):(await this.releaseLoadingLayer(),this.loadCompleted(!0))}}})}prepareCoveredLoad(){this.retainLoadingLayer=!0}async revealCoveredLoad(){this.retainLoadingLayer=!1;try{await this.waitForRevealPaint(),await this.fadeOutCover()}finally{await this.releaseLoadingLayer()}}resetLayoutSizes(){this.resetIframeMinSize()}captureLayoutState(){return this.layoutStatePreserver.capture()}async restoreLayoutState(e){await this.layoutStatePreserver.restore(e)}concealPageStrip(){this.pageStripConcealed=!0,this.layoutStatePreserver.concealPageStrip()}revealPendingPageStrip(){this.pendingPageLayoutState=null,this.pageStripConcealed&&(this.pageStripConcealed=!1,this.layoutStatePreserver.revealPageStrip())}resetIframeMinSize(){let e=this.getContentRootElement();if(!e||!this.iframe)return;let t=d.getLayoutGeometry(this.options),n=i.getDocumentBody(e.ownerDocument);this.iframe.style.removeProperty(`transform`),this.iframe.style.removeProperty(`will-change`);let r=this.owner.getRenderer()?.getRendererContainer(),a=parseFloat(r?.getAttribute(`data-column-width`)??``)||Math.round(this.iframe.getBoundingClientRect().width),o=parseFloat(r?.getAttribute(`data-page-height`)??``)||Math.round(this.iframe.getBoundingClientRect().height),s=parseFloat(r?.getAttribute(`data-column-gap`)??``);t.sizeIframe({iframe:this.iframe,contentRoot:e,body:n,forceScroll:!!this.options.forceScroll,columnWidth:Number.isFinite(a)?Math.round(a):0,pageHeight:Number.isFinite(o)?Math.round(o):0,columnGap:Number.isFinite(s)&&s>0?s:0,parentContentHeight:this.getParentContentHeight(this.iframe.parentElement)}),t.useColumnLayout&&this.pageCalculator.calcNumberOfPages(!0)}getParentContentHeight(e){if(!e)return 0;let t=e.ownerDocument.defaultView?.getComputedStyle(e),n=parseFloat(t?.paddingTop??`0`)||0,r=parseFloat(t?.paddingBottom??`0`)||0;return Math.max(0,Math.round(e.clientHeight-n-r))}async getContent(){return this.docContent?this.docContent:(this.docContent=await(await this.fileParser.getTextDocument(this.url)).getPlaintext(),this.docContent.length>this.options.singleDocMaxSize?m.getTooBigHtmlTemplate(this.docContent.length):this.docContent)}async getFormattedVirtualDocument(){if(this.formattedVirtualDocument)return this.formattedVirtualDocument;let e=await this.fileParser.getTextDocument(this.url);return this.formattedVirtualDocument=await e.getFormattedDocument(),this.formattedVirtualDocument}async getText(e){return await(await this.fileParser.getTextDocument(this.url)).getPlaintext(e)}internalGetNumberOfPages(){let e=1;return this.getFlipMode()==`page`&&(e=this.pageCalculator.calcNumberOfPages()),e}async getNumberOfPages(){return await this.load(),this.internalGetNumberOfPages()}async getPageNumber(e){return this.pageCalculator.getPageNumber(e)}getContentRootElement(){return this.inIframe?this.iframe?.contentDocument?.documentElement:this.wrapperContainer}getContentContainer(){return this.inIframe?i.getDocumentBody(this.iframe?.contentDocument):this.wrapperContainer}async getVirtualContentContainer(e){if(e){let e=await this.fileParser.getTextDocument(this.url);return i.getDocumentBody(await e.getFormattedDocument())}let t=await this.getFormattedVirtualDocument();return i.getDocumentBody(t)}getVisibleElements(e){if(this.loadStatus!=`success`)return[];let t=this.getContentContainer(),n=t?.ownerDocument?.defaultView;if(!t||!n)return[];this.visibilityCandidates||=u.collectContentUnitElements(t,{htmlBlockTags:this.options.htmlBlockTags});let r=this.owner.getRenderer()?.getRendererContainer().getBoundingClientRect().top,i=s.resolveVisibleViewportInContentWindow(n,{topInset:r});return i?s.getOrderedElementsIntersectingRect(this.visibilityCandidates,i,{writingMode:d.getLayoutGeometry(this.options).writingMode,fullVisible:e}):[]}async dispose(){let t=this.captureLayoutState();this.owner.events.emit(e.EventNames.DocumentDisposing,this),this.unbindDocumentEvents(),this.resizeObserver.unobserveIframeSize(),this.callbacks?.splice(0),this.visibilityCandidates=null,this.retainLoadingLayer=!1,await this.releaseLoadingLayer();let n=this.getWrapperContainer();n.classList.add(c.HtmlSettings.FileContentContainerHeightClassName),this.iframe&&n.contains(this.iframe)&&n.removeChild(this.iframe),a.emptyElement(this.wrapperContainer),this.iframe=void 0,this.formattedVirtualDocument=null,await this.symbolCalclator.dispose(),await this.restoreLayoutState(t),await super.dispose()}bindDocumentEvents(){let e=this.inIframe?this.getContentContainer().ownerDocument:this.getContentRootElement();for(let t of this.eventKeyMap.keys())e.addEventListener(t,this.eventListener,this.capture)}unbindDocumentEvents(){let e=this.inIframe?this.getContentContainer()?.ownerDocument:this.getContentRootElement();if(e)for(let t of this.eventKeyMap.keys())e?.removeEventListener(t,this.eventListener,this.capture)}getFlipMode(){return this.options.forceScroll?`scroll`:this.options.flipMode}};exports.HtmlDocument=b;
@@ -8,10 +8,10 @@ import { yieldToMain as s } from "../../../../kernal/web/scheduler.mjs";
8
8
  import { getOrderedElementsIntersectingRect as c, resolveVisibleViewportInContentWindow as l } from "../../../../kernal/html/geometry.mjs";
9
9
  import { HtmlSettings as u } from "../../HtmlSettings.mjs";
10
10
  import { BaseDocument as d } from "../../../base/renderer/BaseDocument.mjs";
11
- import { getEventKeyMap as f } from "../../../base/renderer/eventKeys.mjs";
12
- import { collectContentUnitElements as p } from "../visibilityCandidates.mjs";
13
- import { getLayoutGeometry as m } from "../layout/resolveLayoutRoute.mjs";
14
- import { asHtmlFileParser as h } from "../../fileParser/IHtmlFileParser.mjs";
11
+ import { collectContentUnitElements as f } from "../visibilityCandidates.mjs";
12
+ import { getLayoutGeometry as p } from "../layout/resolveLayoutRoute.mjs";
13
+ import { asHtmlFileParser as m } from "../../fileParser/IHtmlFileParser.mjs";
14
+ import { getEventKeyMap as h } from "../../../base/renderer/eventKeys.mjs";
15
15
  import { createIframe as g, getTooBigHtmlTemplate as _ } from "../html/template.mjs";
16
16
  import { HtmlPageCalculator as v } from "./HtmlPageCalculator.mjs";
17
17
  import { HtmlSymbolCalclator as y } from "./HtmlSymbolCalclator.mjs";
@@ -21,7 +21,7 @@ import { shouldKeepPageEndOnContentGrow as S } from "../location/remapStoredPage
21
21
  //#region mediaTypes/html/renderer/document/HtmlDocument.ts
22
22
  var C = class extends d {
23
23
  constructor(t, n, r, i, a, o) {
24
- super(t, r, i, a), this.options = o, this.eventKeyMap = f(), this.visibilityCandidates = null, this.callbacks = [], this.retainLoadingLayer = !1, this.pendingPageLayoutState = null, this.pageStripConcealed = !1, this.waitForRevealPaint = async () => {
24
+ super(t, r, i, a), this.options = o, this.eventKeyMap = h(), this.visibilityCandidates = null, this.callbacks = [], this.retainLoadingLayer = !1, this.pendingPageLayoutState = null, this.pageStripConcealed = !1, this.waitForRevealPaint = async () => {
25
25
  await s(), await new Promise((e) => {
26
26
  requestAnimationFrame(() => {
27
27
  requestAnimationFrame(() => e());
@@ -95,7 +95,7 @@ var C = class extends d {
95
95
  t.setAttribute("data-url", this.url);
96
96
  let n = this.pendingPageLayoutState ?? this.captureLayoutState();
97
97
  this.pendingPageLayoutState = null;
98
- let r = m(this.options).iframeGrow == "width";
98
+ let r = p(this.options).iframeGrow == "width";
99
99
  r || this.wrapperContainer.classList.remove(u.FileContentContainerHeightClassName);
100
100
  try {
101
101
  let e = this.owner.getRenderer()?.documentPostprocesses ?? [];
@@ -109,7 +109,7 @@ var C = class extends d {
109
109
  this.revealPendingPageStrip();
110
110
  }
111
111
  this.retainLoadingLayer || await this.releaseLoadingLayer(), this.loadStatus = "success", this.visibilityCandidates = null, this.bindDocumentEvents(), this.owner.events.emit(e.DocumentLoad, this), this.resizeObserver.observeIframeSize(async () => {
112
- let e = m(this.options), t = S(this.owner.context.currentLocation, this.url), n = e.restoresScrollAfterResize || t, r = n ? this.captureLayoutState() : null;
112
+ let e = p(this.options), t = S(this.owner.context.currentLocation, this.url), n = e.restoresScrollAfterResize || t, r = n ? this.captureLayoutState() : null;
113
113
  if (this.resetLayoutSizes(), e.flipMode == "page" && this.pageCalculator.calcNumberOfPages(!0), n && r && (await this.restoreLayoutState(r), t)) {
114
114
  let e = this.internalGetNumberOfPages(), t = this.owner.context.currentLocation;
115
115
  t?.url == this.url && (t.current = e, t.total = e);
@@ -123,7 +123,7 @@ var C = class extends d {
123
123
  }, this.capture = !0, this.eventListener = (e) => {
124
124
  let t = this.eventKeyMap.get(e.type);
125
125
  t && this.owner.events.emit(t, e, this);
126
- }, this.pageCalculator = new v(this, n, o), this.symbolCalclator = new y(this, h(r).symbolMeasure), this.layoutStatePreserver = new x(this, n, o), this.logger = this.owner.loggerFactory.getLogger(this.constructor.name), this.resizeObserver = new b(this, this.owner.events);
126
+ }, this.pageCalculator = new v(this, n, o), this.symbolCalclator = new y(this, m(r).symbolMeasure), this.layoutStatePreserver = new x(this, n, o), this.logger = this.owner.loggerFactory.getLogger(this.constructor.name), this.resizeObserver = new b(this, this.owner.events);
127
127
  }
128
128
  get inIframe() {
129
129
  return !0;
@@ -143,14 +143,14 @@ var C = class extends d {
143
143
  if (this.inIframe) {
144
144
  if (!this.iframe) {
145
145
  let i = r + t(!0);
146
- this.iframe = g(this.wrapperContainer.ownerDocument, i, this.options.forceScroll, m(this.options)), this.options.forceScroll ? this.iframe.removeAttribute("scrolling") : this.iframe.setAttribute("scrolling", "no");
146
+ this.iframe = g(this.wrapperContainer.ownerDocument, i, this.options.forceScroll, p(this.options)), this.options.forceScroll ? this.iframe.removeAttribute("scrolling") : this.iframe.setAttribute("scrolling", "no");
147
147
  let a = await this.buildLoadingContent();
148
148
  await s(), this.wrapperContainer.appendChild(this.iframe), this.bringLoadingLayerToFront(), await s(), this.iframe.addEventListener("load", async () => {
149
149
  await this.processAfterLoaded();
150
150
  }, !1), this.iframe.addEventListener("error", (t) => {
151
151
  this.revealPendingPageStrip(), this.retainLoadingLayer = !1, this.loadingLayer?.removeLoadingLayer(), this.loadStatus = "fail", this.iframe = void 0, this.loadingLayer?.setReloadButton(), this.logger.error(t), this.owner.events.emit(e.DocumentLoadFailed, this, t), this.loadCompleted(!0);
152
152
  }, !1);
153
- let o = this.iframe.contentDocument, c = this.captureLayoutState(), l = m(this.options).flipMode == "page" && n.isSafari();
153
+ let o = this.iframe.contentDocument, c = this.captureLayoutState(), l = p(this.options).flipMode == "page" && n.isSafari();
154
154
  l && (this.pendingPageLayoutState = c, this.concealPageStrip()), this.options.preferSrcdoc && "srcdoc" in this.iframe || !("write" in o) ? this.iframe.srcdoc = a : (o.open(), o.write(a), o.close()), l || await this.restoreLayoutState(c), await s();
155
155
  }
156
156
  } else {
@@ -192,7 +192,7 @@ var C = class extends d {
192
192
  resetIframeMinSize() {
193
193
  let e = this.getContentRootElement();
194
194
  if (!e || !this.iframe) return;
195
- let t = m(this.options), n = i(e.ownerDocument);
195
+ let t = p(this.options), n = i(e.ownerDocument);
196
196
  this.iframe.style.removeProperty("transform"), this.iframe.style.removeProperty("will-change");
197
197
  let r = this.owner.getRenderer()?.getRendererContainer(), a = parseFloat(r?.getAttribute("data-column-width") ?? "") || Math.round(this.iframe.getBoundingClientRect().width), o = parseFloat(r?.getAttribute("data-page-height") ?? "") || Math.round(this.iframe.getBoundingClientRect().height), s = parseFloat(r?.getAttribute("data-column-gap") ?? "");
198
198
  t.sizeIframe({
@@ -250,10 +250,10 @@ var C = class extends d {
250
250
  if (this.loadStatus != "success") return [];
251
251
  let t = this.getContentContainer(), n = t?.ownerDocument?.defaultView;
252
252
  if (!t || !n) return [];
253
- this.visibilityCandidates ||= p(t, { htmlBlockTags: this.options.htmlBlockTags });
253
+ this.visibilityCandidates ||= f(t, { htmlBlockTags: this.options.htmlBlockTags });
254
254
  let r = this.owner.getRenderer()?.getRendererContainer().getBoundingClientRect().top, i = l(n, { topInset: r });
255
255
  return i ? c(this.visibilityCandidates, i, {
256
- writingMode: m(this.options).writingMode,
256
+ writingMode: p(this.options).writingMode,
257
257
  fullVisible: e
258
258
  }) : [];
259
259
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foxycape/core",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Browser-side multi-format reader kernel with pluggable parsers, renderers, services, and plugins.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -78,7 +78,6 @@
78
78
  ],
79
79
  "dependencies": {
80
80
  "events": "^3.3.0",
81
- "hash-wasm": "^4.12.0",
82
81
  "highlight.js": "^11.12.0",
83
82
  "hotkeys-js": "^4.0.4",
84
83
  "js-base64": "^3.9.2",
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../common/uuid.cjs"),t=require("./hash.cjs");var n=async e=>t.digestStream(e,`MD5`),r=async n=>typeof n==`string`?e.computeUniqueId(n):t.digestStream(n,`MD5`,{maxBytes:t.SIMPLE_ID_BYTE_LENGTH});exports.computeMd5=n,exports.computeSimpleId=r;
@@ -1,4 +0,0 @@
1
- import { DigestSource } from './hash';
2
-
3
- export declare const computeMd5: (data: DigestSource) => Promise<string>;
4
- export declare const computeSimpleId: (file: string | Blob | Uint8Array | ArrayBuffer | Promise<Blob> | FileSystemFileHandle) => Promise<string>;
@@ -1,6 +0,0 @@
1
- import { computeUniqueId as e } from "../common/uuid.mjs";
2
- import { SIMPLE_ID_BYTE_LENGTH as t, digestStream as n } from "./hash.mjs";
3
- //#region kernal/crypto/MD5.ts
4
- var r = async (e) => n(e, "MD5"), i = async (r) => typeof r == "string" ? e(r) : n(r, "MD5", { maxBytes: t });
5
- //#endregion
6
- export { r as computeMd5, i as computeSimpleId };
@@ -1 +0,0 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("hash-wasm");var t=2097152,n=5242880,r=t=>{switch(t){case`MD5`:return(0,e.createMD5)();case`SHA-1`:return(0,e.createSHA1)();case`SHA-256`:return(0,e.createSHA256)();default:throw Error(`Unsupported hash algorithm: ${t}`)}},i=async e=>{let t=await r(e);return{update:e=>{t.update(e)},digest:()=>t.digest()}},a=e=>({size:e.byteLength,read:async(t,n)=>e.subarray(t,n)}),o=e=>({size:e.size,read:async(t,n)=>new Uint8Array(await e.slice(t,n).arrayBuffer())}),s=e=>typeof FileSystemFileHandle<`u`&&e instanceof FileSystemFileHandle,c=async e=>typeof e==`string`?a(new TextEncoder().encode(e)):e instanceof Uint8Array?a(e):e instanceof ArrayBuffer?a(new Uint8Array(e)):e instanceof Blob?o(e):s(e)?o(await e.getFile()):o(await e),l=async(e,t,n)=>{if(t.length===0)return[];let r=n?.chunkSize??2097152;if(r<=0)throw Error(`chunkSize must be greater than 0`);let a=await Promise.all(t.map(e=>i(e.algorithm))),o=t.map(e=>e.maxBytes??1/0),s=await c(e),l=Math.min(s.size,o.reduce((e,t)=>Math.max(e,t),0)),u=0;for(;u<l;){let e=Math.min(u+r,l),t=await s.read(u,e);for(let e=0;e<a.length;e++){let n=o[e];if(u>=n)continue;let r=Math.min(t.byteLength,n-u);r<=0||a[e].update(r===t.byteLength?t:t.subarray(0,r))}u=e}return a.map(e=>e.digest())},u=async(e,t,n)=>{let[r]=await l(e,[{algorithm:t,maxBytes:n?.maxBytes}],{chunkSize:n?.chunkSize});return r};exports.HASH_CHUNK_SIZE=t,exports.SIMPLE_ID_BYTE_LENGTH=n,exports.createHasher=i,exports.digestMany=l,exports.digestStream=u;
@@ -1,21 +0,0 @@
1
- import { HashAlgorithm } from './ICrypto';
2
-
3
- export declare const HASH_CHUNK_SIZE: number;
4
- export declare const SIMPLE_ID_BYTE_LENGTH: number;
5
- export type DigestSource = string | Blob | Uint8Array | ArrayBuffer | Promise<Blob> | FileSystemFileHandle;
6
- export type HashSpec = {
7
- algorithm: HashAlgorithm;
8
- maxBytes?: number;
9
- };
10
- export type StreamingHasher = {
11
- update: (chunk: Uint8Array) => void;
12
- digest: () => string;
13
- };
14
- export declare const createHasher: (algorithm: HashAlgorithm) => Promise<StreamingHasher>;
15
- export declare const digestMany: (source: DigestSource, specs: readonly HashSpec[], options?: {
16
- chunkSize?: number;
17
- }) => Promise<string[]>;
18
- export declare const digestStream: (source: DigestSource, algorithm: HashAlgorithm, options?: {
19
- chunkSize?: number;
20
- maxBytes?: number;
21
- }) => Promise<string>;
@@ -1,48 +0,0 @@
1
- import { createMD5 as e, createSHA1 as t, createSHA256 as n } from "hash-wasm";
2
- //#region kernal/crypto/hash.ts
3
- var r = 2097152, i = 5242880, a = (r) => {
4
- switch (r) {
5
- case "MD5": return e();
6
- case "SHA-1": return t();
7
- case "SHA-256": return n();
8
- default: throw Error(`Unsupported hash algorithm: ${r}`);
9
- }
10
- }, o = async (e) => {
11
- let t = await a(e);
12
- return {
13
- update: (e) => {
14
- t.update(e);
15
- },
16
- digest: () => t.digest()
17
- };
18
- }, s = (e) => ({
19
- size: e.byteLength,
20
- read: async (t, n) => e.subarray(t, n)
21
- }), c = (e) => ({
22
- size: e.size,
23
- read: async (t, n) => new Uint8Array(await e.slice(t, n).arrayBuffer())
24
- }), l = (e) => typeof FileSystemFileHandle < "u" && e instanceof FileSystemFileHandle, u = async (e) => typeof e == "string" ? s(new TextEncoder().encode(e)) : e instanceof Uint8Array ? s(e) : e instanceof ArrayBuffer ? s(new Uint8Array(e)) : e instanceof Blob ? c(e) : l(e) ? c(await e.getFile()) : c(await e), d = async (e, t, n) => {
25
- if (t.length === 0) return [];
26
- let r = n?.chunkSize ?? 2097152;
27
- if (r <= 0) throw Error("chunkSize must be greater than 0");
28
- let i = await Promise.all(t.map((e) => o(e.algorithm))), a = t.map((e) => e.maxBytes ?? Infinity), s = await u(e), c = Math.min(s.size, a.reduce((e, t) => Math.max(e, t), 0)), l = 0;
29
- for (; l < c;) {
30
- let e = Math.min(l + r, c), t = await s.read(l, e);
31
- for (let e = 0; e < i.length; e++) {
32
- let n = a[e];
33
- if (l >= n) continue;
34
- let r = Math.min(t.byteLength, n - l);
35
- r <= 0 || i[e].update(r === t.byteLength ? t : t.subarray(0, r));
36
- }
37
- l = e;
38
- }
39
- return i.map((e) => e.digest());
40
- }, f = async (e, t, n) => {
41
- let [r] = await d(e, [{
42
- algorithm: t,
43
- maxBytes: n?.maxBytes
44
- }], { chunkSize: n?.chunkSize });
45
- return r;
46
- };
47
- //#endregion
48
- export { r as HASH_CHUNK_SIZE, i as SIMPLE_ID_BYTE_LENGTH, o as createHasher, d as digestMany, f as digestStream };