@outfoxx/sunday 1.1.0-beta.6 → 1.1.0-beta.7

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.
Files changed (403) hide show
  1. package/{dist → build/esm}/any-type.d.ts +0 -0
  2. package/{dist → build/esm}/any-type.js +0 -0
  3. package/build/esm/any-type.js.map +1 -0
  4. package/{dist → build/esm}/class-type.d.ts +0 -0
  5. package/{dist → build/esm}/class-type.js +0 -0
  6. package/build/esm/class-type.js.map +1 -0
  7. package/{dist → build/esm}/date-time-types.d.ts +0 -0
  8. package/{dist → build/esm}/date-time-types.js +0 -0
  9. package/build/esm/date-time-types.js.map +1 -0
  10. package/{dist → build/esm}/event-parser.d.ts +0 -0
  11. package/{dist → build/esm}/event-parser.js +0 -0
  12. package/build/esm/event-parser.js.map +1 -0
  13. package/{dist → build/esm}/fetch-event-source.d.ts +0 -0
  14. package/{dist → build/esm}/fetch-event-source.js +0 -0
  15. package/build/esm/fetch-event-source.js.map +1 -0
  16. package/{dist → build/esm}/fetch-request-factory.d.ts +0 -0
  17. package/{dist → build/esm}/fetch-request-factory.js +17 -8
  18. package/build/esm/fetch-request-factory.js.map +1 -0
  19. package/{dist → build/esm}/fetch.d.ts +0 -0
  20. package/build/esm/fetch.js +103 -0
  21. package/build/esm/fetch.js.map +1 -0
  22. package/{dist → build/esm}/header-parameters.d.ts +0 -0
  23. package/{dist → build/esm}/header-parameters.js +0 -0
  24. package/build/esm/header-parameters.js.map +1 -0
  25. package/{dist → build/esm}/index.d.ts +0 -0
  26. package/{dist → build/esm}/index.js +0 -0
  27. package/build/esm/index.js.map +1 -0
  28. package/{dist → build/esm}/logger.d.ts +0 -0
  29. package/{dist → build/esm}/logger.js +0 -0
  30. package/build/esm/logger.js.map +1 -0
  31. package/{dist → build/esm}/media-type-codecs/any-text-decoder.d.ts +0 -0
  32. package/build/esm/media-type-codecs/any-text-decoder.js +40 -0
  33. package/build/esm/media-type-codecs/any-text-decoder.js.map +1 -0
  34. package/{dist → build/esm}/media-type-codecs/any-text-encoder.d.ts +0 -0
  35. package/{dist → build/esm}/media-type-codecs/any-text-encoder.js +0 -0
  36. package/build/esm/media-type-codecs/any-text-encoder.js.map +1 -0
  37. package/{dist → build/esm}/media-type-codecs/binary-decoder.d.ts +0 -0
  38. package/build/esm/media-type-codecs/binary-decoder.js +40 -0
  39. package/build/esm/media-type-codecs/binary-decoder.js.map +1 -0
  40. package/{dist → build/esm}/media-type-codecs/binary-encoder.d.ts +0 -0
  41. package/{dist → build/esm}/media-type-codecs/binary-encoder.js +0 -0
  42. package/build/esm/media-type-codecs/binary-encoder.js.map +1 -0
  43. package/{dist → build/esm}/media-type-codecs/cbor-decoder.d.ts +0 -0
  44. package/{dist → build/esm}/media-type-codecs/cbor-decoder.js +13 -2
  45. package/build/esm/media-type-codecs/cbor-decoder.js.map +1 -0
  46. package/{dist → build/esm}/media-type-codecs/cbor-encoder.d.ts +0 -0
  47. package/{dist → build/esm}/media-type-codecs/cbor-encoder.js +0 -0
  48. package/build/esm/media-type-codecs/cbor-encoder.js.map +1 -0
  49. package/{dist → build/esm}/media-type-codecs/cbor-tags.d.ts +0 -0
  50. package/{dist → build/esm}/media-type-codecs/cbor-tags.js +0 -0
  51. package/build/esm/media-type-codecs/cbor-tags.js.map +1 -0
  52. package/{dist → build/esm}/media-type-codecs/json-decoder.d.ts +0 -0
  53. package/{dist → build/esm}/media-type-codecs/json-decoder.js +13 -2
  54. package/build/esm/media-type-codecs/json-decoder.js.map +1 -0
  55. package/{dist → build/esm}/media-type-codecs/json-encoder.d.ts +0 -0
  56. package/{dist → build/esm}/media-type-codecs/json-encoder.js +0 -0
  57. package/build/esm/media-type-codecs/json-encoder.js.map +1 -0
  58. package/{dist → build/esm}/media-type-codecs/media-type-decoder.d.ts +0 -0
  59. package/{dist → build/esm}/media-type-codecs/media-type-decoder.js +0 -0
  60. package/build/esm/media-type-codecs/media-type-decoder.js.map +1 -0
  61. package/{dist → build/esm}/media-type-codecs/media-type-decoders.d.ts +0 -0
  62. package/{dist → build/esm}/media-type-codecs/media-type-decoders.js +0 -0
  63. package/build/esm/media-type-codecs/media-type-decoders.js.map +1 -0
  64. package/{dist → build/esm}/media-type-codecs/media-type-encoder.d.ts +0 -0
  65. package/{dist → build/esm}/media-type-codecs/media-type-encoder.js +0 -0
  66. package/build/esm/media-type-codecs/media-type-encoder.js.map +1 -0
  67. package/{dist → build/esm}/media-type-codecs/media-type-encoders.d.ts +0 -0
  68. package/{dist → build/esm}/media-type-codecs/media-type-encoders.js +0 -0
  69. package/build/esm/media-type-codecs/media-type-encoders.js.map +1 -0
  70. package/{dist → build/esm}/media-type-codecs/www-form-url-encoder.d.ts +0 -0
  71. package/{dist → build/esm}/media-type-codecs/www-form-url-encoder.js +0 -0
  72. package/build/esm/media-type-codecs/www-form-url-encoder.js.map +1 -0
  73. package/{dist → build/esm}/media-type.d.ts +0 -0
  74. package/{dist → build/esm}/media-type.js +0 -0
  75. package/build/esm/media-type.js.map +1 -0
  76. package/{dist → build/esm}/problem.d.ts +0 -0
  77. package/{dist → build/esm}/problem.js +30 -19
  78. package/build/esm/problem.js.map +1 -0
  79. package/{dist → build/esm}/request-factory.d.ts +0 -0
  80. package/{dist → build/esm}/request-factory.js +0 -0
  81. package/build/esm/request-factory.js.map +1 -0
  82. package/{dist → build/esm}/result-response.d.ts +0 -0
  83. package/{dist → build/esm}/result-response.js +0 -0
  84. package/build/esm/result-response.js.map +1 -0
  85. package/{dist → build/esm}/sunday-error.d.ts +0 -0
  86. package/build/esm/sunday-error.js +42 -0
  87. package/build/esm/sunday-error.js.map +1 -0
  88. package/{dist → build/esm}/url-template.d.ts +0 -0
  89. package/{dist → build/esm}/url-template.js +0 -0
  90. package/build/esm/url-template.js.map +1 -0
  91. package/{dist → build/esm}/util/any.d.ts +0 -0
  92. package/{dist → build/esm}/util/any.js +0 -0
  93. package/build/esm/util/any.js.map +1 -0
  94. package/{dist → build/esm}/util/base64.d.ts +0 -0
  95. package/{dist → build/esm}/util/base64.js +0 -0
  96. package/build/esm/util/base64.js.map +1 -0
  97. package/{dist → build/esm}/util/error.d.ts +0 -0
  98. package/{dist → build/esm}/util/error.js +0 -0
  99. package/build/esm/util/error.js.map +1 -0
  100. package/{dist → build/esm}/util/hex.d.ts +0 -0
  101. package/{dist → build/esm}/util/hex.js +0 -0
  102. package/build/esm/util/hex.js.map +1 -0
  103. package/{dist → build/esm}/util/rxjs.d.ts +0 -0
  104. package/{dist → build/esm}/util/rxjs.js +0 -0
  105. package/build/esm/util/rxjs.js.map +1 -0
  106. package/{dist → build/esm}/util/stream-rxjs.d.ts +0 -0
  107. package/build/esm/util/stream-rxjs.js +50 -0
  108. package/build/esm/util/stream-rxjs.js.map +1 -0
  109. package/{dist → build/esm}/util/temporal.d.ts +0 -0
  110. package/{dist → build/esm}/util/temporal.js +0 -0
  111. package/build/esm/util/temporal.js.map +1 -0
  112. package/build/esnext/any-type.d.ts +4 -0
  113. package/build/esnext/any-type.js +15 -0
  114. package/build/esnext/any-type.js.map +1 -0
  115. package/build/esnext/class-type.d.ts +2 -0
  116. package/build/esnext/class-type.js +15 -0
  117. package/build/esnext/class-type.js.map +1 -0
  118. package/build/esnext/date-time-types.d.ts +2 -0
  119. package/build/esnext/date-time-types.js +16 -0
  120. package/build/esnext/date-time-types.js.map +1 -0
  121. package/build/esnext/event-parser.d.ts +17 -0
  122. package/build/esnext/event-parser.js +153 -0
  123. package/build/esnext/event-parser.js.map +1 -0
  124. package/build/esnext/fetch-event-source.d.ts +58 -0
  125. package/build/esnext/fetch-event-source.js +290 -0
  126. package/build/esnext/fetch-event-source.js.map +1 -0
  127. package/build/esnext/fetch-request-factory.d.ts +34 -0
  128. package/build/esnext/fetch-request-factory.js +190 -0
  129. package/build/esnext/fetch-request-factory.js.map +1 -0
  130. package/build/esnext/fetch.d.ts +7 -0
  131. package/build/esnext/fetch.js +103 -0
  132. package/build/esnext/fetch.js.map +1 -0
  133. package/build/esnext/header-parameters.d.ts +3 -0
  134. package/build/esnext/header-parameters.js +53 -0
  135. package/build/esnext/header-parameters.js.map +1 -0
  136. package/build/esnext/index.d.ts +26 -0
  137. package/{src/index.ts → build/esnext/index.js} +1 -2
  138. package/build/esnext/index.js.map +1 -0
  139. package/build/esnext/logger.d.ts +8 -0
  140. package/build/esnext/logger.js +15 -0
  141. package/build/esnext/logger.js.map +1 -0
  142. package/build/esnext/media-type-codecs/any-text-decoder.d.ts +7 -0
  143. package/build/esnext/media-type-codecs/any-text-decoder.js +40 -0
  144. package/build/esnext/media-type-codecs/any-text-decoder.js.map +1 -0
  145. package/build/esnext/media-type-codecs/any-text-encoder.d.ts +5 -0
  146. package/build/esnext/media-type-codecs/any-text-encoder.js +23 -0
  147. package/build/esnext/media-type-codecs/any-text-encoder.js.map +1 -0
  148. package/build/esnext/media-type-codecs/binary-decoder.d.ts +6 -0
  149. package/build/esnext/media-type-codecs/binary-decoder.js +40 -0
  150. package/build/esnext/media-type-codecs/binary-decoder.js.map +1 -0
  151. package/build/esnext/media-type-codecs/binary-encoder.d.ts +5 -0
  152. package/build/esnext/media-type-codecs/binary-encoder.js +26 -0
  153. package/build/esnext/media-type-codecs/binary-encoder.js.map +1 -0
  154. package/build/esnext/media-type-codecs/cbor-decoder.d.ts +39 -0
  155. package/build/esnext/media-type-codecs/cbor-decoder.js +437 -0
  156. package/build/esnext/media-type-codecs/cbor-decoder.js.map +1 -0
  157. package/build/esnext/media-type-codecs/cbor-encoder.d.ts +43 -0
  158. package/build/esnext/media-type-codecs/cbor-encoder.js +236 -0
  159. package/build/esnext/media-type-codecs/cbor-encoder.js.map +1 -0
  160. package/build/esnext/media-type-codecs/cbor-tags.d.ts +4 -0
  161. package/{src/media-type-codecs/cbor-tags.ts → build/esnext/media-type-codecs/cbor-tags.js} +1 -1
  162. package/build/esnext/media-type-codecs/cbor-tags.js.map +1 -0
  163. package/build/esnext/media-type-codecs/json-decoder.d.ts +39 -0
  164. package/build/esnext/media-type-codecs/json-decoder.js +391 -0
  165. package/build/esnext/media-type-codecs/json-decoder.js.map +1 -0
  166. package/build/esnext/media-type-codecs/json-encoder.d.ts +44 -0
  167. package/build/esnext/media-type-codecs/json-encoder.js +273 -0
  168. package/build/esnext/media-type-codecs/json-encoder.js.map +1 -0
  169. package/build/esnext/media-type-codecs/media-type-decoder.d.ts +11 -0
  170. package/{src/result-response.ts → build/esnext/media-type-codecs/media-type-decoder.js} +5 -4
  171. package/build/esnext/media-type-codecs/media-type-decoder.js.map +1 -0
  172. package/build/esnext/media-type-codecs/media-type-decoders.d.ts +18 -0
  173. package/build/esnext/media-type-codecs/media-type-decoders.js +58 -0
  174. package/build/esnext/media-type-codecs/media-type-decoders.js.map +1 -0
  175. package/build/esnext/media-type-codecs/media-type-encoder.d.ts +12 -0
  176. package/{src/util/any.ts → build/esnext/media-type-codecs/media-type-encoder.js} +9 -9
  177. package/build/esnext/media-type-codecs/media-type-encoder.js.map +1 -0
  178. package/build/esnext/media-type-codecs/media-type-encoders.d.ts +18 -0
  179. package/build/esnext/media-type-codecs/media-type-encoders.js +60 -0
  180. package/build/esnext/media-type-codecs/media-type-encoders.js.map +1 -0
  181. package/build/esnext/media-type-codecs/www-form-url-encoder.d.ts +59 -0
  182. package/build/esnext/media-type-codecs/www-form-url-encoder.js +192 -0
  183. package/build/esnext/media-type-codecs/www-form-url-encoder.js.map +1 -0
  184. package/build/esnext/media-type.d.ts +94 -0
  185. package/build/esnext/media-type.js +305 -0
  186. package/build/esnext/media-type.js.map +1 -0
  187. package/build/esnext/problem.d.ts +31 -0
  188. package/build/esnext/problem.js +169 -0
  189. package/build/esnext/problem.js.map +1 -0
  190. package/build/esnext/request-factory.d.ts +44 -0
  191. package/build/esnext/request-factory.js +15 -0
  192. package/build/esnext/request-factory.js.map +1 -0
  193. package/build/esnext/result-response.d.ts +4 -0
  194. package/build/esnext/result-response.js +15 -0
  195. package/build/esnext/result-response.js.map +1 -0
  196. package/build/esnext/sunday-error.d.ts +11 -0
  197. package/build/esnext/sunday-error.js +42 -0
  198. package/build/esnext/sunday-error.js.map +1 -0
  199. package/build/esnext/url-template.d.ts +6 -0
  200. package/{src/url-template.ts → build/esnext/url-template.js} +15 -19
  201. package/build/esnext/url-template.js.map +1 -0
  202. package/build/esnext/util/any.d.ts +2 -0
  203. package/{src/logger.ts → build/esnext/util/any.js} +10 -8
  204. package/build/esnext/util/any.js.map +1 -0
  205. package/build/esnext/util/base64.d.ts +5 -0
  206. package/build/esnext/util/base64.js +77 -0
  207. package/build/esnext/util/base64.js.map +1 -0
  208. package/build/esnext/util/error.d.ts +2 -0
  209. package/{src/media-type-codecs/any-text-encoder.ts → build/esnext/util/error.js} +11 -11
  210. package/build/esnext/util/error.js.map +1 -0
  211. package/build/esnext/util/hex.d.ts +4 -0
  212. package/build/esnext/util/hex.js +32 -0
  213. package/build/esnext/util/hex.js.map +1 -0
  214. package/build/esnext/util/rxjs.d.ts +5 -0
  215. package/build/esnext/util/rxjs.js +31 -0
  216. package/build/esnext/util/rxjs.js.map +1 -0
  217. package/build/esnext/util/stream-rxjs.d.ts +2 -0
  218. package/build/esnext/util/stream-rxjs.js +50 -0
  219. package/build/esnext/util/stream-rxjs.js.map +1 -0
  220. package/build/esnext/util/temporal.d.ts +2 -0
  221. package/{dist/media-type-codecs/any-text-decoder.js → build/esnext/util/temporal.js} +14 -12
  222. package/build/esnext/util/temporal.js.map +1 -0
  223. package/build/main/any-type.d.ts +4 -0
  224. package/build/main/any-type.js +16 -0
  225. package/build/main/any-type.js.map +1 -0
  226. package/build/main/class-type.d.ts +2 -0
  227. package/build/main/class-type.js +16 -0
  228. package/build/main/class-type.js.map +1 -0
  229. package/build/main/date-time-types.d.ts +2 -0
  230. package/build/main/date-time-types.js +27 -0
  231. package/build/main/date-time-types.js.map +1 -0
  232. package/build/main/event-parser.d.ts +17 -0
  233. package/build/main/event-parser.js +157 -0
  234. package/build/main/event-parser.js.map +1 -0
  235. package/build/main/fetch-event-source.d.ts +58 -0
  236. package/build/main/fetch-event-source.js +294 -0
  237. package/build/main/fetch-event-source.js.map +1 -0
  238. package/build/main/fetch-request-factory.d.ts +34 -0
  239. package/build/main/fetch-request-factory.js +194 -0
  240. package/build/main/fetch-request-factory.js.map +1 -0
  241. package/build/main/fetch.d.ts +7 -0
  242. package/build/main/fetch.js +107 -0
  243. package/build/main/fetch.js.map +1 -0
  244. package/build/main/header-parameters.d.ts +3 -0
  245. package/build/main/header-parameters.js +56 -0
  246. package/build/main/header-parameters.js.map +1 -0
  247. package/build/main/index.d.ts +26 -0
  248. package/build/main/index.js +52 -0
  249. package/build/main/index.js.map +1 -0
  250. package/build/main/logger.d.ts +8 -0
  251. package/build/main/logger.js +16 -0
  252. package/build/main/logger.js.map +1 -0
  253. package/build/main/media-type-codecs/any-text-decoder.d.ts +7 -0
  254. package/build/main/media-type-codecs/any-text-decoder.js +44 -0
  255. package/build/main/media-type-codecs/any-text-decoder.js.map +1 -0
  256. package/build/main/media-type-codecs/any-text-encoder.d.ts +5 -0
  257. package/build/main/media-type-codecs/any-text-encoder.js +27 -0
  258. package/build/main/media-type-codecs/any-text-encoder.js.map +1 -0
  259. package/build/main/media-type-codecs/binary-decoder.d.ts +6 -0
  260. package/build/main/media-type-codecs/binary-decoder.js +44 -0
  261. package/build/main/media-type-codecs/binary-decoder.js.map +1 -0
  262. package/build/main/media-type-codecs/binary-encoder.d.ts +5 -0
  263. package/{dist/media-type-codecs/binary-decoder.js → build/main/media-type-codecs/binary-encoder.js} +14 -13
  264. package/build/main/media-type-codecs/binary-encoder.js.map +1 -0
  265. package/build/main/media-type-codecs/cbor-decoder.d.ts +39 -0
  266. package/build/main/media-type-codecs/cbor-decoder.js +441 -0
  267. package/build/main/media-type-codecs/cbor-decoder.js.map +1 -0
  268. package/build/main/media-type-codecs/cbor-encoder.d.ts +43 -0
  269. package/build/main/media-type-codecs/cbor-encoder.js +240 -0
  270. package/build/main/media-type-codecs/cbor-encoder.js.map +1 -0
  271. package/build/main/media-type-codecs/cbor-tags.d.ts +4 -0
  272. package/build/main/media-type-codecs/cbor-tags.js +21 -0
  273. package/build/main/media-type-codecs/cbor-tags.js.map +1 -0
  274. package/build/main/media-type-codecs/json-decoder.d.ts +39 -0
  275. package/build/main/media-type-codecs/json-decoder.js +395 -0
  276. package/build/main/media-type-codecs/json-decoder.js.map +1 -0
  277. package/build/main/media-type-codecs/json-encoder.d.ts +44 -0
  278. package/build/main/media-type-codecs/json-encoder.js +277 -0
  279. package/build/main/media-type-codecs/json-encoder.js.map +1 -0
  280. package/build/main/media-type-codecs/media-type-decoder.d.ts +11 -0
  281. package/build/main/media-type-codecs/media-type-decoder.js +23 -0
  282. package/build/main/media-type-codecs/media-type-decoder.js.map +1 -0
  283. package/build/main/media-type-codecs/media-type-decoders.d.ts +18 -0
  284. package/build/main/media-type-codecs/media-type-decoders.js +62 -0
  285. package/build/main/media-type-codecs/media-type-decoders.js.map +1 -0
  286. package/build/main/media-type-codecs/media-type-encoder.d.ts +12 -0
  287. package/build/main/media-type-codecs/media-type-encoder.js +29 -0
  288. package/build/main/media-type-codecs/media-type-encoder.js.map +1 -0
  289. package/build/main/media-type-codecs/media-type-encoders.d.ts +18 -0
  290. package/build/main/media-type-codecs/media-type-encoders.js +64 -0
  291. package/build/main/media-type-codecs/media-type-encoders.js.map +1 -0
  292. package/build/main/media-type-codecs/www-form-url-encoder.d.ts +59 -0
  293. package/build/main/media-type-codecs/www-form-url-encoder.js +196 -0
  294. package/build/main/media-type-codecs/www-form-url-encoder.js.map +1 -0
  295. package/build/main/media-type.d.ts +94 -0
  296. package/build/main/media-type.js +309 -0
  297. package/build/main/media-type.js.map +1 -0
  298. package/build/main/problem.d.ts +31 -0
  299. package/build/main/problem.js +172 -0
  300. package/build/main/problem.js.map +1 -0
  301. package/build/main/request-factory.d.ts +44 -0
  302. package/build/main/request-factory.js +16 -0
  303. package/build/main/request-factory.js.map +1 -0
  304. package/build/main/result-response.d.ts +4 -0
  305. package/build/main/result-response.js +16 -0
  306. package/build/main/result-response.js.map +1 -0
  307. package/build/main/sunday-error.d.ts +11 -0
  308. package/build/main/sunday-error.js +46 -0
  309. package/build/main/sunday-error.js.map +1 -0
  310. package/build/main/url-template.d.ts +6 -0
  311. package/build/main/url-template.js +35 -0
  312. package/build/main/url-template.js.map +1 -0
  313. package/build/main/util/any.d.ts +2 -0
  314. package/build/main/util/any.js +29 -0
  315. package/build/main/util/any.js.map +1 -0
  316. package/build/main/util/base64.d.ts +5 -0
  317. package/build/main/util/base64.js +80 -0
  318. package/build/main/util/base64.js.map +1 -0
  319. package/build/main/util/error.d.ts +2 -0
  320. package/{src/util/temporal.ts → build/main/util/error.js} +15 -16
  321. package/build/main/util/error.js.map +1 -0
  322. package/build/main/util/hex.d.ts +4 -0
  323. package/build/main/util/hex.js +35 -0
  324. package/build/main/util/hex.js.map +1 -0
  325. package/build/main/util/rxjs.d.ts +5 -0
  326. package/build/main/util/rxjs.js +36 -0
  327. package/build/main/util/rxjs.js.map +1 -0
  328. package/build/main/util/stream-rxjs.d.ts +2 -0
  329. package/build/main/util/stream-rxjs.js +54 -0
  330. package/build/main/util/stream-rxjs.js.map +1 -0
  331. package/build/main/util/temporal.d.ts +2 -0
  332. package/build/main/util/temporal.js +36 -0
  333. package/build/main/util/temporal.js.map +1 -0
  334. package/package.json +37 -27
  335. package/dist/any-type.js.map +0 -1
  336. package/dist/class-type.js.map +0 -1
  337. package/dist/date-time-types.js.map +0 -1
  338. package/dist/event-parser.js.map +0 -1
  339. package/dist/fetch-event-source.js.map +0 -1
  340. package/dist/fetch-request-factory.js.map +0 -1
  341. package/dist/fetch.js +0 -90
  342. package/dist/fetch.js.map +0 -1
  343. package/dist/header-parameters.js.map +0 -1
  344. package/dist/index.js.map +0 -1
  345. package/dist/logger.js.map +0 -1
  346. package/dist/media-type-codecs/any-text-decoder.js.map +0 -1
  347. package/dist/media-type-codecs/any-text-encoder.js.map +0 -1
  348. package/dist/media-type-codecs/binary-decoder.js.map +0 -1
  349. package/dist/media-type-codecs/binary-encoder.js.map +0 -1
  350. package/dist/media-type-codecs/cbor-decoder.js.map +0 -1
  351. package/dist/media-type-codecs/cbor-encoder.js.map +0 -1
  352. package/dist/media-type-codecs/cbor-tags.js.map +0 -1
  353. package/dist/media-type-codecs/json-decoder.js.map +0 -1
  354. package/dist/media-type-codecs/json-encoder.js.map +0 -1
  355. package/dist/media-type-codecs/media-type-decoder.js.map +0 -1
  356. package/dist/media-type-codecs/media-type-decoders.js.map +0 -1
  357. package/dist/media-type-codecs/media-type-encoder.js.map +0 -1
  358. package/dist/media-type-codecs/media-type-encoders.js.map +0 -1
  359. package/dist/media-type-codecs/www-form-url-encoder.js.map +0 -1
  360. package/dist/media-type.js.map +0 -1
  361. package/dist/problem.js.map +0 -1
  362. package/dist/request-factory.js.map +0 -1
  363. package/dist/result-response.js.map +0 -1
  364. package/dist/sunday-error.js +0 -31
  365. package/dist/sunday-error.js.map +0 -1
  366. package/dist/url-template.js.map +0 -1
  367. package/dist/util/any.js.map +0 -1
  368. package/dist/util/base64.js.map +0 -1
  369. package/dist/util/error.js.map +0 -1
  370. package/dist/util/hex.js.map +0 -1
  371. package/dist/util/rxjs.js.map +0 -1
  372. package/dist/util/stream-rxjs.js +0 -39
  373. package/dist/util/stream-rxjs.js.map +0 -1
  374. package/dist/util/temporal.js.map +0 -1
  375. package/src/any-type.ts +0 -22
  376. package/src/class-type.ts +0 -21
  377. package/src/date-time-types.ts +0 -37
  378. package/src/event-parser.ts +0 -204
  379. package/src/fetch-event-source.ts +0 -406
  380. package/src/fetch-request-factory.ts +0 -315
  381. package/src/fetch.ts +0 -99
  382. package/src/header-parameters.ts +0 -66
  383. package/src/media-type-codecs/any-text-decoder.ts +0 -34
  384. package/src/media-type-codecs/binary-decoder.ts +0 -38
  385. package/src/media-type-codecs/binary-encoder.ts +0 -33
  386. package/src/media-type-codecs/cbor-decoder.ts +0 -529
  387. package/src/media-type-codecs/cbor-encoder.ts +0 -314
  388. package/src/media-type-codecs/json-decoder.ts +0 -484
  389. package/src/media-type-codecs/json-encoder.ts +0 -335
  390. package/src/media-type-codecs/media-type-decoder.ts +0 -34
  391. package/src/media-type-codecs/media-type-decoders.ts +0 -86
  392. package/src/media-type-codecs/media-type-encoder.ts +0 -45
  393. package/src/media-type-codecs/media-type-encoders.ts +0 -88
  394. package/src/media-type-codecs/www-form-url-encoder.ts +0 -243
  395. package/src/media-type.ts +0 -362
  396. package/src/problem.ts +0 -171
  397. package/src/request-factory.ts +0 -124
  398. package/src/sunday-error.ts +0 -51
  399. package/src/util/base64.ts +0 -91
  400. package/src/util/error.ts +0 -28
  401. package/src/util/hex.ts +0 -30
  402. package/src/util/rxjs.ts +0 -43
  403. package/src/util/stream-rxjs.ts +0 -42
