Http2.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import {modelTable} from "./ModelTable.js"
  2. import Logger from "./Logger.js"
  3. const logger = new Logger('http')
  4. class Http2 extends EventEmitter {
  5. async get({url: e, useIndexedDb: t=!1, timeout: r=1e4, key: n}) {
  6. if (t)
  7. if (isIndexedDbSupported$1()) {
  8. const o = window.performance.now();
  9. let a = null;
  10. try {
  11. a = await modelTable.models.where("name").equals(e).first()
  12. } catch {
  13. return logger.warn("unable to query data from indexedDB"),
  14. Promise.resolve(e)
  15. }
  16. const s = window.performance.now();
  17. logger.debug(`search ${e} takes:${s - o}ms`);
  18. const l = `${a && a.model ? "found" : "notFound"} data by search ${e} `;
  19. if (logger.debug(l),
  20. reporter$1.report("measurement", {
  21. metric: "indexedDB",
  22. value: s - o,
  23. extra: l
  24. }),
  25. a && a.model) {
  26. const u = dataURItoBlob$1(a.model);
  27. return Promise.resolve(URL.createObjectURL(u))
  28. } else
  29. return this.request({
  30. url: e,
  31. timeout: r,
  32. contentType: "blob",
  33. key: n
  34. }).then(async u=>{
  35. const c = await blobToDataURI$2(u.response);
  36. try {
  37. modelTable.models.add({
  38. name: e,
  39. model: c
  40. })
  41. } catch {
  42. logger.warn("unable to add data to indexedDB")
  43. }
  44. return Promise.resolve(URL.createObjectURL(u.response))
  45. }
  46. ).catch(u=>Promise.reject(u))
  47. } else
  48. return this.request({
  49. url: e,
  50. timeout: r,
  51. contentType: "blob",
  52. key: n
  53. }).then(o=>{
  54. const a = o.response;
  55. return Promise.resolve(URL.createObjectURL(a))
  56. }
  57. ).catch(o=>Promise.reject(o));
  58. else
  59. return this.request({
  60. url: e,
  61. timeout: 5e3,
  62. key: n
  63. }).then(o=>o.getResponseHeader("content-type") === "application/json" ? Promise.resolve(JSON.parse(o.responseText)) : Promise.resolve(o.responseText)).catch(o=>{
  64. Promise.reject(o)
  65. }
  66. )
  67. }
  68. request({url: e, timeout: t=15e3, contentType: r, key: n}) {
  69. return new Promise((o,a)=>{
  70. const s = window.performance.now()
  71. , l = new XMLHttpRequest;
  72. r && (l.responseType = r),
  73. l.timeout = t,
  74. l.addEventListener("readystatechange", ()=>{
  75. if (l.readyState == 4)
  76. if (l.status == 200) {
  77. const u = window.performance.now();
  78. return logger.debug(`download ${e} takes:${u - s}ms`),
  79. reporter$1.report("measurement", {
  80. metric: "http",
  81. value: u - s,
  82. extra: e
  83. }),
  84. this.emit("loadend", {
  85. message: `request ${e} load success`
  86. }),
  87. o(l)
  88. } else {
  89. const u = `Unable to load the request ${e}`;
  90. return this.emit("error", {
  91. message: u
  92. }),
  93. logger.error(u),
  94. a(u)
  95. }
  96. }
  97. ),
  98. l.open("GET", e),
  99. l.send()
  100. }
  101. )
  102. }
  103. }
  104. const http2 = new Http2();
  105. export { http2 };
  106. // const http = new Http
  107. // , isIndexedDbSupported = ()=>(window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB) !== void 0
  108. // , blobToDataURI = async i=>new Promise((e,t)=>{
  109. // const r = new FileReader;
  110. // r.readAsDataURL(i),
  111. // r.onload = function(n) {
  112. // var o;
  113. // e((o = n.target) == null ? void 0 : o.result)
  114. // }
  115. // ,
  116. // r.onerror = function(n) {
  117. // t(n)
  118. // }
  119. // }
  120. // )
  121. // , dataURItoBlob = i=>{
  122. // let e;
  123. // i.split(",")[0].indexOf("base64") >= 0 ? e = atob(i.split(",")[1]) : e = unescape(i.split(",")[1]);
  124. // const t = i.split(",")[0].split(":")[1].split(";")[0]
  125. // , r = new Uint8Array(e.length);
  126. // for (let o = 0; o < e.length; o++)
  127. // r[o] = e.charCodeAt(o);
  128. // return new Blob([r],{
  129. // type: t
  130. // })
  131. // }
  132. // , urlMap = new Map
  133. // , urlTransformer = async(i,e=!1)=>typeof i != "string" ? (console.warn("url transformer error", i),
  134. // i) : i.startsWith("blob:") ? i : e ? http.get({
  135. // url: i,
  136. // useIndexedDb: !0,
  137. // key: "url",
  138. // isOutPutObjectURL: !1
  139. // }) : urlMap.has(i) ? urlMap.get(i) : http.get({
  140. // url: i,
  141. // useIndexedDb: !0,
  142. // key: "url"
  143. // }).then(t=>(urlMap.set(i, t),
  144. // t));