@@ -1,406 +0,0 @@
1
- // Copyright 2020 Outfox, Inc.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- import { EMPTY, map, Observable, of, Subscription, switchMap, tap } from 'rxjs';
16
- import { EventInfo, EventParser } from './event-parser';
17
- import { validate } from './fetch';
18
- import { Logger } from './logger';
19
- import { MediaType } from './media-type';
20
- import { ExtEventSource } from './request-factory';
21
- import { unknownSet } from './util/any';
22
- import { fromStream } from './util/stream-rxjs';
23
-
24
- export interface FetchEventSource {
25
- addEventListener<K extends keyof EventSourceEventMap>(
26
- type: K,
27
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
- listener: (this: EventSource, ev: EventSourceEventMap[K]) => any,
29
- options?: boolean | AddEventListenerOptions,
30
- ): void;
31
- removeEventListener<K extends keyof EventSourceEventMap>(
32
- type: K,
33
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
- listener: (this: EventSource, ev: EventSourceEventMap[K]) => any,
35
- options?: boolean | EventListenerOptions,
36
- ): void;
37
- }
38
-
39
- export class FetchEventSource extends EventTarget implements ExtEventSource {
40
- private static LAST_EVENT_ID_HEADER = 'Last-Event-ID';
41
- private static MAX_RETRY_TIME_MULTIPLE = 30;
42
- private static EVENT_TIMEOUT_DEFAULT = 75;
43
- private static EVENT_TIMEOUT_CHECK_INTERVAL = 2;
44
-
45
- CONNECTING = 0;
46
- OPEN = 1;
47
- CLOSED = 2;
48
-
49
- readyState: number = this.CLOSED;
50
- url: string;
51
- withCredentials = false;
52
- onerror: ((this: EventSource, ev: Event) => unknown) | null = null;
53
- onmessage: ((this: EventSource, ev: MessageEvent) => unknown) | null = null;
54
- onopen: ((this: EventSource, ev: Event) => unknown) | null = null;
55
-
56
- get retryTime(): number {
57
- return this.internalRetryTime;
58
- }
59
-
60
- private adapter: (
61
- url: string,
62
- requestInit: RequestInit,
63
- ) => Observable<Request>;
64
- private connectionSubscription?: Subscription;
65
- private internalRetryTime = 100;
66
- private retryAttempt = 0;
67
- private connectionAttemptTime = 0;
68
- private connectionOrigin?: string;
69
- private reconnectTimeoutHandle?: number;
70
- private lastEventId?: string;
71
- private logger?: Logger;
72
- private readonly eventTimeout?: number;
73
- private eventTimeoutCheckHandle?: number;
74
- private lastEventReceivedTime = 0;
75
- private eventParser = new EventParser();
76
- private readonly externalAbortController?: AbortController;
77
-
78
- constructor(
79
- url: string,
80
- eventSourceInit?: EventSourceInit & {
81
- adapter?: (url: string, requestInit: RequestInit) => Observable<Request>;
82
- eventTimeout?: number;
83
- logger?: Logger;
84
- abortController?: AbortController;
85
- },
86
- ) {
87
- super();
88
- this.url = url;
89
- this.adapter =
90
- eventSourceInit?.adapter ??
91
- ((_url, requestInit) => of(new Request(_url, requestInit)));
92
- this.eventTimeout =
93
- eventSourceInit?.eventTimeout ??
94
- FetchEventSource.EVENT_TIMEOUT_DEFAULT * 1000;
95
- this.logger = eventSourceInit?.logger;
96
- this.externalAbortController = eventSourceInit?.abortController;
97
- }
98
-
99
- //
100
- // Connect
101
- //
102
-
103
- connect(): void {
104
- if (this.readyState === this.CONNECTING || this.readyState === this.OPEN) {
105
- this.logger?.trace?.('skipping connect', { state: this.readyState });
106
- return;
107
- }
108
-
109
- this.internalConnect();
110
- }
111
-
112
- private internalConnect() {
113
- this.logger?.debug?.('connecting');
114
-
115
- this.readyState = this.CONNECTING;
116
-
117
- const headers = new Headers({
118
- accept: MediaType.EventStream.toString(),
119
- });
120
- if (this.lastEventId) {
121
- headers.append(FetchEventSource.LAST_EVENT_ID_HEADER, this.lastEventId);
122
- }
123
-
124
- const abortController =
125
- this.externalAbortController ?? new AbortController();
126
-
127
- const requestInit: RequestInit = {
128
- headers,
129
- cache: 'no-store',
130
- redirect: 'follow',
131
- signal: abortController.signal,
132
- };
133
-
134
- this.connectionAttemptTime = Date.now();
135
-
136
- this.connectionSubscription = this.adapter(this.url, requestInit)
137
- .pipe(
138
- switchMap((request) => fetch(request)),
139
- switchMap((response) => validate(response, true)),
140
- tap((response) => this.receivedHeaders(response)),
141
- switchMap((response) => {
142
- const body = response.body;
143
- if (!body) {
144
- return EMPTY;
145
- }
146
-
147
- return fromStream(body);
148
- }),
149
- map((value) => this.receivedData(value)),
150
- )
151
- .subscribe({
152
- error: (error: unknown) => {
153
- this.receivedError(error);
154
- },
155
- complete: () => {
156
- this.receivedComplete();
157
- },
158
- });
159
- this.connectionSubscription.add(() => {
160
- abortController.abort();
161
- });
162
- }
163
-
164
- //
165
- // Close
166
- //
167
-
168
- close(): void {
169
- this.logger?.debug?.('close requested');
170
-
171
- this.readyState = this.CLOSED;
172
-
173
- this.internalClose();
174
- }
175
-
176
- private internalClose() {
177
- this.connectionSubscription?.unsubscribe();
178
- this.connectionSubscription = undefined;
179
-
180
- this.clearReconnect();
181
-
182
- this.stopEventTimeoutCheck();
183
- }
184
-
185
- //
186
- // Event Timeout
187
- //
188
-
189
- private startEventTimeoutCheck(lastEventReceivedTime: number) {
190
- this.stopEventTimeoutCheck();
191
-
192
- if (!this.eventTimeout) {
193
- return;
194
- }
195
-
196
- this.lastEventReceivedTime = lastEventReceivedTime;
197
-
198
- this.logger?.trace?.('starting event timeout checks');
199
-
200
- this.eventTimeoutCheckHandle = window.setInterval(
201
- () => this.checkEventTimeout(),
202
- FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL * 1000,
203
- );
204
- }
205
-
206
- private stopEventTimeoutCheck() {
207
- this.logger?.trace?.('stopping event timeout checks');
208
-
209
- if (this.eventTimeoutCheckHandle) {
210
- clearInterval(this.eventTimeoutCheckHandle);
211
- }
212
- this.eventTimeoutCheckHandle = undefined;
213
- }
214
-
215
- private checkEventTimeout() {
216
- if (!this.eventTimeout) {
217
- this.stopEventTimeoutCheck();
218
- return;
219
- }
220
-
221
- this.logger?.trace?.('checking event timeout');
222
-
223
- // Check elapsed time since last received event
224
- const elapsed = Date.now() - this.lastEventReceivedTime;
225
- if (elapsed > this.eventTimeout) {
226
- this.logger?.debug?.('event timeout reached', {
227
- elapsed,
228
- });
229
- this.fireErrorEvent(Error('EventTimeout'));
230
-
231
- this.scheduleReconnect();
232
- }
233
- }
234
-
235
- //
236
- // Connection Handlers
237
- //
238
-
239
- private receivedHeaders(response: Response) {
240
- if (this.readyState !== this.CONNECTING) {
241
- this.logger?.error?.('invalid readyState for receivedHeaders', {
242
- readyState: this.readyState,
243
- });
244
-
245
- this.fireErrorEvent(Error('InvalidState'));
246
-
247
- this.scheduleReconnect();
248
- return;
249
- }
250
-
251
- this.logger?.debug?.('opened');
252
-
253
- this.connectionOrigin = response.url;
254
- this.retryAttempt = 0;
255
- this.readyState = this.OPEN;
256
-
257
- // Start event timeout check, treating this
258
- // connect as last time we received an event
259
- this.startEventTimeoutCheck(Date.now());
260
-
261
- const event = new Event('open');
262
- this.onopen?.(event);
263
- this.dispatchEvent(event);
264
- }
265
-
266
- private receivedData(buffer: ArrayBuffer) {
267
- if (this.readyState !== this.OPEN) {
268
- this.logger?.error?.('invalid readyState for receiveData', {
269
- readyState: this.readyState,
270
- });
271
-
272
- this.fireErrorEvent(Error('InvalidState'));
273
-
274
- this.scheduleReconnect();
275
- return;
276
- }
277
-
278
- this.logger?.debug?.('received data', { length: buffer.byteLength });
279
-
280
- this.eventParser.process(buffer, this.dispatchParsedEvent);
281
- }
282
-
283
- private receivedError(error: unknown) {
284
- if (this.readyState === this.CLOSED) {
285
- return;
286
- }
287
-
288
- this.logger?.debug?.('received error', { error });
289
- this.fireErrorEvent(error);
290
-
291
- if (this.readyState !== this.CLOSED) {
292
- this.scheduleReconnect();
293
- }
294
- }
295
-
296
- private receivedComplete() {
297
- if (this.readyState == this.CLOSED) {
298
- return;
299
- }
300
-
301
- this.logger?.debug?.('received complete');
302
-
303
- this.scheduleReconnect();
304
- }
305
-
306
- //
307
- // Reconnection
308
- //
309
-
310
- private scheduleReconnect() {
311
- this.internalClose();
312
-
313
- // calculate total delay
314
- const backOffDelay = Math.pow(this.retryAttempt, 2) * this.retryTime;
315
- let retryDelay = Math.min(
316
- this.retryTime + backOffDelay,
317
- this.retryTime * FetchEventSource.MAX_RETRY_TIME_MULTIPLE,
318
- );
319
-
320
- // Adjust delay by amount of time last connect
321
- // cycle took, except on the first attempt
322
- if (this.retryAttempt > 0) {
323
- const connectionTime = Date.now() - this.connectionAttemptTime;
324
- // Ensure delay is at least as large as
325
- // minimum retry time interval
326
- retryDelay = Math.max(retryDelay - connectionTime, this.retryTime);
327
- }
328
-
329
- this.retryAttempt++;
330
- this.readyState = this.CONNECTING;
331
-
332
- this.logger?.debug?.('scheduling reconnect', { retryDelay });
333
-
334
- this.reconnectTimeoutHandle = window.setTimeout(
335
- () => this.internalConnect(),
336
- retryDelay,
337
- );
338
- }
339
-
340
- private clearReconnect() {
341
- if (this.reconnectTimeoutHandle) {
342
- clearTimeout(this.reconnectTimeoutHandle);
343
- }
344
- this.reconnectTimeoutHandle = undefined;
345
- }
346
-
347
- //
348
- // Event Dispatch
349
- //
350
-
351
- private dispatchParsedEvent = (eventInfo: EventInfo) => {
352
- this.lastEventReceivedTime = Date.now();
353
-
354
- if (eventInfo.retry) {
355
- const retryTime = Number.parseInt(eventInfo.retry, 10);
356
-
357
- if (Number.isSafeInteger(retryTime)) {
358
- this.logger?.debug?.('updating retry timeout', { retryTime });
359
-
360
- this.internalRetryTime = retryTime;
361
- } else {
362
- this.logger?.debug?.('ignoring invalid retry timeout event', {
363
- eventInfo,
364
- });
365
- }
366
- }
367
-
368
- // skip empty events
369
- if (
370
- eventInfo.id == null &&
371
- eventInfo.event == null &&
372
- eventInfo.data == null
373
- ) {
374
- // skip empty event
375
- return;
376
- }
377
-
378
- // Save last-event-id if the new id is valid
379
- if (eventInfo.id != null) {
380
- // Check for NULL as it is not allowed
381
- if (eventInfo.id.indexOf('\0') == -1) {
382
- this.lastEventId = eventInfo.id;
383
- } else {
384
- this.logger?.debug?.(
385
- 'event id contains null, unable to use for last-event-id',
386
- );
387
- }
388
- }
389
-
390
- // Dispatch event
391
- const event = new MessageEvent(eventInfo.event ?? 'message', {
392
- data: eventInfo.data,
393
- lastEventId: this.lastEventId,
394
- origin: this.connectionOrigin,
395
- });
396
-
397
- this.onmessage?.(event);
398
- this.dispatchEvent(event);
399
- };
400
-
401
- fireErrorEvent(error: unknown): void {
402
- const event = new Event('error');
403
- unknownSet(event, 'error', error);
404
- this.onerror?.(event);
405
- }
406
- }
@@ -1,315 +0,0 @@
1
- // Copyright 2020 Outfox, Inc.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- import { defer, map, Observable, of, switchMap } from 'rxjs';
16
- import { AnyType } from './any-type';
17
- import { ConstructableClassType } from './class-type';
18
- import { validate } from './fetch';
19
- import { FetchEventSource } from './fetch-event-source';
20
- import { HeaderParameters } from './header-parameters';
21
- import { Logger } from './logger';
22
- import { MediaType } from './media-type';
23
- import { TextMediaTypeDecoder } from './media-type-codecs/media-type-decoder';
24
- import { MediaTypeDecoders } from './media-type-codecs/media-type-decoders';
25
- import { isURLQueryParamsEncoder } from './media-type-codecs/media-type-encoder';
26
- import { MediaTypeEncoders } from './media-type-codecs/media-type-encoders';
27
- import { Problem } from './problem';
28
- import {
29
- ExtEventSource,
30
- RequestAdapter,
31
- RequestFactory,
32
- RequestSpec,
33
- } from './request-factory';
34
- import { ResultResponse } from './result-response';
35
- import { SundayError } from './sunday-error';
36
- import { URLTemplate } from './url-template';
37
- import { errorToMessage } from './util/error';
38
-
39
- export class FetchRequestFactory implements RequestFactory {
40
- public baseUrl: URLTemplate;
41
- public adapter?: RequestAdapter;
42
- public mediaTypeEncoders: MediaTypeEncoders;
43
- public mediaTypeDecoders: MediaTypeDecoders;
44
- public problemTypes = new Map<string, ConstructableClassType<Problem>>();
45
- public logger?: Logger;
46
-
47
- constructor(
48
- baseUrl: string | URLTemplate,
49
- options?: {
50
- adapter?: RequestAdapter;
51
- mediaTypeEncoders?: MediaTypeEncoders;
52
- mediaTypeDecoders?: MediaTypeDecoders;
53
- logger?: Logger;
54
- },
55
- ) {
56
- this.baseUrl =
57
- typeof baseUrl === 'string' ? new URLTemplate(baseUrl) : baseUrl;
58
- this.adapter = options?.adapter;
59
- this.mediaTypeEncoders =
60
- options?.mediaTypeEncoders ?? MediaTypeEncoders.DEFAULT;
61
- this.mediaTypeDecoders =
62
- options?.mediaTypeDecoders ?? MediaTypeDecoders.DEFAULT;
63
- this.logger = options?.logger ?? console;
64
- }
65
-
66
- registerProblem(
67
- type: URL | string,
68
- problemType: ConstructableClassType<Problem>,
69
- ): void {
70
- const typeStr = type instanceof URL ? type.toString() : type;
71
- this.problemTypes.set(typeStr, problemType);
72
- }
73
-
74
- request(
75
- requestSpec: RequestSpec<unknown>,
76
- requestInit?: RequestInit,
77
- ): Observable<Request> {
78
- //
79
- return defer(() => {
80
- const url = this.baseUrl.complete(
81
- requestSpec.pathTemplate,
82
- requestSpec.pathParameters ?? {},
83
- );
84
-
85
- if (requestSpec.queryParameters) {
86
- const encoder = this.mediaTypeEncoders.find(
87
- MediaType.WWWFormUrlEncoded,
88
- );
89
- if (!isURLQueryParamsEncoder(encoder)) {
90
- throw Error(
91
- `MediaTypeEncoder for ${MediaType.WWWFormUrlEncoded} must be an instance of URLQueryParamsEncoder`,
92
- );
93
- }
94
- url.search = `?${encoder.encodeQueryString(
95
- requestSpec.queryParameters,
96
- )}`;
97
- }
98
-
99
- const headers = new Headers(HeaderParameters.encode(requestSpec.headers));
100
-
101
- // Determine & add accept header
102
- if (requestSpec.acceptTypes) {
103
- const supportedAcceptTypes = requestSpec.acceptTypes.filter((type) =>
104
- this.mediaTypeDecoders.supports(type),
105
- );
106
-
107
- if (!supportedAcceptTypes.length) {
108
- throw Error(
109
- 'None of the provided accept types has a reqistered decoder',
110
- );
111
- }
112
-
113
- const accept = supportedAcceptTypes.join(' , ');
114
-
115
- headers.set('accept', accept);
116
- }
117
-
118
- // Determine content type
119
- const contentType = requestSpec.contentTypes?.find((type) =>
120
- this.mediaTypeEncoders.supports(type),
121
- );
122
-
123
- // If matched, add content type (even if body is nil, to match any expected server requirements)
124
- if (contentType) {
125
- headers.set('content-type', contentType.toString());
126
- }
127
-
128
- // Encode & add body data
129
- let body: BodyInit | undefined;
130
- if (requestSpec.body) {
131
- if (!contentType) {
132
- throw Error(
133
- 'None of the provided content types has a registered encoder',
134
- );
135
- }
136
-
137
- body = this.mediaTypeEncoders
138
- .find(contentType)
139
- .encode(requestSpec.body, requestSpec.bodyType);
140
- }
141
-
142
- const init: RequestInit = Object.assign({}, requestInit, {
143
- headers,
144
- body,
145
- method: requestSpec.method,
146
- });
147
-
148
- const request = new Request(url.toString(), init);
149
-
150
- return this.adapter?.(request) ?? of(request);
151
- });
152
- }
153
-
154
- response(
155
- request: Request | RequestSpec<unknown>,
156
- dataExpected?: boolean,
157
- ): Observable<Response> {
158
- const request$ =
159
- request instanceof Request ? of(request) : this.request(request);
160
- return request$.pipe(
161
- switchMap((req) => fetch(req)),
162
- switchMap((response) =>
163
- validate(response, dataExpected ?? false, this.problemTypes),
164
- ),
165
- );
166
- }
167
-
168
- resultResponse<B, R>(
169
- requestSpec: RequestSpec<B>,
170
- resultType: AnyType,
171
- ): Observable<ResultResponse<R>>;
172
- resultResponse<B>(
173
- requestSpec: RequestSpec<B>,
174
- ): Observable<ResultResponse<void>>;
175
- resultResponse(
176
- request: RequestSpec<unknown>,
177
- responseType?: AnyType,
178
- ): Observable<ResultResponse<unknown>> {
179
- const response$ = this.response(request, !!responseType);
180
-
181
- if (!responseType) {
182
- return response$.pipe(
183
- map((response) => {
184
- return {
185
- result: undefined,
186
- response,
187
- };
188
- }),
189
- );
190
- } else {
191
- return response$.pipe(
192
- switchMap(async (response) => {
193
- try {
194
- const contentType = MediaType.from(
195
- response.headers.get('content-type'),
196
- MediaType.OctetStream,
197
- );
198
- const decoder = this.mediaTypeDecoders.find(contentType);
199
- const result = await decoder.decode(response, responseType);
200
- return {
201
- result,
202
- response,
203
- };
204
- } catch (error) {
205
- throw await SundayError.fromResponse(
206
- errorToMessage(error, 'Response Decoding Failed'),
207
- response,
208
- );
209
- }
210
- }),
211
- );
212
- }
213
- }
214
-
215
- result<B, R>(requestSpec: RequestSpec<B>, resultType: AnyType): Observable<R>;
216
- result<B>(requestSpec: RequestSpec<B>): Observable<void>;
217
- result(
218
- request: RequestSpec<unknown>,
219
- responseType?: AnyType,
220
- ): Observable<unknown> {
221
- const response$ = this.response(request, !!responseType);
222
-
223
- if (!responseType) {
224
- return response$.pipe(map(() => undefined));
225
- } else {
226
- return response$.pipe(
227
- switchMap(async (response) => {
228
- try {
229
- const contentType = MediaType.from(
230
- response.headers.get('content-type'),
231
- MediaType.OctetStream,
232
- );
233
- const decoder = this.mediaTypeDecoders.find(contentType);
234
- return await decoder.decode(response, responseType);
235
- } catch (error) {
236
- throw await SundayError.fromResponse(
237
- errorToMessage(error, 'Response Decoding Failed'),
238
- response,
239
- );
240
- }
241
- }),
242
- );
243
- }
244
- }
245
-
246
- eventSource(requestSpec: RequestSpec<void>): ExtEventSource {
247
- //
248
- const adapter = (
249
- url: string,
250
- requestInit: RequestInit,
251
- ): Observable<Request> => {
252
- const eventSourceSpec = Object.assign({}, requestSpec, {
253
- pathTemplate: url,
254
- });
255
- return this.request(eventSourceSpec, requestInit);
256
- };
257
-
258
- return new FetchEventSource(requestSpec.pathTemplate, {
259
- logger: this.logger,
260
- adapter,
261
- });
262
- }
263
-
264
- eventStream<E>(
265
- requestSpec: RequestSpec<void>,
266
- decoder: (
267
- decoder: TextMediaTypeDecoder,
268
- event: string | undefined,
269
- id: string | undefined,
270
- data: string,
271
- logger?: Logger,
272
- ) => E | undefined,
273
- ): Observable<E> {
274
- const eventSource = this.eventSource(requestSpec);
275
-
276
- const jsonDecoder = this.mediaTypeDecoders.find(
277
- MediaType.JSON,
278
- ) as TextMediaTypeDecoder;
279
-
280
- return new Observable((subscriber) => {
281
- eventSource.onmessage = (event: MessageEvent<string>) => {
282
- if (!event.data) {
283
- return;
284
- }
285
-
286
- try {
287
- const decodedEvent = decoder(
288
- jsonDecoder,
289
- event.type,
290
- event.lastEventId,
291
- event.data,
292
- this.logger,
293
- );
294
- if (!decodedEvent) {
295
- return;
296
- }
297
-
298
- subscriber.next(decodedEvent);
299
- } catch (error) {
300
- subscriber.error(error);
301
- }
302
- };
303
-
304
- eventSource.onerror = (event) => {
305
- this.logger?.error?.({ event }, 'event source error');
306
- };
307
-
308
- eventSource.connect();
309
-
310
- return () => {
311
- eventSource.close();
312
- };
313
- });
314
- }
315
- }