isomorfeus-puppetmaster 0.5.5 → 0.5.6

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 (710) hide show
  1. checksums.yaml +4 -4
  2. data/lib/isomorfeus/puppetmaster/console_message.rb +18 -18
  3. data/lib/isomorfeus/puppetmaster/cookie.rb +46 -46
  4. data/lib/isomorfeus/puppetmaster/driver/puppeteer.rb +413 -415
  5. data/lib/isomorfeus/puppetmaster/driver/puppeteer_document.rb +953 -953
  6. data/lib/isomorfeus/puppetmaster/driver/puppeteer_node.rb +851 -851
  7. data/lib/isomorfeus/puppetmaster/errors.rb +90 -90
  8. data/lib/isomorfeus/puppetmaster/iframe.rb +16 -16
  9. data/lib/isomorfeus/puppetmaster/node/content_editable.rb +17 -17
  10. data/lib/isomorfeus/puppetmaster/node/input.rb +20 -20
  11. data/lib/isomorfeus/puppetmaster/node/select.rb +35 -35
  12. data/lib/isomorfeus/puppetmaster/node.rb +279 -279
  13. data/lib/isomorfeus/puppetmaster/request.rb +16 -16
  14. data/lib/isomorfeus/puppetmaster/response.rb +25 -25
  15. data/lib/isomorfeus/puppetmaster/self_forwardable.rb +38 -38
  16. data/lib/isomorfeus/puppetmaster/version.rb +3 -3
  17. data/lib/isomorfeus/puppetmaster.rb +85 -85
  18. data/lib/isomorfeus-puppetmaster.rb +1 -0
  19. data/node_modules/.bin/extract-zip +12 -12
  20. data/node_modules/.bin/extract-zip.ps1 +28 -28
  21. data/node_modules/.bin/rimraf +12 -12
  22. data/node_modules/.bin/rimraf.ps1 +28 -28
  23. data/node_modules/.package-lock.json +530 -585
  24. data/node_modules/@types/node/LICENSE +21 -21
  25. data/node_modules/@types/node/assert/strict.d.ts +8 -8
  26. data/node_modules/@types/node/assert.d.ts +912 -912
  27. data/node_modules/@types/node/async_hooks.d.ts +497 -497
  28. data/node_modules/@types/node/buffer.d.ts +2142 -2142
  29. data/node_modules/@types/node/child_process.d.ts +1355 -1355
  30. data/node_modules/@types/node/cluster.d.ts +414 -414
  31. data/node_modules/@types/node/console.d.ts +407 -407
  32. data/node_modules/@types/node/constants.d.ts +18 -18
  33. data/node_modules/@types/node/crypto.d.ts +3224 -3224
  34. data/node_modules/@types/node/dgram.d.ts +545 -545
  35. data/node_modules/@types/node/diagnostics_channel.d.ts +128 -128
  36. data/node_modules/@types/node/dns/promises.d.ts +357 -357
  37. data/node_modules/@types/node/dns.d.ts +643 -643
  38. data/node_modules/@types/node/domain.d.ts +169 -169
  39. data/node_modules/@types/node/events.d.ts +623 -623
  40. data/node_modules/@types/node/fs/promises.d.ts +997 -997
  41. data/node_modules/@types/node/fs.d.ts +3723 -3723
  42. data/node_modules/@types/node/globals.d.ts +285 -285
  43. data/node_modules/@types/node/globals.global.d.ts +1 -1
  44. data/node_modules/@types/node/http.d.ts +1358 -1358
  45. data/node_modules/@types/node/http2.d.ts +2100 -2100
  46. data/node_modules/@types/node/https.d.ts +391 -391
  47. data/node_modules/@types/node/index.d.ts +131 -131
  48. data/node_modules/@types/node/inspector.d.ts +2738 -2738
  49. data/node_modules/@types/node/module.d.ts +114 -114
  50. data/node_modules/@types/node/net.d.ts +783 -783
  51. data/node_modules/@types/node/os.d.ts +455 -455
  52. data/node_modules/@types/node/package.json +229 -229
  53. data/node_modules/@types/node/path.d.ts +172 -172
  54. data/node_modules/@types/node/perf_hooks.d.ts +555 -555
  55. data/node_modules/@types/node/process.d.ts +1477 -1477
  56. data/node_modules/@types/node/punycode.d.ts +117 -117
  57. data/node_modules/@types/node/querystring.d.ts +131 -131
  58. data/node_modules/@types/node/readline.d.ts +542 -542
  59. data/node_modules/@types/node/repl.d.ts +424 -424
  60. data/node_modules/@types/node/stream/consumers.d.ts +24 -24
  61. data/node_modules/@types/node/stream/promises.d.ts +42 -42
  62. data/node_modules/@types/node/stream/web.d.ts +6 -6
  63. data/node_modules/@types/node/stream.d.ts +1181 -1181
  64. data/node_modules/@types/node/string_decoder.d.ts +67 -67
  65. data/node_modules/@types/node/timers/promises.d.ts +68 -68
  66. data/node_modules/@types/node/timers.d.ts +94 -94
  67. data/node_modules/@types/node/tls.d.ts +1019 -1019
  68. data/node_modules/@types/node/trace_events.d.ts +161 -161
  69. data/node_modules/@types/node/tty.d.ts +206 -206
  70. data/node_modules/@types/node/url.d.ts +798 -798
  71. data/node_modules/@types/node/util.d.ts +1556 -1556
  72. data/node_modules/@types/node/v8.d.ts +378 -378
  73. data/node_modules/@types/node/vm.d.ts +504 -504
  74. data/node_modules/@types/node/wasi.d.ts +153 -153
  75. data/node_modules/@types/node/worker_threads.d.ts +649 -649
  76. data/node_modules/@types/node/zlib.d.ts +517 -517
  77. data/node_modules/@types/yauzl/LICENSE +21 -21
  78. data/node_modules/@types/yauzl/index.d.ts +98 -98
  79. data/node_modules/@types/yauzl/package.json +26 -26
  80. data/node_modules/agent-base/README.md +145 -145
  81. data/node_modules/agent-base/dist/src/index.d.ts +78 -78
  82. data/node_modules/agent-base/dist/src/index.js +202 -202
  83. data/node_modules/agent-base/dist/src/promisify.d.ts +4 -4
  84. data/node_modules/agent-base/dist/src/promisify.js +17 -17
  85. data/node_modules/agent-base/package.json +64 -64
  86. data/node_modules/agent-base/src/index.ts +345 -345
  87. data/node_modules/agent-base/src/promisify.ts +33 -33
  88. data/node_modules/balanced-match/.github/FUNDING.yml +2 -2
  89. data/node_modules/balanced-match/LICENSE.md +21 -21
  90. data/node_modules/balanced-match/README.md +97 -97
  91. data/node_modules/balanced-match/index.js +62 -62
  92. data/node_modules/balanced-match/package.json +48 -48
  93. data/node_modules/base64-js/LICENSE +21 -21
  94. data/node_modules/base64-js/README.md +34 -34
  95. data/node_modules/base64-js/index.d.ts +3 -3
  96. data/node_modules/base64-js/index.js +150 -150
  97. data/node_modules/base64-js/package.json +47 -47
  98. data/node_modules/bl/.travis.yml +17 -17
  99. data/node_modules/bl/BufferList.js +396 -396
  100. data/node_modules/bl/LICENSE.md +13 -13
  101. data/node_modules/bl/README.md +247 -247
  102. data/node_modules/bl/bl.js +84 -84
  103. data/node_modules/bl/package.json +37 -37
  104. data/node_modules/bl/test/convert.js +21 -21
  105. data/node_modules/bl/test/indexOf.js +492 -492
  106. data/node_modules/bl/test/isBufferList.js +32 -32
  107. data/node_modules/bl/test/test.js +869 -869
  108. data/node_modules/brace-expansion/LICENSE +21 -21
  109. data/node_modules/brace-expansion/README.md +129 -129
  110. data/node_modules/brace-expansion/index.js +201 -201
  111. data/node_modules/brace-expansion/package.json +47 -47
  112. data/node_modules/buffer/AUTHORS.md +70 -70
  113. data/node_modules/buffer/LICENSE +21 -21
  114. data/node_modules/buffer/README.md +410 -410
  115. data/node_modules/buffer/index.d.ts +186 -186
  116. data/node_modules/buffer/index.js +1817 -1817
  117. data/node_modules/buffer/package.json +96 -96
  118. data/node_modules/buffer-crc32/LICENSE +19 -19
  119. data/node_modules/buffer-crc32/README.md +47 -47
  120. data/node_modules/buffer-crc32/index.js +111 -111
  121. data/node_modules/buffer-crc32/package.json +39 -39
  122. data/node_modules/chownr/LICENSE +15 -15
  123. data/node_modules/chownr/README.md +3 -3
  124. data/node_modules/chownr/chownr.js +167 -167
  125. data/node_modules/chownr/package.json +29 -29
  126. data/node_modules/concat-map/.travis.yml +4 -4
  127. data/node_modules/concat-map/LICENSE +18 -18
  128. data/node_modules/concat-map/README.markdown +62 -62
  129. data/node_modules/concat-map/example/map.js +6 -6
  130. data/node_modules/concat-map/index.js +13 -13
  131. data/node_modules/concat-map/package.json +43 -43
  132. data/node_modules/concat-map/test/map.js +39 -39
  133. data/node_modules/debug/LICENSE +19 -19
  134. data/node_modules/debug/README.md +455 -455
  135. data/node_modules/debug/package.json +59 -59
  136. data/node_modules/debug/src/browser.js +269 -269
  137. data/node_modules/debug/src/common.js +274 -274
  138. data/node_modules/debug/src/index.js +10 -10
  139. data/node_modules/debug/src/node.js +263 -263
  140. data/node_modules/devtools-protocol/LICENSE +27 -27
  141. data/node_modules/devtools-protocol/README.md +12 -12
  142. data/node_modules/devtools-protocol/json/browser_protocol.json +20985 -20640
  143. data/node_modules/devtools-protocol/json/js_protocol.json +3531 -3580
  144. data/node_modules/devtools-protocol/package.json +17 -18
  145. data/node_modules/devtools-protocol/pdl/browser_protocol.pdl +9849 -9637
  146. data/node_modules/devtools-protocol/pdl/js_protocol.pdl +1653 -1678
  147. data/node_modules/devtools-protocol/types/protocol-mapping.d.ts +4333 -4321
  148. data/node_modules/devtools-protocol/types/protocol-proxy-api.d.ts +3695 -3683
  149. data/node_modules/devtools-protocol/types/protocol.d.ts +15714 -15538
  150. data/node_modules/end-of-stream/LICENSE +20 -20
  151. data/node_modules/end-of-stream/README.md +54 -54
  152. data/node_modules/end-of-stream/index.js +94 -94
  153. data/node_modules/end-of-stream/package.json +37 -37
  154. data/node_modules/extract-zip/LICENSE +23 -23
  155. data/node_modules/extract-zip/cli.js +19 -19
  156. data/node_modules/extract-zip/index.d.ts +21 -21
  157. data/node_modules/extract-zip/index.js +173 -173
  158. data/node_modules/extract-zip/package.json +80 -80
  159. data/node_modules/extract-zip/readme.md +57 -57
  160. data/node_modules/fd-slicer/.npmignore +2 -2
  161. data/node_modules/fd-slicer/.travis.yml +7 -7
  162. data/node_modules/fd-slicer/CHANGELOG.md +49 -49
  163. data/node_modules/fd-slicer/LICENSE +21 -21
  164. data/node_modules/fd-slicer/README.md +199 -199
  165. data/node_modules/fd-slicer/index.js +296 -296
  166. data/node_modules/fd-slicer/package.json +36 -36
  167. data/node_modules/fd-slicer/test/test.js +350 -350
  168. data/node_modules/find-up/index.d.ts +137 -137
  169. data/node_modules/find-up/index.js +89 -89
  170. data/node_modules/find-up/license +9 -9
  171. data/node_modules/find-up/package.json +53 -53
  172. data/node_modules/find-up/readme.md +156 -156
  173. data/node_modules/fs-constants/LICENSE +21 -21
  174. data/node_modules/fs-constants/README.md +26 -26
  175. data/node_modules/fs-constants/browser.js +1 -1
  176. data/node_modules/fs-constants/index.js +1 -1
  177. data/node_modules/fs-constants/package.json +19 -19
  178. data/node_modules/fs.realpath/LICENSE +43 -43
  179. data/node_modules/fs.realpath/README.md +33 -33
  180. data/node_modules/fs.realpath/index.js +66 -66
  181. data/node_modules/fs.realpath/old.js +303 -303
  182. data/node_modules/fs.realpath/package.json +26 -26
  183. data/node_modules/get-stream/buffer-stream.js +52 -52
  184. data/node_modules/get-stream/index.d.ts +108 -108
  185. data/node_modules/get-stream/index.js +60 -60
  186. data/node_modules/get-stream/license +9 -9
  187. data/node_modules/get-stream/package.json +50 -50
  188. data/node_modules/get-stream/readme.md +124 -124
  189. data/node_modules/glob/LICENSE +21 -21
  190. data/node_modules/glob/README.md +375 -375
  191. data/node_modules/glob/changelog.md +67 -67
  192. data/node_modules/glob/common.js +234 -234
  193. data/node_modules/glob/glob.js +788 -788
  194. data/node_modules/glob/package.json +51 -51
  195. data/node_modules/glob/sync.js +484 -484
  196. data/node_modules/https-proxy-agent/README.md +137 -137
  197. data/node_modules/https-proxy-agent/dist/agent.d.ts +30 -30
  198. data/node_modules/https-proxy-agent/dist/agent.js +179 -179
  199. data/node_modules/https-proxy-agent/dist/index.d.ts +23 -23
  200. data/node_modules/https-proxy-agent/dist/index.js +13 -13
  201. data/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +7 -7
  202. data/node_modules/https-proxy-agent/dist/parse-proxy-response.js +65 -65
  203. data/node_modules/https-proxy-agent/package.json +56 -56
  204. data/node_modules/ieee754/LICENSE +11 -11
  205. data/node_modules/ieee754/README.md +51 -51
  206. data/node_modules/ieee754/index.d.ts +9 -9
  207. data/node_modules/ieee754/index.js +85 -85
  208. data/node_modules/ieee754/package.json +52 -52
  209. data/node_modules/inflight/LICENSE +15 -15
  210. data/node_modules/inflight/README.md +37 -37
  211. data/node_modules/inflight/inflight.js +54 -54
  212. data/node_modules/inflight/package.json +29 -29
  213. data/node_modules/inherits/LICENSE +16 -16
  214. data/node_modules/inherits/README.md +42 -42
  215. data/node_modules/inherits/inherits.js +9 -9
  216. data/node_modules/inherits/inherits_browser.js +27 -27
  217. data/node_modules/inherits/package.json +29 -29
  218. data/node_modules/locate-path/index.d.ts +83 -83
  219. data/node_modules/locate-path/index.js +65 -65
  220. data/node_modules/locate-path/license +9 -9
  221. data/node_modules/locate-path/package.json +45 -45
  222. data/node_modules/locate-path/readme.md +122 -122
  223. data/node_modules/minimatch/LICENSE +15 -15
  224. data/node_modules/minimatch/README.md +209 -209
  225. data/node_modules/minimatch/minimatch.js +923 -923
  226. data/node_modules/minimatch/package.json +30 -30
  227. data/node_modules/mkdirp-classic/LICENSE +21 -21
  228. data/node_modules/mkdirp-classic/README.md +18 -18
  229. data/node_modules/mkdirp-classic/index.js +98 -98
  230. data/node_modules/mkdirp-classic/package.json +18 -18
  231. data/node_modules/ms/index.js +162 -162
  232. data/node_modules/ms/license.md +21 -21
  233. data/node_modules/ms/package.json +37 -37
  234. data/node_modules/ms/readme.md +60 -60
  235. data/node_modules/node-fetch/LICENSE.md +22 -22
  236. data/node_modules/node-fetch/README.md +590 -590
  237. data/node_modules/node-fetch/browser.js +24 -24
  238. data/node_modules/node-fetch/lib/index.es.js +1662 -1662
  239. data/node_modules/node-fetch/lib/index.js +1671 -1671
  240. data/node_modules/node-fetch/lib/index.mjs +1660 -1660
  241. data/node_modules/node-fetch/package.json +68 -68
  242. data/node_modules/once/LICENSE +15 -15
  243. data/node_modules/once/README.md +79 -79
  244. data/node_modules/once/once.js +42 -42
  245. data/node_modules/once/package.json +33 -33
  246. data/node_modules/p-limit/index.d.ts +38 -38
  247. data/node_modules/p-limit/index.js +57 -57
  248. data/node_modules/p-limit/license +9 -9
  249. data/node_modules/p-limit/package.json +52 -52
  250. data/node_modules/p-limit/readme.md +101 -101
  251. data/node_modules/p-locate/index.d.ts +64 -64
  252. data/node_modules/p-locate/index.js +52 -52
  253. data/node_modules/p-locate/license +9 -9
  254. data/node_modules/p-locate/package.json +53 -53
  255. data/node_modules/p-locate/readme.md +90 -90
  256. data/node_modules/p-try/index.d.ts +39 -39
  257. data/node_modules/p-try/index.js +9 -9
  258. data/node_modules/p-try/license +9 -9
  259. data/node_modules/p-try/package.json +42 -42
  260. data/node_modules/p-try/readme.md +58 -58
  261. data/node_modules/path-exists/index.d.ts +28 -28
  262. data/node_modules/path-exists/index.js +23 -23
  263. data/node_modules/path-exists/license +9 -9
  264. data/node_modules/path-exists/package.json +39 -39
  265. data/node_modules/path-exists/readme.md +52 -52
  266. data/node_modules/path-is-absolute/index.js +20 -20
  267. data/node_modules/path-is-absolute/license +21 -21
  268. data/node_modules/path-is-absolute/package.json +43 -43
  269. data/node_modules/path-is-absolute/readme.md +59 -59
  270. data/node_modules/pend/LICENSE +23 -23
  271. data/node_modules/pend/README.md +41 -41
  272. data/node_modules/pend/index.js +55 -55
  273. data/node_modules/pend/package.json +18 -18
  274. data/node_modules/pend/test.js +137 -137
  275. data/node_modules/pkg-dir/index.d.ts +44 -44
  276. data/node_modules/pkg-dir/index.js +17 -17
  277. data/node_modules/pkg-dir/license +9 -9
  278. data/node_modules/pkg-dir/package.json +56 -56
  279. data/node_modules/pkg-dir/readme.md +66 -66
  280. data/node_modules/progress/CHANGELOG.md +115 -115
  281. data/node_modules/progress/LICENSE +22 -22
  282. data/node_modules/progress/Makefile +8 -8
  283. data/node_modules/progress/Readme.md +146 -146
  284. data/node_modules/progress/index.js +1 -1
  285. data/node_modules/progress/lib/node-progress.js +236 -236
  286. data/node_modules/progress/package.json +26 -26
  287. data/node_modules/proxy-from-env/.eslintrc +29 -29
  288. data/node_modules/proxy-from-env/.travis.yml +10 -10
  289. data/node_modules/proxy-from-env/LICENSE +20 -20
  290. data/node_modules/proxy-from-env/README.md +131 -131
  291. data/node_modules/proxy-from-env/index.js +108 -108
  292. data/node_modules/proxy-from-env/package.json +34 -34
  293. data/node_modules/proxy-from-env/test.js +483 -483
  294. data/node_modules/pump/.travis.yml +5 -5
  295. data/node_modules/pump/LICENSE +20 -20
  296. data/node_modules/pump/README.md +65 -65
  297. data/node_modules/pump/index.js +82 -82
  298. data/node_modules/pump/package.json +24 -24
  299. data/node_modules/pump/test-browser.js +66 -66
  300. data/node_modules/pump/test-node.js +53 -53
  301. data/node_modules/puppeteer-core/CHANGELOG.md +319 -290
  302. data/node_modules/puppeteer-core/LICENSE +202 -202
  303. data/node_modules/puppeteer-core/README.md +481 -481
  304. data/node_modules/puppeteer-core/cjs-entry-core.js +29 -29
  305. data/node_modules/puppeteer-core/cjs-entry.js +29 -29
  306. data/node_modules/puppeteer-core/install.js +89 -89
  307. data/node_modules/puppeteer-core/lib/cjs/puppeteer/api-docs-entry.d.ts +110 -110
  308. data/node_modules/puppeteer-core/lib/cjs/puppeteer/api-docs-entry.js +80 -80
  309. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Accessibility.d.ts +175 -175
  310. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Accessibility.js +360 -360
  311. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts +20 -20
  312. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js +84 -84
  313. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js.map +1 -1
  314. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.d.ts +455 -455
  315. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.js +540 -540
  316. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.d.ts +53 -53
  317. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.js +97 -97
  318. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserWebSocketTransport.d.ts +25 -25
  319. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserWebSocketTransport.js +34 -34
  320. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.d.ts +135 -135
  321. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js +298 -298
  322. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ConnectionTransport.d.ts +24 -24
  323. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ConnectionTransport.js +17 -17
  324. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ConsoleMessage.d.ts +72 -72
  325. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ConsoleMessage.js +64 -64
  326. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.d.ts +204 -204
  327. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.js +335 -335
  328. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.d.ts +175 -175
  329. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.js +662 -662
  330. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Debug.d.ts +52 -52
  331. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Debug.js +81 -81
  332. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts +40 -40
  333. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.js +1070 -1070
  334. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.d.ts +74 -74
  335. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.js +97 -97
  336. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EmulationManager.d.ts +24 -24
  337. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EmulationManager.js +37 -37
  338. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.d.ts +50 -50
  339. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.js +56 -56
  340. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.d.ts +60 -60
  341. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.js +17 -17
  342. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.d.ts +92 -92
  343. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js +116 -116
  344. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Events.d.ts +81 -81
  345. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Events.js +86 -86
  346. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.d.ts +193 -193
  347. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js +321 -321
  348. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.d.ts +58 -58
  349. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.js +71 -71
  350. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.d.ts +744 -744
  351. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js +1047 -1047
  352. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
  353. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts +350 -345
  354. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  355. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js +549 -549
  356. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js.map +1 -1
  357. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.d.ts +134 -125
  358. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.d.ts.map +1 -1
  359. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js +184 -164
  360. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js.map +1 -1
  361. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.d.ts +358 -358
  362. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.js +543 -543
  363. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.d.ts +490 -490
  364. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js +827 -827
  365. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.d.ts +65 -65
  366. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.d.ts.map +1 -1
  367. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js +149 -148
  368. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
  369. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkConditions.d.ts +26 -26
  370. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkConditions.js +33 -33
  371. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts +126 -97
  372. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
  373. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js +467 -342
  374. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
  375. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.d.ts +161 -161
  376. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.js +34 -34
  377. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.d.ts +2055 -2055
  378. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js +2533 -2533
  379. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Product.d.ts +20 -20
  380. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Product.js +17 -17
  381. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.d.ts +159 -159
  382. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.js +161 -161
  383. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PuppeteerViewport.d.ts +51 -51
  384. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PuppeteerViewport.js +2 -2
  385. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/QueryHandler.d.ts +64 -64
  386. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/QueryHandler.js +165 -165
  387. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/SecurityDetails.d.ts +60 -60
  388. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/SecurityDetails.js +76 -76
  389. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.d.ts +100 -100
  390. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.js +145 -145
  391. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.d.ts +20 -20
  392. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.js +29 -29
  393. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TimeoutSettings.d.ts +27 -27
  394. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TimeoutSettings.js +47 -47
  395. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.d.ts +46 -46
  396. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.js +109 -109
  397. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/USKeyboardLayout.d.ts +39 -39
  398. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/USKeyboardLayout.js +406 -406
  399. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/WebWorker.d.ts +98 -98
  400. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/WebWorker.js +112 -112
  401. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.d.ts +22 -22
  402. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js +33 -33
  403. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/fetch.d.ts +16 -16
  404. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/fetch.js +43 -43
  405. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.d.ts +84 -84
  406. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js +327 -327
  407. data/node_modules/puppeteer-core/lib/cjs/puppeteer/environment.d.ts +16 -16
  408. data/node_modules/puppeteer-core/lib/cjs/puppeteer/environment.js +19 -19
  409. data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.d.ts +16 -16
  410. data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.js +2 -2
  411. data/node_modules/puppeteer-core/lib/cjs/puppeteer/initialize-node.d.ts +17 -17
  412. data/node_modules/puppeteer-core/lib/cjs/puppeteer/initialize-node.js +44 -44
  413. data/node_modules/puppeteer-core/lib/cjs/puppeteer/initialize-web.d.ts +17 -17
  414. data/node_modules/puppeteer-core/lib/cjs/puppeteer/initialize-web.js +26 -26
  415. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.d.ts +133 -133
  416. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.js +500 -500
  417. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.d.ts +40 -39
  418. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  419. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js +256 -230
  420. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
  421. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.d.ts +134 -134
  422. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.js +17 -17
  423. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.d.ts +16 -16
  424. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.d.ts.map +1 -1
  425. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js +655 -588
  426. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js.map +1 -1
  427. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.d.ts +26 -26
  428. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js +47 -47
  429. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/PipeTransport.d.ts +29 -29
  430. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/PipeTransport.js +64 -64
  431. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.d.ts +153 -153
  432. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.js +188 -188
  433. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.d.ts +17 -17
  434. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.js +173 -173
  435. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.d.ts +17 -17
  436. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.js +24 -24
  437. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.d.ts +17 -17
  438. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.js +23 -23
  439. data/node_modules/puppeteer-core/lib/cjs/puppeteer/revisions.d.ts +21 -21
  440. data/node_modules/puppeteer-core/lib/cjs/puppeteer/revisions.js +22 -22
  441. data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.d.ts +17 -17
  442. data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.js +23 -23
  443. data/node_modules/puppeteer-core/lib/cjs/vendor/mitt/src/index.d.ts +27 -27
  444. data/node_modules/puppeteer-core/lib/cjs/vendor/mitt/src/index.js +56 -56
  445. data/node_modules/puppeteer-core/lib/esm/puppeteer/api-docs-entry.d.ts +110 -110
  446. data/node_modules/puppeteer-core/lib/esm/puppeteer/api-docs-entry.js +80 -80
  447. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Accessibility.d.ts +175 -175
  448. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Accessibility.js +356 -356
  449. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.d.ts +20 -20
  450. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js +81 -81
  451. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js.map +1 -1
  452. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.d.ts +455 -455
  453. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.js +535 -535
  454. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserConnector.d.ts +53 -53
  455. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserConnector.js +74 -74
  456. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserWebSocketTransport.d.ts +25 -25
  457. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserWebSocketTransport.js +30 -30
  458. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.d.ts +135 -135
  459. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.js +293 -293
  460. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/ConnectionTransport.d.ts +24 -24
  461. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/ConnectionTransport.js +16 -16
  462. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/ConsoleMessage.d.ts +72 -72
  463. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/ConsoleMessage.js +60 -60
  464. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.d.ts +204 -204
  465. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.js +329 -329
  466. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.d.ts +175 -175
  467. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.js +657 -657
  468. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Debug.d.ts +52 -52
  469. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Debug.js +77 -77
  470. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.d.ts +40 -40
  471. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.js +1067 -1067
  472. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Dialog.d.ts +74 -74
  473. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Dialog.js +93 -93
  474. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EmulationManager.d.ts +24 -24
  475. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EmulationManager.js +33 -33
  476. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.d.ts +50 -50
  477. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js +50 -50
  478. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.d.ts +60 -60
  479. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.js +16 -16
  480. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EventEmitter.d.ts +92 -92
  481. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EventEmitter.js +109 -109
  482. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Events.d.ts +81 -81
  483. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Events.js +83 -83
  484. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/ExecutionContext.d.ts +193 -193
  485. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/ExecutionContext.js +317 -317
  486. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FileChooser.d.ts +58 -58
  487. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FileChooser.js +67 -67
  488. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.d.ts +744 -744
  489. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js +1042 -1042
  490. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
  491. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts +350 -345
  492. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  493. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js +545 -545
  494. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js.map +1 -1
  495. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.d.ts +134 -125
  496. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.d.ts.map +1 -1
  497. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js +180 -160
  498. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js.map +1 -1
  499. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.d.ts +358 -358
  500. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.js +537 -537
  501. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.d.ts +490 -490
  502. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.js +802 -802
  503. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/LifecycleWatcher.d.ts +65 -65
  504. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/LifecycleWatcher.d.ts.map +1 -1
  505. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/LifecycleWatcher.js +145 -144
  506. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/LifecycleWatcher.js.map +1 -1
  507. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkConditions.d.ts +26 -26
  508. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkConditions.js +30 -30
  509. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts +126 -97
  510. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
  511. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js +463 -338
  512. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
  513. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.d.ts +161 -161
  514. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.js +31 -31
  515. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.d.ts +2055 -2055
  516. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.js +2529 -2529
  517. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Product.d.ts +20 -20
  518. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Product.js +16 -16
  519. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Puppeteer.d.ts +159 -159
  520. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Puppeteer.js +157 -157
  521. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PuppeteerViewport.d.ts +51 -51
  522. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PuppeteerViewport.js +1 -1
  523. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/QueryHandler.d.ts +64 -64
  524. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/QueryHandler.js +157 -157
  525. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/SecurityDetails.d.ts +60 -60
  526. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/SecurityDetails.js +72 -72
  527. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.d.ts +100 -100
  528. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.js +141 -141
  529. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.d.ts +20 -20
  530. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js +25 -25
  531. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TimeoutSettings.d.ts +27 -27
  532. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TimeoutSettings.js +43 -43
  533. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.d.ts +46 -46
  534. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.js +105 -105
  535. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/USKeyboardLayout.d.ts +39 -39
  536. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/USKeyboardLayout.js +403 -403
  537. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/WebWorker.d.ts +98 -98
  538. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/WebWorker.js +108 -108
  539. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.d.ts +22 -22
  540. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.js +28 -28
  541. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/fetch.d.ts +16 -16
  542. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/fetch.js +20 -20
  543. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.d.ts +84 -84
  544. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.js +305 -305
  545. data/node_modules/puppeteer-core/lib/esm/puppeteer/environment.d.ts +16 -16
  546. data/node_modules/puppeteer-core/lib/esm/puppeteer/environment.js +16 -16
  547. data/node_modules/puppeteer-core/lib/esm/puppeteer/global.d.ts +16 -16
  548. data/node_modules/puppeteer-core/lib/esm/puppeteer/global.js +1 -1
  549. data/node_modules/puppeteer-core/lib/esm/puppeteer/initialize-node.d.ts +17 -17
  550. data/node_modules/puppeteer-core/lib/esm/puppeteer/initialize-node.js +37 -37
  551. data/node_modules/puppeteer-core/lib/esm/puppeteer/initialize-web.d.ts +17 -17
  552. data/node_modules/puppeteer-core/lib/esm/puppeteer/initialize-web.js +22 -22
  553. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.d.ts +133 -133
  554. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.js +474 -474
  555. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.d.ts +40 -39
  556. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  557. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js +230 -204
  558. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
  559. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.d.ts +134 -134
  560. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.js +16 -16
  561. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.d.ts +16 -16
  562. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -1
  563. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js +633 -566
  564. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js.map +1 -1
  565. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts +26 -26
  566. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js +40 -40
  567. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/PipeTransport.d.ts +29 -29
  568. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/PipeTransport.js +60 -60
  569. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Puppeteer.d.ts +153 -153
  570. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Puppeteer.js +181 -181
  571. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.d.ts +17 -17
  572. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.js +165 -165
  573. data/node_modules/puppeteer-core/lib/esm/puppeteer/node-puppeteer-core.d.ts +17 -17
  574. data/node_modules/puppeteer-core/lib/esm/puppeteer/node-puppeteer-core.js +22 -22
  575. data/node_modules/puppeteer-core/lib/esm/puppeteer/node.d.ts +17 -17
  576. data/node_modules/puppeteer-core/lib/esm/puppeteer/node.js +21 -21
  577. data/node_modules/puppeteer-core/lib/esm/puppeteer/revisions.d.ts +21 -21
  578. data/node_modules/puppeteer-core/lib/esm/puppeteer/revisions.js +19 -19
  579. data/node_modules/puppeteer-core/lib/esm/puppeteer/web.d.ts +17 -17
  580. data/node_modules/puppeteer-core/lib/esm/puppeteer/web.js +21 -21
  581. data/node_modules/puppeteer-core/lib/esm/vendor/mitt/src/index.d.ts +27 -27
  582. data/node_modules/puppeteer-core/lib/esm/vendor/mitt/src/index.js +53 -53
  583. data/node_modules/puppeteer-core/lib/types.d.ts +67 -25
  584. data/node_modules/puppeteer-core/package.json +115 -115
  585. data/node_modules/puppeteer-core/typescript-if-required.js +61 -61
  586. data/node_modules/readable-stream/CONTRIBUTING.md +38 -38
  587. data/node_modules/readable-stream/GOVERNANCE.md +136 -136
  588. data/node_modules/readable-stream/LICENSE +47 -47
  589. data/node_modules/readable-stream/README.md +106 -106
  590. data/node_modules/readable-stream/errors-browser.js +127 -127
  591. data/node_modules/readable-stream/errors.js +116 -116
  592. data/node_modules/readable-stream/experimentalWarning.js +17 -17
  593. data/node_modules/readable-stream/lib/_stream_duplex.js +138 -138
  594. data/node_modules/readable-stream/lib/_stream_passthrough.js +38 -38
  595. data/node_modules/readable-stream/lib/_stream_readable.js +1123 -1123
  596. data/node_modules/readable-stream/lib/_stream_transform.js +200 -200
  597. data/node_modules/readable-stream/lib/_stream_writable.js +696 -696
  598. data/node_modules/readable-stream/lib/internal/streams/async_iterator.js +206 -206
  599. data/node_modules/readable-stream/lib/internal/streams/buffer_list.js +209 -209
  600. data/node_modules/readable-stream/lib/internal/streams/destroy.js +104 -104
  601. data/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +103 -103
  602. data/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -3
  603. data/node_modules/readable-stream/lib/internal/streams/from.js +63 -63
  604. data/node_modules/readable-stream/lib/internal/streams/pipeline.js +96 -96
  605. data/node_modules/readable-stream/lib/internal/streams/state.js +26 -26
  606. data/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -1
  607. data/node_modules/readable-stream/lib/internal/streams/stream.js +1 -1
  608. data/node_modules/readable-stream/package.json +68 -68
  609. data/node_modules/readable-stream/readable-browser.js +9 -9
  610. data/node_modules/readable-stream/readable.js +16 -16
  611. data/node_modules/rimraf/CHANGELOG.md +65 -65
  612. data/node_modules/rimraf/LICENSE +15 -15
  613. data/node_modules/rimraf/README.md +101 -101
  614. data/node_modules/rimraf/bin.js +68 -68
  615. data/node_modules/rimraf/package.json +32 -32
  616. data/node_modules/rimraf/rimraf.js +360 -360
  617. data/node_modules/safe-buffer/LICENSE +21 -21
  618. data/node_modules/safe-buffer/README.md +584 -584
  619. data/node_modules/safe-buffer/index.d.ts +186 -186
  620. data/node_modules/safe-buffer/index.js +65 -65
  621. data/node_modules/safe-buffer/package.json +51 -51
  622. data/node_modules/string_decoder/LICENSE +48 -48
  623. data/node_modules/string_decoder/README.md +47 -47
  624. data/node_modules/string_decoder/lib/string_decoder.js +295 -295
  625. data/node_modules/string_decoder/package.json +34 -34
  626. data/node_modules/tar-fs/.travis.yml +6 -6
  627. data/node_modules/tar-fs/LICENSE +20 -20
  628. data/node_modules/tar-fs/README.md +165 -165
  629. data/node_modules/tar-fs/index.js +351 -351
  630. data/node_modules/tar-fs/package.json +41 -41
  631. data/node_modules/tar-fs/test/fixtures/a/hello.txt +1 -1
  632. data/node_modules/tar-fs/test/fixtures/b/a/test.txt +1 -1
  633. data/node_modules/tar-fs/test/index.js +346 -346
  634. data/node_modules/tar-stream/LICENSE +20 -20
  635. data/node_modules/tar-stream/README.md +168 -168
  636. data/node_modules/tar-stream/extract.js +257 -257
  637. data/node_modules/tar-stream/headers.js +295 -295
  638. data/node_modules/tar-stream/index.js +2 -2
  639. data/node_modules/tar-stream/pack.js +255 -255
  640. data/node_modules/tar-stream/package.json +58 -58
  641. data/node_modules/tar-stream/sandbox.js +11 -11
  642. data/node_modules/through/.travis.yml +5 -5
  643. data/node_modules/through/LICENSE.APACHE2 +15 -15
  644. data/node_modules/through/LICENSE.MIT +24 -24
  645. data/node_modules/through/index.js +108 -108
  646. data/node_modules/through/package.json +36 -36
  647. data/node_modules/through/readme.markdown +64 -64
  648. data/node_modules/through/test/async.js +28 -28
  649. data/node_modules/through/test/auto-destroy.js +30 -30
  650. data/node_modules/through/test/buffering.js +71 -71
  651. data/node_modules/through/test/end.js +45 -45
  652. data/node_modules/through/test/index.js +133 -133
  653. data/node_modules/tr46/.npmignore +4 -4
  654. data/node_modules/tr46/index.js +193 -193
  655. data/node_modules/tr46/package.json +31 -31
  656. data/node_modules/unbzip2-stream/LICENSE +24 -24
  657. data/node_modules/unbzip2-stream/README.md +59 -59
  658. data/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js +1 -1
  659. data/node_modules/unbzip2-stream/index.js +93 -93
  660. data/node_modules/unbzip2-stream/lib/bit_iterator.js +39 -39
  661. data/node_modules/unbzip2-stream/lib/bzip2.js +365 -365
  662. data/node_modules/unbzip2-stream/package.json +51 -51
  663. data/node_modules/util-deprecate/History.md +16 -16
  664. data/node_modules/util-deprecate/LICENSE +24 -24
  665. data/node_modules/util-deprecate/README.md +53 -53
  666. data/node_modules/util-deprecate/browser.js +67 -67
  667. data/node_modules/util-deprecate/node.js +6 -6
  668. data/node_modules/util-deprecate/package.json +27 -27
  669. data/node_modules/webidl-conversions/LICENSE.md +12 -12
  670. data/node_modules/webidl-conversions/README.md +53 -53
  671. data/node_modules/webidl-conversions/lib/index.js +189 -189
  672. data/node_modules/webidl-conversions/package.json +23 -23
  673. data/node_modules/whatwg-url/LICENSE.txt +21 -21
  674. data/node_modules/whatwg-url/README.md +67 -67
  675. data/node_modules/whatwg-url/lib/URL-impl.js +200 -200
  676. data/node_modules/whatwg-url/lib/URL.js +196 -196
  677. data/node_modules/whatwg-url/lib/public-api.js +11 -11
  678. data/node_modules/whatwg-url/lib/utils.js +20 -20
  679. data/node_modules/whatwg-url/package.json +32 -32
  680. data/node_modules/wrappy/LICENSE +15 -15
  681. data/node_modules/wrappy/README.md +36 -36
  682. data/node_modules/wrappy/package.json +29 -29
  683. data/node_modules/wrappy/wrappy.js +33 -33
  684. data/node_modules/ws/LICENSE +19 -19
  685. data/node_modules/ws/README.md +493 -493
  686. data/node_modules/ws/browser.js +8 -8
  687. data/node_modules/ws/index.js +13 -13
  688. data/node_modules/ws/lib/buffer-util.js +126 -126
  689. data/node_modules/ws/lib/constants.js +12 -12
  690. data/node_modules/ws/lib/event-target.js +266 -266
  691. data/node_modules/ws/lib/extension.js +203 -203
  692. data/node_modules/ws/lib/limiter.js +55 -55
  693. data/node_modules/ws/lib/permessage-deflate.js +511 -511
  694. data/node_modules/ws/lib/receiver.js +612 -612
  695. data/node_modules/ws/lib/sender.js +422 -422
  696. data/node_modules/ws/lib/stream.js +180 -180
  697. data/node_modules/ws/lib/subprotocol.js +62 -62
  698. data/node_modules/ws/lib/validation.js +124 -124
  699. data/node_modules/ws/lib/websocket-server.js +485 -485
  700. data/node_modules/ws/lib/websocket.js +1149 -1149
  701. data/node_modules/ws/package.json +61 -61
  702. data/node_modules/ws/wrapper.mjs +8 -8
  703. data/node_modules/yauzl/LICENSE +21 -21
  704. data/node_modules/yauzl/README.md +658 -658
  705. data/node_modules/yauzl/index.js +796 -796
  706. data/node_modules/yauzl/package.json +40 -40
  707. data/package.json +1 -1
  708. metadata +23 -25
  709. data/node_modules/devtools-protocol/changelog.md +0 -10491
  710. data/node_modules/devtools-protocol/externs/protocol_externs.js +0 -9734
@@ -1,1660 +1,1660 @@
1
- import Stream from 'stream';
2
- import http from 'http';
3
- import Url from 'url';
4
- import whatwgUrl from 'whatwg-url';
5
- import https from 'https';
6
- import zlib from 'zlib';
7
-
8
- // Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
9
-
10
- // fix for "Readable" isn't a named export issue
11
- const Readable = Stream.Readable;
12
-
13
- const BUFFER = Symbol('buffer');
14
- const TYPE = Symbol('type');
15
-
16
- class Blob {
17
- constructor() {
18
- this[TYPE] = '';
19
-
20
- const blobParts = arguments[0];
21
- const options = arguments[1];
22
-
23
- const buffers = [];
24
- let size = 0;
25
-
26
- if (blobParts) {
27
- const a = blobParts;
28
- const length = Number(a.length);
29
- for (let i = 0; i < length; i++) {
30
- const element = a[i];
31
- let buffer;
32
- if (element instanceof Buffer) {
33
- buffer = element;
34
- } else if (ArrayBuffer.isView(element)) {
35
- buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
36
- } else if (element instanceof ArrayBuffer) {
37
- buffer = Buffer.from(element);
38
- } else if (element instanceof Blob) {
39
- buffer = element[BUFFER];
40
- } else {
41
- buffer = Buffer.from(typeof element === 'string' ? element : String(element));
42
- }
43
- size += buffer.length;
44
- buffers.push(buffer);
45
- }
46
- }
47
-
48
- this[BUFFER] = Buffer.concat(buffers);
49
-
50
- let type = options && options.type !== undefined && String(options.type).toLowerCase();
51
- if (type && !/[^\u0020-\u007E]/.test(type)) {
52
- this[TYPE] = type;
53
- }
54
- }
55
- get size() {
56
- return this[BUFFER].length;
57
- }
58
- get type() {
59
- return this[TYPE];
60
- }
61
- text() {
62
- return Promise.resolve(this[BUFFER].toString());
63
- }
64
- arrayBuffer() {
65
- const buf = this[BUFFER];
66
- const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
67
- return Promise.resolve(ab);
68
- }
69
- stream() {
70
- const readable = new Readable();
71
- readable._read = function () {};
72
- readable.push(this[BUFFER]);
73
- readable.push(null);
74
- return readable;
75
- }
76
- toString() {
77
- return '[object Blob]';
78
- }
79
- slice() {
80
- const size = this.size;
81
-
82
- const start = arguments[0];
83
- const end = arguments[1];
84
- let relativeStart, relativeEnd;
85
- if (start === undefined) {
86
- relativeStart = 0;
87
- } else if (start < 0) {
88
- relativeStart = Math.max(size + start, 0);
89
- } else {
90
- relativeStart = Math.min(start, size);
91
- }
92
- if (end === undefined) {
93
- relativeEnd = size;
94
- } else if (end < 0) {
95
- relativeEnd = Math.max(size + end, 0);
96
- } else {
97
- relativeEnd = Math.min(end, size);
98
- }
99
- const span = Math.max(relativeEnd - relativeStart, 0);
100
-
101
- const buffer = this[BUFFER];
102
- const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
103
- const blob = new Blob([], { type: arguments[2] });
104
- blob[BUFFER] = slicedBuffer;
105
- return blob;
106
- }
107
- }
108
-
109
- Object.defineProperties(Blob.prototype, {
110
- size: { enumerable: true },
111
- type: { enumerable: true },
112
- slice: { enumerable: true }
113
- });
114
-
115
- Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
116
- value: 'Blob',
117
- writable: false,
118
- enumerable: false,
119
- configurable: true
120
- });
121
-
122
- /**
123
- * fetch-error.js
124
- *
125
- * FetchError interface for operational errors
126
- */
127
-
128
- /**
129
- * Create FetchError instance
130
- *
131
- * @param String message Error message for human
132
- * @param String type Error type for machine
133
- * @param String systemError For Node.js system error
134
- * @return FetchError
135
- */
136
- function FetchError(message, type, systemError) {
137
- Error.call(this, message);
138
-
139
- this.message = message;
140
- this.type = type;
141
-
142
- // when err.type is `system`, err.code contains system error code
143
- if (systemError) {
144
- this.code = this.errno = systemError.code;
145
- }
146
-
147
- // hide custom error implementation details from end-users
148
- Error.captureStackTrace(this, this.constructor);
149
- }
150
-
151
- FetchError.prototype = Object.create(Error.prototype);
152
- FetchError.prototype.constructor = FetchError;
153
- FetchError.prototype.name = 'FetchError';
154
-
155
- let convert;
156
- try {
157
- convert = require('encoding').convert;
158
- } catch (e) {}
159
-
160
- const INTERNALS = Symbol('Body internals');
161
-
162
- // fix an issue where "PassThrough" isn't a named export for node <10
163
- const PassThrough = Stream.PassThrough;
164
-
165
- /**
166
- * Body mixin
167
- *
168
- * Ref: https://fetch.spec.whatwg.org/#body
169
- *
170
- * @param Stream body Readable stream
171
- * @param Object opts Response options
172
- * @return Void
173
- */
174
- function Body(body) {
175
- var _this = this;
176
-
177
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
178
- _ref$size = _ref.size;
179
-
180
- let size = _ref$size === undefined ? 0 : _ref$size;
181
- var _ref$timeout = _ref.timeout;
182
- let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
183
-
184
- if (body == null) {
185
- // body is undefined or null
186
- body = null;
187
- } else if (isURLSearchParams(body)) {
188
- // body is a URLSearchParams
189
- body = Buffer.from(body.toString());
190
- } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
191
- // body is ArrayBuffer
192
- body = Buffer.from(body);
193
- } else if (ArrayBuffer.isView(body)) {
194
- // body is ArrayBufferView
195
- body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
196
- } else if (body instanceof Stream) ; else {
197
- // none of the above
198
- // coerce to string then buffer
199
- body = Buffer.from(String(body));
200
- }
201
- this[INTERNALS] = {
202
- body,
203
- disturbed: false,
204
- error: null
205
- };
206
- this.size = size;
207
- this.timeout = timeout;
208
-
209
- if (body instanceof Stream) {
210
- body.on('error', function (err) {
211
- const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
212
- _this[INTERNALS].error = error;
213
- });
214
- }
215
- }
216
-
217
- Body.prototype = {
218
- get body() {
219
- return this[INTERNALS].body;
220
- },
221
-
222
- get bodyUsed() {
223
- return this[INTERNALS].disturbed;
224
- },
225
-
226
- /**
227
- * Decode response as ArrayBuffer
228
- *
229
- * @return Promise
230
- */
231
- arrayBuffer() {
232
- return consumeBody.call(this).then(function (buf) {
233
- return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
234
- });
235
- },
236
-
237
- /**
238
- * Return raw response as Blob
239
- *
240
- * @return Promise
241
- */
242
- blob() {
243
- let ct = this.headers && this.headers.get('content-type') || '';
244
- return consumeBody.call(this).then(function (buf) {
245
- return Object.assign(
246
- // Prevent copying
247
- new Blob([], {
248
- type: ct.toLowerCase()
249
- }), {
250
- [BUFFER]: buf
251
- });
252
- });
253
- },
254
-
255
- /**
256
- * Decode response as json
257
- *
258
- * @return Promise
259
- */
260
- json() {
261
- var _this2 = this;
262
-
263
- return consumeBody.call(this).then(function (buffer) {
264
- try {
265
- return JSON.parse(buffer.toString());
266
- } catch (err) {
267
- return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
268
- }
269
- });
270
- },
271
-
272
- /**
273
- * Decode response as text
274
- *
275
- * @return Promise
276
- */
277
- text() {
278
- return consumeBody.call(this).then(function (buffer) {
279
- return buffer.toString();
280
- });
281
- },
282
-
283
- /**
284
- * Decode response as buffer (non-spec api)
285
- *
286
- * @return Promise
287
- */
288
- buffer() {
289
- return consumeBody.call(this);
290
- },
291
-
292
- /**
293
- * Decode response as text, while automatically detecting the encoding and
294
- * trying to decode to UTF-8 (non-spec api)
295
- *
296
- * @return Promise
297
- */
298
- textConverted() {
299
- var _this3 = this;
300
-
301
- return consumeBody.call(this).then(function (buffer) {
302
- return convertBody(buffer, _this3.headers);
303
- });
304
- }
305
- };
306
-
307
- // In browsers, all properties are enumerable.
308
- Object.defineProperties(Body.prototype, {
309
- body: { enumerable: true },
310
- bodyUsed: { enumerable: true },
311
- arrayBuffer: { enumerable: true },
312
- blob: { enumerable: true },
313
- json: { enumerable: true },
314
- text: { enumerable: true }
315
- });
316
-
317
- Body.mixIn = function (proto) {
318
- for (const name of Object.getOwnPropertyNames(Body.prototype)) {
319
- // istanbul ignore else: future proof
320
- if (!(name in proto)) {
321
- const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
322
- Object.defineProperty(proto, name, desc);
323
- }
324
- }
325
- };
326
-
327
- /**
328
- * Consume and convert an entire Body to a Buffer.
329
- *
330
- * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
331
- *
332
- * @return Promise
333
- */
334
- function consumeBody() {
335
- var _this4 = this;
336
-
337
- if (this[INTERNALS].disturbed) {
338
- return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
339
- }
340
-
341
- this[INTERNALS].disturbed = true;
342
-
343
- if (this[INTERNALS].error) {
344
- return Body.Promise.reject(this[INTERNALS].error);
345
- }
346
-
347
- let body = this.body;
348
-
349
- // body is null
350
- if (body === null) {
351
- return Body.Promise.resolve(Buffer.alloc(0));
352
- }
353
-
354
- // body is blob
355
- if (isBlob(body)) {
356
- body = body.stream();
357
- }
358
-
359
- // body is buffer
360
- if (Buffer.isBuffer(body)) {
361
- return Body.Promise.resolve(body);
362
- }
363
-
364
- // istanbul ignore if: should never happen
365
- if (!(body instanceof Stream)) {
366
- return Body.Promise.resolve(Buffer.alloc(0));
367
- }
368
-
369
- // body is stream
370
- // get ready to actually consume the body
371
- let accum = [];
372
- let accumBytes = 0;
373
- let abort = false;
374
-
375
- return new Body.Promise(function (resolve, reject) {
376
- let resTimeout;
377
-
378
- // allow timeout on slow response body
379
- if (_this4.timeout) {
380
- resTimeout = setTimeout(function () {
381
- abort = true;
382
- reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
383
- }, _this4.timeout);
384
- }
385
-
386
- // handle stream errors
387
- body.on('error', function (err) {
388
- if (err.name === 'AbortError') {
389
- // if the request was aborted, reject with this Error
390
- abort = true;
391
- reject(err);
392
- } else {
393
- // other errors, such as incorrect content-encoding
394
- reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
395
- }
396
- });
397
-
398
- body.on('data', function (chunk) {
399
- if (abort || chunk === null) {
400
- return;
401
- }
402
-
403
- if (_this4.size && accumBytes + chunk.length > _this4.size) {
404
- abort = true;
405
- reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
406
- return;
407
- }
408
-
409
- accumBytes += chunk.length;
410
- accum.push(chunk);
411
- });
412
-
413
- body.on('end', function () {
414
- if (abort) {
415
- return;
416
- }
417
-
418
- clearTimeout(resTimeout);
419
-
420
- try {
421
- resolve(Buffer.concat(accum, accumBytes));
422
- } catch (err) {
423
- // handle streams that have accumulated too much data (issue #414)
424
- reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
425
- }
426
- });
427
- });
428
- }
429
-
430
- /**
431
- * Detect buffer encoding and convert to target encoding
432
- * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
433
- *
434
- * @param Buffer buffer Incoming buffer
435
- * @param String encoding Target encoding
436
- * @return String
437
- */
438
- function convertBody(buffer, headers) {
439
- if (typeof convert !== 'function') {
440
- throw new Error('The package `encoding` must be installed to use the textConverted() function');
441
- }
442
-
443
- const ct = headers.get('content-type');
444
- let charset = 'utf-8';
445
- let res, str;
446
-
447
- // header
448
- if (ct) {
449
- res = /charset=([^;]*)/i.exec(ct);
450
- }
451
-
452
- // no charset in content type, peek at response body for at most 1024 bytes
453
- str = buffer.slice(0, 1024).toString();
454
-
455
- // html5
456
- if (!res && str) {
457
- res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
458
- }
459
-
460
- // html4
461
- if (!res && str) {
462
- res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
463
- if (!res) {
464
- res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
465
- if (res) {
466
- res.pop(); // drop last quote
467
- }
468
- }
469
-
470
- if (res) {
471
- res = /charset=(.*)/i.exec(res.pop());
472
- }
473
- }
474
-
475
- // xml
476
- if (!res && str) {
477
- res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
478
- }
479
-
480
- // found charset
481
- if (res) {
482
- charset = res.pop();
483
-
484
- // prevent decode issues when sites use incorrect encoding
485
- // ref: https://hsivonen.fi/encoding-menu/
486
- if (charset === 'gb2312' || charset === 'gbk') {
487
- charset = 'gb18030';
488
- }
489
- }
490
-
491
- // turn raw buffers into a single utf-8 buffer
492
- return convert(buffer, 'UTF-8', charset).toString();
493
- }
494
-
495
- /**
496
- * Detect a URLSearchParams object
497
- * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
498
- *
499
- * @param Object obj Object to detect by type or brand
500
- * @return String
501
- */
502
- function isURLSearchParams(obj) {
503
- // Duck-typing as a necessary condition.
504
- if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
505
- return false;
506
- }
507
-
508
- // Brand-checking and more duck-typing as optional condition.
509
- return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
510
- }
511
-
512
- /**
513
- * Check if `obj` is a W3C `Blob` object (which `File` inherits from)
514
- * @param {*} obj
515
- * @return {boolean}
516
- */
517
- function isBlob(obj) {
518
- return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
519
- }
520
-
521
- /**
522
- * Clone body given Res/Req instance
523
- *
524
- * @param Mixed instance Response or Request instance
525
- * @return Mixed
526
- */
527
- function clone(instance) {
528
- let p1, p2;
529
- let body = instance.body;
530
-
531
- // don't allow cloning a used body
532
- if (instance.bodyUsed) {
533
- throw new Error('cannot clone body after it is used');
534
- }
535
-
536
- // check that body is a stream and not form-data object
537
- // note: we can't clone the form-data object without having it as a dependency
538
- if (body instanceof Stream && typeof body.getBoundary !== 'function') {
539
- // tee instance body
540
- p1 = new PassThrough();
541
- p2 = new PassThrough();
542
- body.pipe(p1);
543
- body.pipe(p2);
544
- // set instance body to teed body and return the other teed body
545
- instance[INTERNALS].body = p1;
546
- body = p2;
547
- }
548
-
549
- return body;
550
- }
551
-
552
- /**
553
- * Performs the operation "extract a `Content-Type` value from |object|" as
554
- * specified in the specification:
555
- * https://fetch.spec.whatwg.org/#concept-bodyinit-extract
556
- *
557
- * This function assumes that instance.body is present.
558
- *
559
- * @param Mixed instance Any options.body input
560
- */
561
- function extractContentType(body) {
562
- if (body === null) {
563
- // body is null
564
- return null;
565
- } else if (typeof body === 'string') {
566
- // body is string
567
- return 'text/plain;charset=UTF-8';
568
- } else if (isURLSearchParams(body)) {
569
- // body is a URLSearchParams
570
- return 'application/x-www-form-urlencoded;charset=UTF-8';
571
- } else if (isBlob(body)) {
572
- // body is blob
573
- return body.type || null;
574
- } else if (Buffer.isBuffer(body)) {
575
- // body is buffer
576
- return null;
577
- } else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
578
- // body is ArrayBuffer
579
- return null;
580
- } else if (ArrayBuffer.isView(body)) {
581
- // body is ArrayBufferView
582
- return null;
583
- } else if (typeof body.getBoundary === 'function') {
584
- // detect form data input from form-data module
585
- return `multipart/form-data;boundary=${body.getBoundary()}`;
586
- } else if (body instanceof Stream) {
587
- // body is stream
588
- // can't really do much about this
589
- return null;
590
- } else {
591
- // Body constructor defaults other things to string
592
- return 'text/plain;charset=UTF-8';
593
- }
594
- }
595
-
596
- /**
597
- * The Fetch Standard treats this as if "total bytes" is a property on the body.
598
- * For us, we have to explicitly get it with a function.
599
- *
600
- * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
601
- *
602
- * @param Body instance Instance of Body
603
- * @return Number? Number of bytes, or null if not possible
604
- */
605
- function getTotalBytes(instance) {
606
- const body = instance.body;
607
-
608
-
609
- if (body === null) {
610
- // body is null
611
- return 0;
612
- } else if (isBlob(body)) {
613
- return body.size;
614
- } else if (Buffer.isBuffer(body)) {
615
- // body is buffer
616
- return body.length;
617
- } else if (body && typeof body.getLengthSync === 'function') {
618
- // detect form data input from form-data module
619
- if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
620
- body.hasKnownLength && body.hasKnownLength()) {
621
- // 2.x
622
- return body.getLengthSync();
623
- }
624
- return null;
625
- } else {
626
- // body is stream
627
- return null;
628
- }
629
- }
630
-
631
- /**
632
- * Write a Body to a Node.js WritableStream (e.g. http.Request) object.
633
- *
634
- * @param Body instance Instance of Body
635
- * @return Void
636
- */
637
- function writeToStream(dest, instance) {
638
- const body = instance.body;
639
-
640
-
641
- if (body === null) {
642
- // body is null
643
- dest.end();
644
- } else if (isBlob(body)) {
645
- body.stream().pipe(dest);
646
- } else if (Buffer.isBuffer(body)) {
647
- // body is buffer
648
- dest.write(body);
649
- dest.end();
650
- } else {
651
- // body is stream
652
- body.pipe(dest);
653
- }
654
- }
655
-
656
- // expose Promise
657
- Body.Promise = global.Promise;
658
-
659
- /**
660
- * headers.js
661
- *
662
- * Headers class offers convenient helpers
663
- */
664
-
665
- const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
666
- const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
667
-
668
- function validateName(name) {
669
- name = `${name}`;
670
- if (invalidTokenRegex.test(name) || name === '') {
671
- throw new TypeError(`${name} is not a legal HTTP header name`);
672
- }
673
- }
674
-
675
- function validateValue(value) {
676
- value = `${value}`;
677
- if (invalidHeaderCharRegex.test(value)) {
678
- throw new TypeError(`${value} is not a legal HTTP header value`);
679
- }
680
- }
681
-
682
- /**
683
- * Find the key in the map object given a header name.
684
- *
685
- * Returns undefined if not found.
686
- *
687
- * @param String name Header name
688
- * @return String|Undefined
689
- */
690
- function find(map, name) {
691
- name = name.toLowerCase();
692
- for (const key in map) {
693
- if (key.toLowerCase() === name) {
694
- return key;
695
- }
696
- }
697
- return undefined;
698
- }
699
-
700
- const MAP = Symbol('map');
701
- class Headers {
702
- /**
703
- * Headers class
704
- *
705
- * @param Object headers Response headers
706
- * @return Void
707
- */
708
- constructor() {
709
- let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
710
-
711
- this[MAP] = Object.create(null);
712
-
713
- if (init instanceof Headers) {
714
- const rawHeaders = init.raw();
715
- const headerNames = Object.keys(rawHeaders);
716
-
717
- for (const headerName of headerNames) {
718
- for (const value of rawHeaders[headerName]) {
719
- this.append(headerName, value);
720
- }
721
- }
722
-
723
- return;
724
- }
725
-
726
- // We don't worry about converting prop to ByteString here as append()
727
- // will handle it.
728
- if (init == null) ; else if (typeof init === 'object') {
729
- const method = init[Symbol.iterator];
730
- if (method != null) {
731
- if (typeof method !== 'function') {
732
- throw new TypeError('Header pairs must be iterable');
733
- }
734
-
735
- // sequence<sequence<ByteString>>
736
- // Note: per spec we have to first exhaust the lists then process them
737
- const pairs = [];
738
- for (const pair of init) {
739
- if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
740
- throw new TypeError('Each header pair must be iterable');
741
- }
742
- pairs.push(Array.from(pair));
743
- }
744
-
745
- for (const pair of pairs) {
746
- if (pair.length !== 2) {
747
- throw new TypeError('Each header pair must be a name/value tuple');
748
- }
749
- this.append(pair[0], pair[1]);
750
- }
751
- } else {
752
- // record<ByteString, ByteString>
753
- for (const key of Object.keys(init)) {
754
- const value = init[key];
755
- this.append(key, value);
756
- }
757
- }
758
- } else {
759
- throw new TypeError('Provided initializer must be an object');
760
- }
761
- }
762
-
763
- /**
764
- * Return combined header value given name
765
- *
766
- * @param String name Header name
767
- * @return Mixed
768
- */
769
- get(name) {
770
- name = `${name}`;
771
- validateName(name);
772
- const key = find(this[MAP], name);
773
- if (key === undefined) {
774
- return null;
775
- }
776
-
777
- return this[MAP][key].join(', ');
778
- }
779
-
780
- /**
781
- * Iterate over all headers
782
- *
783
- * @param Function callback Executed for each item with parameters (value, name, thisArg)
784
- * @param Boolean thisArg `this` context for callback function
785
- * @return Void
786
- */
787
- forEach(callback) {
788
- let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
789
-
790
- let pairs = getHeaders(this);
791
- let i = 0;
792
- while (i < pairs.length) {
793
- var _pairs$i = pairs[i];
794
- const name = _pairs$i[0],
795
- value = _pairs$i[1];
796
-
797
- callback.call(thisArg, value, name, this);
798
- pairs = getHeaders(this);
799
- i++;
800
- }
801
- }
802
-
803
- /**
804
- * Overwrite header values given name
805
- *
806
- * @param String name Header name
807
- * @param String value Header value
808
- * @return Void
809
- */
810
- set(name, value) {
811
- name = `${name}`;
812
- value = `${value}`;
813
- validateName(name);
814
- validateValue(value);
815
- const key = find(this[MAP], name);
816
- this[MAP][key !== undefined ? key : name] = [value];
817
- }
818
-
819
- /**
820
- * Append a value onto existing header
821
- *
822
- * @param String name Header name
823
- * @param String value Header value
824
- * @return Void
825
- */
826
- append(name, value) {
827
- name = `${name}`;
828
- value = `${value}`;
829
- validateName(name);
830
- validateValue(value);
831
- const key = find(this[MAP], name);
832
- if (key !== undefined) {
833
- this[MAP][key].push(value);
834
- } else {
835
- this[MAP][name] = [value];
836
- }
837
- }
838
-
839
- /**
840
- * Check for header name existence
841
- *
842
- * @param String name Header name
843
- * @return Boolean
844
- */
845
- has(name) {
846
- name = `${name}`;
847
- validateName(name);
848
- return find(this[MAP], name) !== undefined;
849
- }
850
-
851
- /**
852
- * Delete all header values given name
853
- *
854
- * @param String name Header name
855
- * @return Void
856
- */
857
- delete(name) {
858
- name = `${name}`;
859
- validateName(name);
860
- const key = find(this[MAP], name);
861
- if (key !== undefined) {
862
- delete this[MAP][key];
863
- }
864
- }
865
-
866
- /**
867
- * Return raw headers (non-spec api)
868
- *
869
- * @return Object
870
- */
871
- raw() {
872
- return this[MAP];
873
- }
874
-
875
- /**
876
- * Get an iterator on keys.
877
- *
878
- * @return Iterator
879
- */
880
- keys() {
881
- return createHeadersIterator(this, 'key');
882
- }
883
-
884
- /**
885
- * Get an iterator on values.
886
- *
887
- * @return Iterator
888
- */
889
- values() {
890
- return createHeadersIterator(this, 'value');
891
- }
892
-
893
- /**
894
- * Get an iterator on entries.
895
- *
896
- * This is the default iterator of the Headers object.
897
- *
898
- * @return Iterator
899
- */
900
- [Symbol.iterator]() {
901
- return createHeadersIterator(this, 'key+value');
902
- }
903
- }
904
- Headers.prototype.entries = Headers.prototype[Symbol.iterator];
905
-
906
- Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
907
- value: 'Headers',
908
- writable: false,
909
- enumerable: false,
910
- configurable: true
911
- });
912
-
913
- Object.defineProperties(Headers.prototype, {
914
- get: { enumerable: true },
915
- forEach: { enumerable: true },
916
- set: { enumerable: true },
917
- append: { enumerable: true },
918
- has: { enumerable: true },
919
- delete: { enumerable: true },
920
- keys: { enumerable: true },
921
- values: { enumerable: true },
922
- entries: { enumerable: true }
923
- });
924
-
925
- function getHeaders(headers) {
926
- let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
927
-
928
- const keys = Object.keys(headers[MAP]).sort();
929
- return keys.map(kind === 'key' ? function (k) {
930
- return k.toLowerCase();
931
- } : kind === 'value' ? function (k) {
932
- return headers[MAP][k].join(', ');
933
- } : function (k) {
934
- return [k.toLowerCase(), headers[MAP][k].join(', ')];
935
- });
936
- }
937
-
938
- const INTERNAL = Symbol('internal');
939
-
940
- function createHeadersIterator(target, kind) {
941
- const iterator = Object.create(HeadersIteratorPrototype);
942
- iterator[INTERNAL] = {
943
- target,
944
- kind,
945
- index: 0
946
- };
947
- return iterator;
948
- }
949
-
950
- const HeadersIteratorPrototype = Object.setPrototypeOf({
951
- next() {
952
- // istanbul ignore if
953
- if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
954
- throw new TypeError('Value of `this` is not a HeadersIterator');
955
- }
956
-
957
- var _INTERNAL = this[INTERNAL];
958
- const target = _INTERNAL.target,
959
- kind = _INTERNAL.kind,
960
- index = _INTERNAL.index;
961
-
962
- const values = getHeaders(target, kind);
963
- const len = values.length;
964
- if (index >= len) {
965
- return {
966
- value: undefined,
967
- done: true
968
- };
969
- }
970
-
971
- this[INTERNAL].index = index + 1;
972
-
973
- return {
974
- value: values[index],
975
- done: false
976
- };
977
- }
978
- }, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
979
-
980
- Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
981
- value: 'HeadersIterator',
982
- writable: false,
983
- enumerable: false,
984
- configurable: true
985
- });
986
-
987
- /**
988
- * Export the Headers object in a form that Node.js can consume.
989
- *
990
- * @param Headers headers
991
- * @return Object
992
- */
993
- function exportNodeCompatibleHeaders(headers) {
994
- const obj = Object.assign({ __proto__: null }, headers[MAP]);
995
-
996
- // http.request() only supports string as Host header. This hack makes
997
- // specifying custom Host header possible.
998
- const hostHeaderKey = find(headers[MAP], 'Host');
999
- if (hostHeaderKey !== undefined) {
1000
- obj[hostHeaderKey] = obj[hostHeaderKey][0];
1001
- }
1002
-
1003
- return obj;
1004
- }
1005
-
1006
- /**
1007
- * Create a Headers object from an object of headers, ignoring those that do
1008
- * not conform to HTTP grammar productions.
1009
- *
1010
- * @param Object obj Object of headers
1011
- * @return Headers
1012
- */
1013
- function createHeadersLenient(obj) {
1014
- const headers = new Headers();
1015
- for (const name of Object.keys(obj)) {
1016
- if (invalidTokenRegex.test(name)) {
1017
- continue;
1018
- }
1019
- if (Array.isArray(obj[name])) {
1020
- for (const val of obj[name]) {
1021
- if (invalidHeaderCharRegex.test(val)) {
1022
- continue;
1023
- }
1024
- if (headers[MAP][name] === undefined) {
1025
- headers[MAP][name] = [val];
1026
- } else {
1027
- headers[MAP][name].push(val);
1028
- }
1029
- }
1030
- } else if (!invalidHeaderCharRegex.test(obj[name])) {
1031
- headers[MAP][name] = [obj[name]];
1032
- }
1033
- }
1034
- return headers;
1035
- }
1036
-
1037
- const INTERNALS$1 = Symbol('Response internals');
1038
-
1039
- // fix an issue where "STATUS_CODES" aren't a named export for node <10
1040
- const STATUS_CODES = http.STATUS_CODES;
1041
-
1042
- /**
1043
- * Response class
1044
- *
1045
- * @param Stream body Readable stream
1046
- * @param Object opts Response options
1047
- * @return Void
1048
- */
1049
- class Response {
1050
- constructor() {
1051
- let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1052
- let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1053
-
1054
- Body.call(this, body, opts);
1055
-
1056
- const status = opts.status || 200;
1057
- const headers = new Headers(opts.headers);
1058
-
1059
- if (body != null && !headers.has('Content-Type')) {
1060
- const contentType = extractContentType(body);
1061
- if (contentType) {
1062
- headers.append('Content-Type', contentType);
1063
- }
1064
- }
1065
-
1066
- this[INTERNALS$1] = {
1067
- url: opts.url,
1068
- status,
1069
- statusText: opts.statusText || STATUS_CODES[status],
1070
- headers,
1071
- counter: opts.counter
1072
- };
1073
- }
1074
-
1075
- get url() {
1076
- return this[INTERNALS$1].url || '';
1077
- }
1078
-
1079
- get status() {
1080
- return this[INTERNALS$1].status;
1081
- }
1082
-
1083
- /**
1084
- * Convenience property representing if the request ended normally
1085
- */
1086
- get ok() {
1087
- return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
1088
- }
1089
-
1090
- get redirected() {
1091
- return this[INTERNALS$1].counter > 0;
1092
- }
1093
-
1094
- get statusText() {
1095
- return this[INTERNALS$1].statusText;
1096
- }
1097
-
1098
- get headers() {
1099
- return this[INTERNALS$1].headers;
1100
- }
1101
-
1102
- /**
1103
- * Clone this response
1104
- *
1105
- * @return Response
1106
- */
1107
- clone() {
1108
- return new Response(clone(this), {
1109
- url: this.url,
1110
- status: this.status,
1111
- statusText: this.statusText,
1112
- headers: this.headers,
1113
- ok: this.ok,
1114
- redirected: this.redirected
1115
- });
1116
- }
1117
- }
1118
-
1119
- Body.mixIn(Response.prototype);
1120
-
1121
- Object.defineProperties(Response.prototype, {
1122
- url: { enumerable: true },
1123
- status: { enumerable: true },
1124
- ok: { enumerable: true },
1125
- redirected: { enumerable: true },
1126
- statusText: { enumerable: true },
1127
- headers: { enumerable: true },
1128
- clone: { enumerable: true }
1129
- });
1130
-
1131
- Object.defineProperty(Response.prototype, Symbol.toStringTag, {
1132
- value: 'Response',
1133
- writable: false,
1134
- enumerable: false,
1135
- configurable: true
1136
- });
1137
-
1138
- const INTERNALS$2 = Symbol('Request internals');
1139
- const URL = whatwgUrl.URL;
1140
-
1141
- // fix an issue where "format", "parse" aren't a named export for node <10
1142
- const parse_url = Url.parse;
1143
- const format_url = Url.format;
1144
-
1145
- /**
1146
- * Wrapper around `new URL` to handle arbitrary URLs
1147
- *
1148
- * @param {string} urlStr
1149
- * @return {void}
1150
- */
1151
- function parseURL(urlStr) {
1152
- /*
1153
- Check whether the URL is absolute or not
1154
- Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
1155
- Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
1156
- */
1157
- if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
1158
- urlStr = new URL(urlStr).toString();
1159
- }
1160
-
1161
- // Fallback to old implementation for arbitrary URLs
1162
- return parse_url(urlStr);
1163
- }
1164
-
1165
- const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
1166
-
1167
- /**
1168
- * Check if a value is an instance of Request.
1169
- *
1170
- * @param Mixed input
1171
- * @return Boolean
1172
- */
1173
- function isRequest(input) {
1174
- return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
1175
- }
1176
-
1177
- function isAbortSignal(signal) {
1178
- const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
1179
- return !!(proto && proto.constructor.name === 'AbortSignal');
1180
- }
1181
-
1182
- /**
1183
- * Request class
1184
- *
1185
- * @param Mixed input Url or Request instance
1186
- * @param Object init Custom options
1187
- * @return Void
1188
- */
1189
- class Request {
1190
- constructor(input) {
1191
- let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1192
-
1193
- let parsedURL;
1194
-
1195
- // normalize input
1196
- if (!isRequest(input)) {
1197
- if (input && input.href) {
1198
- // in order to support Node.js' Url objects; though WHATWG's URL objects
1199
- // will fall into this branch also (since their `toString()` will return
1200
- // `href` property anyway)
1201
- parsedURL = parseURL(input.href);
1202
- } else {
1203
- // coerce input to a string before attempting to parse
1204
- parsedURL = parseURL(`${input}`);
1205
- }
1206
- input = {};
1207
- } else {
1208
- parsedURL = parseURL(input.url);
1209
- }
1210
-
1211
- let method = init.method || input.method || 'GET';
1212
- method = method.toUpperCase();
1213
-
1214
- if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
1215
- throw new TypeError('Request with GET/HEAD method cannot have body');
1216
- }
1217
-
1218
- let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
1219
-
1220
- Body.call(this, inputBody, {
1221
- timeout: init.timeout || input.timeout || 0,
1222
- size: init.size || input.size || 0
1223
- });
1224
-
1225
- const headers = new Headers(init.headers || input.headers || {});
1226
-
1227
- if (inputBody != null && !headers.has('Content-Type')) {
1228
- const contentType = extractContentType(inputBody);
1229
- if (contentType) {
1230
- headers.append('Content-Type', contentType);
1231
- }
1232
- }
1233
-
1234
- let signal = isRequest(input) ? input.signal : null;
1235
- if ('signal' in init) signal = init.signal;
1236
-
1237
- if (signal != null && !isAbortSignal(signal)) {
1238
- throw new TypeError('Expected signal to be an instanceof AbortSignal');
1239
- }
1240
-
1241
- this[INTERNALS$2] = {
1242
- method,
1243
- redirect: init.redirect || input.redirect || 'follow',
1244
- headers,
1245
- parsedURL,
1246
- signal
1247
- };
1248
-
1249
- // node-fetch-only options
1250
- this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
1251
- this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
1252
- this.counter = init.counter || input.counter || 0;
1253
- this.agent = init.agent || input.agent;
1254
- }
1255
-
1256
- get method() {
1257
- return this[INTERNALS$2].method;
1258
- }
1259
-
1260
- get url() {
1261
- return format_url(this[INTERNALS$2].parsedURL);
1262
- }
1263
-
1264
- get headers() {
1265
- return this[INTERNALS$2].headers;
1266
- }
1267
-
1268
- get redirect() {
1269
- return this[INTERNALS$2].redirect;
1270
- }
1271
-
1272
- get signal() {
1273
- return this[INTERNALS$2].signal;
1274
- }
1275
-
1276
- /**
1277
- * Clone this request
1278
- *
1279
- * @return Request
1280
- */
1281
- clone() {
1282
- return new Request(this);
1283
- }
1284
- }
1285
-
1286
- Body.mixIn(Request.prototype);
1287
-
1288
- Object.defineProperty(Request.prototype, Symbol.toStringTag, {
1289
- value: 'Request',
1290
- writable: false,
1291
- enumerable: false,
1292
- configurable: true
1293
- });
1294
-
1295
- Object.defineProperties(Request.prototype, {
1296
- method: { enumerable: true },
1297
- url: { enumerable: true },
1298
- headers: { enumerable: true },
1299
- redirect: { enumerable: true },
1300
- clone: { enumerable: true },
1301
- signal: { enumerable: true }
1302
- });
1303
-
1304
- /**
1305
- * Convert a Request to Node.js http request options.
1306
- *
1307
- * @param Request A Request instance
1308
- * @return Object The options object to be passed to http.request
1309
- */
1310
- function getNodeRequestOptions(request) {
1311
- const parsedURL = request[INTERNALS$2].parsedURL;
1312
- const headers = new Headers(request[INTERNALS$2].headers);
1313
-
1314
- // fetch step 1.3
1315
- if (!headers.has('Accept')) {
1316
- headers.set('Accept', '*/*');
1317
- }
1318
-
1319
- // Basic fetch
1320
- if (!parsedURL.protocol || !parsedURL.hostname) {
1321
- throw new TypeError('Only absolute URLs are supported');
1322
- }
1323
-
1324
- if (!/^https?:$/.test(parsedURL.protocol)) {
1325
- throw new TypeError('Only HTTP(S) protocols are supported');
1326
- }
1327
-
1328
- if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
1329
- throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
1330
- }
1331
-
1332
- // HTTP-network-or-cache fetch steps 2.4-2.7
1333
- let contentLengthValue = null;
1334
- if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
1335
- contentLengthValue = '0';
1336
- }
1337
- if (request.body != null) {
1338
- const totalBytes = getTotalBytes(request);
1339
- if (typeof totalBytes === 'number') {
1340
- contentLengthValue = String(totalBytes);
1341
- }
1342
- }
1343
- if (contentLengthValue) {
1344
- headers.set('Content-Length', contentLengthValue);
1345
- }
1346
-
1347
- // HTTP-network-or-cache fetch step 2.11
1348
- if (!headers.has('User-Agent')) {
1349
- headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
1350
- }
1351
-
1352
- // HTTP-network-or-cache fetch step 2.15
1353
- if (request.compress && !headers.has('Accept-Encoding')) {
1354
- headers.set('Accept-Encoding', 'gzip,deflate');
1355
- }
1356
-
1357
- let agent = request.agent;
1358
- if (typeof agent === 'function') {
1359
- agent = agent(parsedURL);
1360
- }
1361
-
1362
- if (!headers.has('Connection') && !agent) {
1363
- headers.set('Connection', 'close');
1364
- }
1365
-
1366
- // HTTP-network fetch step 4.2
1367
- // chunked encoding is handled by Node.js
1368
-
1369
- return Object.assign({}, parsedURL, {
1370
- method: request.method,
1371
- headers: exportNodeCompatibleHeaders(headers),
1372
- agent
1373
- });
1374
- }
1375
-
1376
- /**
1377
- * abort-error.js
1378
- *
1379
- * AbortError interface for cancelled requests
1380
- */
1381
-
1382
- /**
1383
- * Create AbortError instance
1384
- *
1385
- * @param String message Error message for human
1386
- * @return AbortError
1387
- */
1388
- function AbortError(message) {
1389
- Error.call(this, message);
1390
-
1391
- this.type = 'aborted';
1392
- this.message = message;
1393
-
1394
- // hide custom error implementation details from end-users
1395
- Error.captureStackTrace(this, this.constructor);
1396
- }
1397
-
1398
- AbortError.prototype = Object.create(Error.prototype);
1399
- AbortError.prototype.constructor = AbortError;
1400
- AbortError.prototype.name = 'AbortError';
1401
-
1402
- // fix an issue where "PassThrough", "resolve" aren't a named export for node <10
1403
- const PassThrough$1 = Stream.PassThrough;
1404
- const resolve_url = Url.resolve;
1405
-
1406
- /**
1407
- * Fetch function
1408
- *
1409
- * @param Mixed url Absolute url or Request instance
1410
- * @param Object opts Fetch options
1411
- * @return Promise
1412
- */
1413
- function fetch(url, opts) {
1414
-
1415
- // allow custom promise
1416
- if (!fetch.Promise) {
1417
- throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
1418
- }
1419
-
1420
- Body.Promise = fetch.Promise;
1421
-
1422
- // wrap http.request into fetch
1423
- return new fetch.Promise(function (resolve, reject) {
1424
- // build request object
1425
- const request = new Request(url, opts);
1426
- const options = getNodeRequestOptions(request);
1427
-
1428
- const send = (options.protocol === 'https:' ? https : http).request;
1429
- const signal = request.signal;
1430
-
1431
- let response = null;
1432
-
1433
- const abort = function abort() {
1434
- let error = new AbortError('The user aborted a request.');
1435
- reject(error);
1436
- if (request.body && request.body instanceof Stream.Readable) {
1437
- request.body.destroy(error);
1438
- }
1439
- if (!response || !response.body) return;
1440
- response.body.emit('error', error);
1441
- };
1442
-
1443
- if (signal && signal.aborted) {
1444
- abort();
1445
- return;
1446
- }
1447
-
1448
- const abortAndFinalize = function abortAndFinalize() {
1449
- abort();
1450
- finalize();
1451
- };
1452
-
1453
- // send request
1454
- const req = send(options);
1455
- let reqTimeout;
1456
-
1457
- if (signal) {
1458
- signal.addEventListener('abort', abortAndFinalize);
1459
- }
1460
-
1461
- function finalize() {
1462
- req.abort();
1463
- if (signal) signal.removeEventListener('abort', abortAndFinalize);
1464
- clearTimeout(reqTimeout);
1465
- }
1466
-
1467
- if (request.timeout) {
1468
- req.once('socket', function (socket) {
1469
- reqTimeout = setTimeout(function () {
1470
- reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
1471
- finalize();
1472
- }, request.timeout);
1473
- });
1474
- }
1475
-
1476
- req.on('error', function (err) {
1477
- reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
1478
- finalize();
1479
- });
1480
-
1481
- req.on('response', function (res) {
1482
- clearTimeout(reqTimeout);
1483
-
1484
- const headers = createHeadersLenient(res.headers);
1485
-
1486
- // HTTP fetch step 5
1487
- if (fetch.isRedirect(res.statusCode)) {
1488
- // HTTP fetch step 5.2
1489
- const location = headers.get('Location');
1490
-
1491
- // HTTP fetch step 5.3
1492
- const locationURL = location === null ? null : resolve_url(request.url, location);
1493
-
1494
- // HTTP fetch step 5.5
1495
- switch (request.redirect) {
1496
- case 'error':
1497
- reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
1498
- finalize();
1499
- return;
1500
- case 'manual':
1501
- // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
1502
- if (locationURL !== null) {
1503
- // handle corrupted header
1504
- try {
1505
- headers.set('Location', locationURL);
1506
- } catch (err) {
1507
- // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
1508
- reject(err);
1509
- }
1510
- }
1511
- break;
1512
- case 'follow':
1513
- // HTTP-redirect fetch step 2
1514
- if (locationURL === null) {
1515
- break;
1516
- }
1517
-
1518
- // HTTP-redirect fetch step 5
1519
- if (request.counter >= request.follow) {
1520
- reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
1521
- finalize();
1522
- return;
1523
- }
1524
-
1525
- // HTTP-redirect fetch step 6 (counter increment)
1526
- // Create a new Request object.
1527
- const requestOpts = {
1528
- headers: new Headers(request.headers),
1529
- follow: request.follow,
1530
- counter: request.counter + 1,
1531
- agent: request.agent,
1532
- compress: request.compress,
1533
- method: request.method,
1534
- body: request.body,
1535
- signal: request.signal,
1536
- timeout: request.timeout,
1537
- size: request.size
1538
- };
1539
-
1540
- // HTTP-redirect fetch step 9
1541
- if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
1542
- reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
1543
- finalize();
1544
- return;
1545
- }
1546
-
1547
- // HTTP-redirect fetch step 11
1548
- if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
1549
- requestOpts.method = 'GET';
1550
- requestOpts.body = undefined;
1551
- requestOpts.headers.delete('content-length');
1552
- }
1553
-
1554
- // HTTP-redirect fetch step 15
1555
- resolve(fetch(new Request(locationURL, requestOpts)));
1556
- finalize();
1557
- return;
1558
- }
1559
- }
1560
-
1561
- // prepare response
1562
- res.once('end', function () {
1563
- if (signal) signal.removeEventListener('abort', abortAndFinalize);
1564
- });
1565
- let body = res.pipe(new PassThrough$1());
1566
-
1567
- const response_options = {
1568
- url: request.url,
1569
- status: res.statusCode,
1570
- statusText: res.statusMessage,
1571
- headers: headers,
1572
- size: request.size,
1573
- timeout: request.timeout,
1574
- counter: request.counter
1575
- };
1576
-
1577
- // HTTP-network fetch step 12.1.1.3
1578
- const codings = headers.get('Content-Encoding');
1579
-
1580
- // HTTP-network fetch step 12.1.1.4: handle content codings
1581
-
1582
- // in following scenarios we ignore compression support
1583
- // 1. compression support is disabled
1584
- // 2. HEAD request
1585
- // 3. no Content-Encoding header
1586
- // 4. no content response (204)
1587
- // 5. content not modified response (304)
1588
- if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
1589
- response = new Response(body, response_options);
1590
- resolve(response);
1591
- return;
1592
- }
1593
-
1594
- // For Node v6+
1595
- // Be less strict when decoding compressed responses, since sometimes
1596
- // servers send slightly invalid responses that are still accepted
1597
- // by common browsers.
1598
- // Always using Z_SYNC_FLUSH is what cURL does.
1599
- const zlibOptions = {
1600
- flush: zlib.Z_SYNC_FLUSH,
1601
- finishFlush: zlib.Z_SYNC_FLUSH
1602
- };
1603
-
1604
- // for gzip
1605
- if (codings == 'gzip' || codings == 'x-gzip') {
1606
- body = body.pipe(zlib.createGunzip(zlibOptions));
1607
- response = new Response(body, response_options);
1608
- resolve(response);
1609
- return;
1610
- }
1611
-
1612
- // for deflate
1613
- if (codings == 'deflate' || codings == 'x-deflate') {
1614
- // handle the infamous raw deflate response from old servers
1615
- // a hack for old IIS and Apache servers
1616
- const raw = res.pipe(new PassThrough$1());
1617
- raw.once('data', function (chunk) {
1618
- // see http://stackoverflow.com/questions/37519828
1619
- if ((chunk[0] & 0x0F) === 0x08) {
1620
- body = body.pipe(zlib.createInflate());
1621
- } else {
1622
- body = body.pipe(zlib.createInflateRaw());
1623
- }
1624
- response = new Response(body, response_options);
1625
- resolve(response);
1626
- });
1627
- return;
1628
- }
1629
-
1630
- // for br
1631
- if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
1632
- body = body.pipe(zlib.createBrotliDecompress());
1633
- response = new Response(body, response_options);
1634
- resolve(response);
1635
- return;
1636
- }
1637
-
1638
- // otherwise, use response as-is
1639
- response = new Response(body, response_options);
1640
- resolve(response);
1641
- });
1642
-
1643
- writeToStream(req, request);
1644
- });
1645
- }
1646
- /**
1647
- * Redirect code matching
1648
- *
1649
- * @param Number code Status code
1650
- * @return Boolean
1651
- */
1652
- fetch.isRedirect = function (code) {
1653
- return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
1654
- };
1655
-
1656
- // expose Promise
1657
- fetch.Promise = global.Promise;
1658
-
1659
- export default fetch;
1660
- export { Headers, Request, Response, FetchError };
1
+ import Stream from 'stream';
2
+ import http from 'http';
3
+ import Url from 'url';
4
+ import whatwgUrl from 'whatwg-url';
5
+ import https from 'https';
6
+ import zlib from 'zlib';
7
+
8
+ // Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
9
+
10
+ // fix for "Readable" isn't a named export issue
11
+ const Readable = Stream.Readable;
12
+
13
+ const BUFFER = Symbol('buffer');
14
+ const TYPE = Symbol('type');
15
+
16
+ class Blob {
17
+ constructor() {
18
+ this[TYPE] = '';
19
+
20
+ const blobParts = arguments[0];
21
+ const options = arguments[1];
22
+
23
+ const buffers = [];
24
+ let size = 0;
25
+
26
+ if (blobParts) {
27
+ const a = blobParts;
28
+ const length = Number(a.length);
29
+ for (let i = 0; i < length; i++) {
30
+ const element = a[i];
31
+ let buffer;
32
+ if (element instanceof Buffer) {
33
+ buffer = element;
34
+ } else if (ArrayBuffer.isView(element)) {
35
+ buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
36
+ } else if (element instanceof ArrayBuffer) {
37
+ buffer = Buffer.from(element);
38
+ } else if (element instanceof Blob) {
39
+ buffer = element[BUFFER];
40
+ } else {
41
+ buffer = Buffer.from(typeof element === 'string' ? element : String(element));
42
+ }
43
+ size += buffer.length;
44
+ buffers.push(buffer);
45
+ }
46
+ }
47
+
48
+ this[BUFFER] = Buffer.concat(buffers);
49
+
50
+ let type = options && options.type !== undefined && String(options.type).toLowerCase();
51
+ if (type && !/[^\u0020-\u007E]/.test(type)) {
52
+ this[TYPE] = type;
53
+ }
54
+ }
55
+ get size() {
56
+ return this[BUFFER].length;
57
+ }
58
+ get type() {
59
+ return this[TYPE];
60
+ }
61
+ text() {
62
+ return Promise.resolve(this[BUFFER].toString());
63
+ }
64
+ arrayBuffer() {
65
+ const buf = this[BUFFER];
66
+ const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
67
+ return Promise.resolve(ab);
68
+ }
69
+ stream() {
70
+ const readable = new Readable();
71
+ readable._read = function () {};
72
+ readable.push(this[BUFFER]);
73
+ readable.push(null);
74
+ return readable;
75
+ }
76
+ toString() {
77
+ return '[object Blob]';
78
+ }
79
+ slice() {
80
+ const size = this.size;
81
+
82
+ const start = arguments[0];
83
+ const end = arguments[1];
84
+ let relativeStart, relativeEnd;
85
+ if (start === undefined) {
86
+ relativeStart = 0;
87
+ } else if (start < 0) {
88
+ relativeStart = Math.max(size + start, 0);
89
+ } else {
90
+ relativeStart = Math.min(start, size);
91
+ }
92
+ if (end === undefined) {
93
+ relativeEnd = size;
94
+ } else if (end < 0) {
95
+ relativeEnd = Math.max(size + end, 0);
96
+ } else {
97
+ relativeEnd = Math.min(end, size);
98
+ }
99
+ const span = Math.max(relativeEnd - relativeStart, 0);
100
+
101
+ const buffer = this[BUFFER];
102
+ const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
103
+ const blob = new Blob([], { type: arguments[2] });
104
+ blob[BUFFER] = slicedBuffer;
105
+ return blob;
106
+ }
107
+ }
108
+
109
+ Object.defineProperties(Blob.prototype, {
110
+ size: { enumerable: true },
111
+ type: { enumerable: true },
112
+ slice: { enumerable: true }
113
+ });
114
+
115
+ Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
116
+ value: 'Blob',
117
+ writable: false,
118
+ enumerable: false,
119
+ configurable: true
120
+ });
121
+
122
+ /**
123
+ * fetch-error.js
124
+ *
125
+ * FetchError interface for operational errors
126
+ */
127
+
128
+ /**
129
+ * Create FetchError instance
130
+ *
131
+ * @param String message Error message for human
132
+ * @param String type Error type for machine
133
+ * @param String systemError For Node.js system error
134
+ * @return FetchError
135
+ */
136
+ function FetchError(message, type, systemError) {
137
+ Error.call(this, message);
138
+
139
+ this.message = message;
140
+ this.type = type;
141
+
142
+ // when err.type is `system`, err.code contains system error code
143
+ if (systemError) {
144
+ this.code = this.errno = systemError.code;
145
+ }
146
+
147
+ // hide custom error implementation details from end-users
148
+ Error.captureStackTrace(this, this.constructor);
149
+ }
150
+
151
+ FetchError.prototype = Object.create(Error.prototype);
152
+ FetchError.prototype.constructor = FetchError;
153
+ FetchError.prototype.name = 'FetchError';
154
+
155
+ let convert;
156
+ try {
157
+ convert = require('encoding').convert;
158
+ } catch (e) {}
159
+
160
+ const INTERNALS = Symbol('Body internals');
161
+
162
+ // fix an issue where "PassThrough" isn't a named export for node <10
163
+ const PassThrough = Stream.PassThrough;
164
+
165
+ /**
166
+ * Body mixin
167
+ *
168
+ * Ref: https://fetch.spec.whatwg.org/#body
169
+ *
170
+ * @param Stream body Readable stream
171
+ * @param Object opts Response options
172
+ * @return Void
173
+ */
174
+ function Body(body) {
175
+ var _this = this;
176
+
177
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
178
+ _ref$size = _ref.size;
179
+
180
+ let size = _ref$size === undefined ? 0 : _ref$size;
181
+ var _ref$timeout = _ref.timeout;
182
+ let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
183
+
184
+ if (body == null) {
185
+ // body is undefined or null
186
+ body = null;
187
+ } else if (isURLSearchParams(body)) {
188
+ // body is a URLSearchParams
189
+ body = Buffer.from(body.toString());
190
+ } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
191
+ // body is ArrayBuffer
192
+ body = Buffer.from(body);
193
+ } else if (ArrayBuffer.isView(body)) {
194
+ // body is ArrayBufferView
195
+ body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
196
+ } else if (body instanceof Stream) ; else {
197
+ // none of the above
198
+ // coerce to string then buffer
199
+ body = Buffer.from(String(body));
200
+ }
201
+ this[INTERNALS] = {
202
+ body,
203
+ disturbed: false,
204
+ error: null
205
+ };
206
+ this.size = size;
207
+ this.timeout = timeout;
208
+
209
+ if (body instanceof Stream) {
210
+ body.on('error', function (err) {
211
+ const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
212
+ _this[INTERNALS].error = error;
213
+ });
214
+ }
215
+ }
216
+
217
+ Body.prototype = {
218
+ get body() {
219
+ return this[INTERNALS].body;
220
+ },
221
+
222
+ get bodyUsed() {
223
+ return this[INTERNALS].disturbed;
224
+ },
225
+
226
+ /**
227
+ * Decode response as ArrayBuffer
228
+ *
229
+ * @return Promise
230
+ */
231
+ arrayBuffer() {
232
+ return consumeBody.call(this).then(function (buf) {
233
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
234
+ });
235
+ },
236
+
237
+ /**
238
+ * Return raw response as Blob
239
+ *
240
+ * @return Promise
241
+ */
242
+ blob() {
243
+ let ct = this.headers && this.headers.get('content-type') || '';
244
+ return consumeBody.call(this).then(function (buf) {
245
+ return Object.assign(
246
+ // Prevent copying
247
+ new Blob([], {
248
+ type: ct.toLowerCase()
249
+ }), {
250
+ [BUFFER]: buf
251
+ });
252
+ });
253
+ },
254
+
255
+ /**
256
+ * Decode response as json
257
+ *
258
+ * @return Promise
259
+ */
260
+ json() {
261
+ var _this2 = this;
262
+
263
+ return consumeBody.call(this).then(function (buffer) {
264
+ try {
265
+ return JSON.parse(buffer.toString());
266
+ } catch (err) {
267
+ return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
268
+ }
269
+ });
270
+ },
271
+
272
+ /**
273
+ * Decode response as text
274
+ *
275
+ * @return Promise
276
+ */
277
+ text() {
278
+ return consumeBody.call(this).then(function (buffer) {
279
+ return buffer.toString();
280
+ });
281
+ },
282
+
283
+ /**
284
+ * Decode response as buffer (non-spec api)
285
+ *
286
+ * @return Promise
287
+ */
288
+ buffer() {
289
+ return consumeBody.call(this);
290
+ },
291
+
292
+ /**
293
+ * Decode response as text, while automatically detecting the encoding and
294
+ * trying to decode to UTF-8 (non-spec api)
295
+ *
296
+ * @return Promise
297
+ */
298
+ textConverted() {
299
+ var _this3 = this;
300
+
301
+ return consumeBody.call(this).then(function (buffer) {
302
+ return convertBody(buffer, _this3.headers);
303
+ });
304
+ }
305
+ };
306
+
307
+ // In browsers, all properties are enumerable.
308
+ Object.defineProperties(Body.prototype, {
309
+ body: { enumerable: true },
310
+ bodyUsed: { enumerable: true },
311
+ arrayBuffer: { enumerable: true },
312
+ blob: { enumerable: true },
313
+ json: { enumerable: true },
314
+ text: { enumerable: true }
315
+ });
316
+
317
+ Body.mixIn = function (proto) {
318
+ for (const name of Object.getOwnPropertyNames(Body.prototype)) {
319
+ // istanbul ignore else: future proof
320
+ if (!(name in proto)) {
321
+ const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
322
+ Object.defineProperty(proto, name, desc);
323
+ }
324
+ }
325
+ };
326
+
327
+ /**
328
+ * Consume and convert an entire Body to a Buffer.
329
+ *
330
+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
331
+ *
332
+ * @return Promise
333
+ */
334
+ function consumeBody() {
335
+ var _this4 = this;
336
+
337
+ if (this[INTERNALS].disturbed) {
338
+ return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
339
+ }
340
+
341
+ this[INTERNALS].disturbed = true;
342
+
343
+ if (this[INTERNALS].error) {
344
+ return Body.Promise.reject(this[INTERNALS].error);
345
+ }
346
+
347
+ let body = this.body;
348
+
349
+ // body is null
350
+ if (body === null) {
351
+ return Body.Promise.resolve(Buffer.alloc(0));
352
+ }
353
+
354
+ // body is blob
355
+ if (isBlob(body)) {
356
+ body = body.stream();
357
+ }
358
+
359
+ // body is buffer
360
+ if (Buffer.isBuffer(body)) {
361
+ return Body.Promise.resolve(body);
362
+ }
363
+
364
+ // istanbul ignore if: should never happen
365
+ if (!(body instanceof Stream)) {
366
+ return Body.Promise.resolve(Buffer.alloc(0));
367
+ }
368
+
369
+ // body is stream
370
+ // get ready to actually consume the body
371
+ let accum = [];
372
+ let accumBytes = 0;
373
+ let abort = false;
374
+
375
+ return new Body.Promise(function (resolve, reject) {
376
+ let resTimeout;
377
+
378
+ // allow timeout on slow response body
379
+ if (_this4.timeout) {
380
+ resTimeout = setTimeout(function () {
381
+ abort = true;
382
+ reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
383
+ }, _this4.timeout);
384
+ }
385
+
386
+ // handle stream errors
387
+ body.on('error', function (err) {
388
+ if (err.name === 'AbortError') {
389
+ // if the request was aborted, reject with this Error
390
+ abort = true;
391
+ reject(err);
392
+ } else {
393
+ // other errors, such as incorrect content-encoding
394
+ reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
395
+ }
396
+ });
397
+
398
+ body.on('data', function (chunk) {
399
+ if (abort || chunk === null) {
400
+ return;
401
+ }
402
+
403
+ if (_this4.size && accumBytes + chunk.length > _this4.size) {
404
+ abort = true;
405
+ reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
406
+ return;
407
+ }
408
+
409
+ accumBytes += chunk.length;
410
+ accum.push(chunk);
411
+ });
412
+
413
+ body.on('end', function () {
414
+ if (abort) {
415
+ return;
416
+ }
417
+
418
+ clearTimeout(resTimeout);
419
+
420
+ try {
421
+ resolve(Buffer.concat(accum, accumBytes));
422
+ } catch (err) {
423
+ // handle streams that have accumulated too much data (issue #414)
424
+ reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
425
+ }
426
+ });
427
+ });
428
+ }
429
+
430
+ /**
431
+ * Detect buffer encoding and convert to target encoding
432
+ * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
433
+ *
434
+ * @param Buffer buffer Incoming buffer
435
+ * @param String encoding Target encoding
436
+ * @return String
437
+ */
438
+ function convertBody(buffer, headers) {
439
+ if (typeof convert !== 'function') {
440
+ throw new Error('The package `encoding` must be installed to use the textConverted() function');
441
+ }
442
+
443
+ const ct = headers.get('content-type');
444
+ let charset = 'utf-8';
445
+ let res, str;
446
+
447
+ // header
448
+ if (ct) {
449
+ res = /charset=([^;]*)/i.exec(ct);
450
+ }
451
+
452
+ // no charset in content type, peek at response body for at most 1024 bytes
453
+ str = buffer.slice(0, 1024).toString();
454
+
455
+ // html5
456
+ if (!res && str) {
457
+ res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
458
+ }
459
+
460
+ // html4
461
+ if (!res && str) {
462
+ res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
463
+ if (!res) {
464
+ res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
465
+ if (res) {
466
+ res.pop(); // drop last quote
467
+ }
468
+ }
469
+
470
+ if (res) {
471
+ res = /charset=(.*)/i.exec(res.pop());
472
+ }
473
+ }
474
+
475
+ // xml
476
+ if (!res && str) {
477
+ res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
478
+ }
479
+
480
+ // found charset
481
+ if (res) {
482
+ charset = res.pop();
483
+
484
+ // prevent decode issues when sites use incorrect encoding
485
+ // ref: https://hsivonen.fi/encoding-menu/
486
+ if (charset === 'gb2312' || charset === 'gbk') {
487
+ charset = 'gb18030';
488
+ }
489
+ }
490
+
491
+ // turn raw buffers into a single utf-8 buffer
492
+ return convert(buffer, 'UTF-8', charset).toString();
493
+ }
494
+
495
+ /**
496
+ * Detect a URLSearchParams object
497
+ * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
498
+ *
499
+ * @param Object obj Object to detect by type or brand
500
+ * @return String
501
+ */
502
+ function isURLSearchParams(obj) {
503
+ // Duck-typing as a necessary condition.
504
+ if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
505
+ return false;
506
+ }
507
+
508
+ // Brand-checking and more duck-typing as optional condition.
509
+ return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
510
+ }
511
+
512
+ /**
513
+ * Check if `obj` is a W3C `Blob` object (which `File` inherits from)
514
+ * @param {*} obj
515
+ * @return {boolean}
516
+ */
517
+ function isBlob(obj) {
518
+ return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
519
+ }
520
+
521
+ /**
522
+ * Clone body given Res/Req instance
523
+ *
524
+ * @param Mixed instance Response or Request instance
525
+ * @return Mixed
526
+ */
527
+ function clone(instance) {
528
+ let p1, p2;
529
+ let body = instance.body;
530
+
531
+ // don't allow cloning a used body
532
+ if (instance.bodyUsed) {
533
+ throw new Error('cannot clone body after it is used');
534
+ }
535
+
536
+ // check that body is a stream and not form-data object
537
+ // note: we can't clone the form-data object without having it as a dependency
538
+ if (body instanceof Stream && typeof body.getBoundary !== 'function') {
539
+ // tee instance body
540
+ p1 = new PassThrough();
541
+ p2 = new PassThrough();
542
+ body.pipe(p1);
543
+ body.pipe(p2);
544
+ // set instance body to teed body and return the other teed body
545
+ instance[INTERNALS].body = p1;
546
+ body = p2;
547
+ }
548
+
549
+ return body;
550
+ }
551
+
552
+ /**
553
+ * Performs the operation "extract a `Content-Type` value from |object|" as
554
+ * specified in the specification:
555
+ * https://fetch.spec.whatwg.org/#concept-bodyinit-extract
556
+ *
557
+ * This function assumes that instance.body is present.
558
+ *
559
+ * @param Mixed instance Any options.body input
560
+ */
561
+ function extractContentType(body) {
562
+ if (body === null) {
563
+ // body is null
564
+ return null;
565
+ } else if (typeof body === 'string') {
566
+ // body is string
567
+ return 'text/plain;charset=UTF-8';
568
+ } else if (isURLSearchParams(body)) {
569
+ // body is a URLSearchParams
570
+ return 'application/x-www-form-urlencoded;charset=UTF-8';
571
+ } else if (isBlob(body)) {
572
+ // body is blob
573
+ return body.type || null;
574
+ } else if (Buffer.isBuffer(body)) {
575
+ // body is buffer
576
+ return null;
577
+ } else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
578
+ // body is ArrayBuffer
579
+ return null;
580
+ } else if (ArrayBuffer.isView(body)) {
581
+ // body is ArrayBufferView
582
+ return null;
583
+ } else if (typeof body.getBoundary === 'function') {
584
+ // detect form data input from form-data module
585
+ return `multipart/form-data;boundary=${body.getBoundary()}`;
586
+ } else if (body instanceof Stream) {
587
+ // body is stream
588
+ // can't really do much about this
589
+ return null;
590
+ } else {
591
+ // Body constructor defaults other things to string
592
+ return 'text/plain;charset=UTF-8';
593
+ }
594
+ }
595
+
596
+ /**
597
+ * The Fetch Standard treats this as if "total bytes" is a property on the body.
598
+ * For us, we have to explicitly get it with a function.
599
+ *
600
+ * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
601
+ *
602
+ * @param Body instance Instance of Body
603
+ * @return Number? Number of bytes, or null if not possible
604
+ */
605
+ function getTotalBytes(instance) {
606
+ const body = instance.body;
607
+
608
+
609
+ if (body === null) {
610
+ // body is null
611
+ return 0;
612
+ } else if (isBlob(body)) {
613
+ return body.size;
614
+ } else if (Buffer.isBuffer(body)) {
615
+ // body is buffer
616
+ return body.length;
617
+ } else if (body && typeof body.getLengthSync === 'function') {
618
+ // detect form data input from form-data module
619
+ if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
620
+ body.hasKnownLength && body.hasKnownLength()) {
621
+ // 2.x
622
+ return body.getLengthSync();
623
+ }
624
+ return null;
625
+ } else {
626
+ // body is stream
627
+ return null;
628
+ }
629
+ }
630
+
631
+ /**
632
+ * Write a Body to a Node.js WritableStream (e.g. http.Request) object.
633
+ *
634
+ * @param Body instance Instance of Body
635
+ * @return Void
636
+ */
637
+ function writeToStream(dest, instance) {
638
+ const body = instance.body;
639
+
640
+
641
+ if (body === null) {
642
+ // body is null
643
+ dest.end();
644
+ } else if (isBlob(body)) {
645
+ body.stream().pipe(dest);
646
+ } else if (Buffer.isBuffer(body)) {
647
+ // body is buffer
648
+ dest.write(body);
649
+ dest.end();
650
+ } else {
651
+ // body is stream
652
+ body.pipe(dest);
653
+ }
654
+ }
655
+
656
+ // expose Promise
657
+ Body.Promise = global.Promise;
658
+
659
+ /**
660
+ * headers.js
661
+ *
662
+ * Headers class offers convenient helpers
663
+ */
664
+
665
+ const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
666
+ const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
667
+
668
+ function validateName(name) {
669
+ name = `${name}`;
670
+ if (invalidTokenRegex.test(name) || name === '') {
671
+ throw new TypeError(`${name} is not a legal HTTP header name`);
672
+ }
673
+ }
674
+
675
+ function validateValue(value) {
676
+ value = `${value}`;
677
+ if (invalidHeaderCharRegex.test(value)) {
678
+ throw new TypeError(`${value} is not a legal HTTP header value`);
679
+ }
680
+ }
681
+
682
+ /**
683
+ * Find the key in the map object given a header name.
684
+ *
685
+ * Returns undefined if not found.
686
+ *
687
+ * @param String name Header name
688
+ * @return String|Undefined
689
+ */
690
+ function find(map, name) {
691
+ name = name.toLowerCase();
692
+ for (const key in map) {
693
+ if (key.toLowerCase() === name) {
694
+ return key;
695
+ }
696
+ }
697
+ return undefined;
698
+ }
699
+
700
+ const MAP = Symbol('map');
701
+ class Headers {
702
+ /**
703
+ * Headers class
704
+ *
705
+ * @param Object headers Response headers
706
+ * @return Void
707
+ */
708
+ constructor() {
709
+ let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
710
+
711
+ this[MAP] = Object.create(null);
712
+
713
+ if (init instanceof Headers) {
714
+ const rawHeaders = init.raw();
715
+ const headerNames = Object.keys(rawHeaders);
716
+
717
+ for (const headerName of headerNames) {
718
+ for (const value of rawHeaders[headerName]) {
719
+ this.append(headerName, value);
720
+ }
721
+ }
722
+
723
+ return;
724
+ }
725
+
726
+ // We don't worry about converting prop to ByteString here as append()
727
+ // will handle it.
728
+ if (init == null) ; else if (typeof init === 'object') {
729
+ const method = init[Symbol.iterator];
730
+ if (method != null) {
731
+ if (typeof method !== 'function') {
732
+ throw new TypeError('Header pairs must be iterable');
733
+ }
734
+
735
+ // sequence<sequence<ByteString>>
736
+ // Note: per spec we have to first exhaust the lists then process them
737
+ const pairs = [];
738
+ for (const pair of init) {
739
+ if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
740
+ throw new TypeError('Each header pair must be iterable');
741
+ }
742
+ pairs.push(Array.from(pair));
743
+ }
744
+
745
+ for (const pair of pairs) {
746
+ if (pair.length !== 2) {
747
+ throw new TypeError('Each header pair must be a name/value tuple');
748
+ }
749
+ this.append(pair[0], pair[1]);
750
+ }
751
+ } else {
752
+ // record<ByteString, ByteString>
753
+ for (const key of Object.keys(init)) {
754
+ const value = init[key];
755
+ this.append(key, value);
756
+ }
757
+ }
758
+ } else {
759
+ throw new TypeError('Provided initializer must be an object');
760
+ }
761
+ }
762
+
763
+ /**
764
+ * Return combined header value given name
765
+ *
766
+ * @param String name Header name
767
+ * @return Mixed
768
+ */
769
+ get(name) {
770
+ name = `${name}`;
771
+ validateName(name);
772
+ const key = find(this[MAP], name);
773
+ if (key === undefined) {
774
+ return null;
775
+ }
776
+
777
+ return this[MAP][key].join(', ');
778
+ }
779
+
780
+ /**
781
+ * Iterate over all headers
782
+ *
783
+ * @param Function callback Executed for each item with parameters (value, name, thisArg)
784
+ * @param Boolean thisArg `this` context for callback function
785
+ * @return Void
786
+ */
787
+ forEach(callback) {
788
+ let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
789
+
790
+ let pairs = getHeaders(this);
791
+ let i = 0;
792
+ while (i < pairs.length) {
793
+ var _pairs$i = pairs[i];
794
+ const name = _pairs$i[0],
795
+ value = _pairs$i[1];
796
+
797
+ callback.call(thisArg, value, name, this);
798
+ pairs = getHeaders(this);
799
+ i++;
800
+ }
801
+ }
802
+
803
+ /**
804
+ * Overwrite header values given name
805
+ *
806
+ * @param String name Header name
807
+ * @param String value Header value
808
+ * @return Void
809
+ */
810
+ set(name, value) {
811
+ name = `${name}`;
812
+ value = `${value}`;
813
+ validateName(name);
814
+ validateValue(value);
815
+ const key = find(this[MAP], name);
816
+ this[MAP][key !== undefined ? key : name] = [value];
817
+ }
818
+
819
+ /**
820
+ * Append a value onto existing header
821
+ *
822
+ * @param String name Header name
823
+ * @param String value Header value
824
+ * @return Void
825
+ */
826
+ append(name, value) {
827
+ name = `${name}`;
828
+ value = `${value}`;
829
+ validateName(name);
830
+ validateValue(value);
831
+ const key = find(this[MAP], name);
832
+ if (key !== undefined) {
833
+ this[MAP][key].push(value);
834
+ } else {
835
+ this[MAP][name] = [value];
836
+ }
837
+ }
838
+
839
+ /**
840
+ * Check for header name existence
841
+ *
842
+ * @param String name Header name
843
+ * @return Boolean
844
+ */
845
+ has(name) {
846
+ name = `${name}`;
847
+ validateName(name);
848
+ return find(this[MAP], name) !== undefined;
849
+ }
850
+
851
+ /**
852
+ * Delete all header values given name
853
+ *
854
+ * @param String name Header name
855
+ * @return Void
856
+ */
857
+ delete(name) {
858
+ name = `${name}`;
859
+ validateName(name);
860
+ const key = find(this[MAP], name);
861
+ if (key !== undefined) {
862
+ delete this[MAP][key];
863
+ }
864
+ }
865
+
866
+ /**
867
+ * Return raw headers (non-spec api)
868
+ *
869
+ * @return Object
870
+ */
871
+ raw() {
872
+ return this[MAP];
873
+ }
874
+
875
+ /**
876
+ * Get an iterator on keys.
877
+ *
878
+ * @return Iterator
879
+ */
880
+ keys() {
881
+ return createHeadersIterator(this, 'key');
882
+ }
883
+
884
+ /**
885
+ * Get an iterator on values.
886
+ *
887
+ * @return Iterator
888
+ */
889
+ values() {
890
+ return createHeadersIterator(this, 'value');
891
+ }
892
+
893
+ /**
894
+ * Get an iterator on entries.
895
+ *
896
+ * This is the default iterator of the Headers object.
897
+ *
898
+ * @return Iterator
899
+ */
900
+ [Symbol.iterator]() {
901
+ return createHeadersIterator(this, 'key+value');
902
+ }
903
+ }
904
+ Headers.prototype.entries = Headers.prototype[Symbol.iterator];
905
+
906
+ Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
907
+ value: 'Headers',
908
+ writable: false,
909
+ enumerable: false,
910
+ configurable: true
911
+ });
912
+
913
+ Object.defineProperties(Headers.prototype, {
914
+ get: { enumerable: true },
915
+ forEach: { enumerable: true },
916
+ set: { enumerable: true },
917
+ append: { enumerable: true },
918
+ has: { enumerable: true },
919
+ delete: { enumerable: true },
920
+ keys: { enumerable: true },
921
+ values: { enumerable: true },
922
+ entries: { enumerable: true }
923
+ });
924
+
925
+ function getHeaders(headers) {
926
+ let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
927
+
928
+ const keys = Object.keys(headers[MAP]).sort();
929
+ return keys.map(kind === 'key' ? function (k) {
930
+ return k.toLowerCase();
931
+ } : kind === 'value' ? function (k) {
932
+ return headers[MAP][k].join(', ');
933
+ } : function (k) {
934
+ return [k.toLowerCase(), headers[MAP][k].join(', ')];
935
+ });
936
+ }
937
+
938
+ const INTERNAL = Symbol('internal');
939
+
940
+ function createHeadersIterator(target, kind) {
941
+ const iterator = Object.create(HeadersIteratorPrototype);
942
+ iterator[INTERNAL] = {
943
+ target,
944
+ kind,
945
+ index: 0
946
+ };
947
+ return iterator;
948
+ }
949
+
950
+ const HeadersIteratorPrototype = Object.setPrototypeOf({
951
+ next() {
952
+ // istanbul ignore if
953
+ if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
954
+ throw new TypeError('Value of `this` is not a HeadersIterator');
955
+ }
956
+
957
+ var _INTERNAL = this[INTERNAL];
958
+ const target = _INTERNAL.target,
959
+ kind = _INTERNAL.kind,
960
+ index = _INTERNAL.index;
961
+
962
+ const values = getHeaders(target, kind);
963
+ const len = values.length;
964
+ if (index >= len) {
965
+ return {
966
+ value: undefined,
967
+ done: true
968
+ };
969
+ }
970
+
971
+ this[INTERNAL].index = index + 1;
972
+
973
+ return {
974
+ value: values[index],
975
+ done: false
976
+ };
977
+ }
978
+ }, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
979
+
980
+ Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
981
+ value: 'HeadersIterator',
982
+ writable: false,
983
+ enumerable: false,
984
+ configurable: true
985
+ });
986
+
987
+ /**
988
+ * Export the Headers object in a form that Node.js can consume.
989
+ *
990
+ * @param Headers headers
991
+ * @return Object
992
+ */
993
+ function exportNodeCompatibleHeaders(headers) {
994
+ const obj = Object.assign({ __proto__: null }, headers[MAP]);
995
+
996
+ // http.request() only supports string as Host header. This hack makes
997
+ // specifying custom Host header possible.
998
+ const hostHeaderKey = find(headers[MAP], 'Host');
999
+ if (hostHeaderKey !== undefined) {
1000
+ obj[hostHeaderKey] = obj[hostHeaderKey][0];
1001
+ }
1002
+
1003
+ return obj;
1004
+ }
1005
+
1006
+ /**
1007
+ * Create a Headers object from an object of headers, ignoring those that do
1008
+ * not conform to HTTP grammar productions.
1009
+ *
1010
+ * @param Object obj Object of headers
1011
+ * @return Headers
1012
+ */
1013
+ function createHeadersLenient(obj) {
1014
+ const headers = new Headers();
1015
+ for (const name of Object.keys(obj)) {
1016
+ if (invalidTokenRegex.test(name)) {
1017
+ continue;
1018
+ }
1019
+ if (Array.isArray(obj[name])) {
1020
+ for (const val of obj[name]) {
1021
+ if (invalidHeaderCharRegex.test(val)) {
1022
+ continue;
1023
+ }
1024
+ if (headers[MAP][name] === undefined) {
1025
+ headers[MAP][name] = [val];
1026
+ } else {
1027
+ headers[MAP][name].push(val);
1028
+ }
1029
+ }
1030
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
1031
+ headers[MAP][name] = [obj[name]];
1032
+ }
1033
+ }
1034
+ return headers;
1035
+ }
1036
+
1037
+ const INTERNALS$1 = Symbol('Response internals');
1038
+
1039
+ // fix an issue where "STATUS_CODES" aren't a named export for node <10
1040
+ const STATUS_CODES = http.STATUS_CODES;
1041
+
1042
+ /**
1043
+ * Response class
1044
+ *
1045
+ * @param Stream body Readable stream
1046
+ * @param Object opts Response options
1047
+ * @return Void
1048
+ */
1049
+ class Response {
1050
+ constructor() {
1051
+ let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1052
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1053
+
1054
+ Body.call(this, body, opts);
1055
+
1056
+ const status = opts.status || 200;
1057
+ const headers = new Headers(opts.headers);
1058
+
1059
+ if (body != null && !headers.has('Content-Type')) {
1060
+ const contentType = extractContentType(body);
1061
+ if (contentType) {
1062
+ headers.append('Content-Type', contentType);
1063
+ }
1064
+ }
1065
+
1066
+ this[INTERNALS$1] = {
1067
+ url: opts.url,
1068
+ status,
1069
+ statusText: opts.statusText || STATUS_CODES[status],
1070
+ headers,
1071
+ counter: opts.counter
1072
+ };
1073
+ }
1074
+
1075
+ get url() {
1076
+ return this[INTERNALS$1].url || '';
1077
+ }
1078
+
1079
+ get status() {
1080
+ return this[INTERNALS$1].status;
1081
+ }
1082
+
1083
+ /**
1084
+ * Convenience property representing if the request ended normally
1085
+ */
1086
+ get ok() {
1087
+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
1088
+ }
1089
+
1090
+ get redirected() {
1091
+ return this[INTERNALS$1].counter > 0;
1092
+ }
1093
+
1094
+ get statusText() {
1095
+ return this[INTERNALS$1].statusText;
1096
+ }
1097
+
1098
+ get headers() {
1099
+ return this[INTERNALS$1].headers;
1100
+ }
1101
+
1102
+ /**
1103
+ * Clone this response
1104
+ *
1105
+ * @return Response
1106
+ */
1107
+ clone() {
1108
+ return new Response(clone(this), {
1109
+ url: this.url,
1110
+ status: this.status,
1111
+ statusText: this.statusText,
1112
+ headers: this.headers,
1113
+ ok: this.ok,
1114
+ redirected: this.redirected
1115
+ });
1116
+ }
1117
+ }
1118
+
1119
+ Body.mixIn(Response.prototype);
1120
+
1121
+ Object.defineProperties(Response.prototype, {
1122
+ url: { enumerable: true },
1123
+ status: { enumerable: true },
1124
+ ok: { enumerable: true },
1125
+ redirected: { enumerable: true },
1126
+ statusText: { enumerable: true },
1127
+ headers: { enumerable: true },
1128
+ clone: { enumerable: true }
1129
+ });
1130
+
1131
+ Object.defineProperty(Response.prototype, Symbol.toStringTag, {
1132
+ value: 'Response',
1133
+ writable: false,
1134
+ enumerable: false,
1135
+ configurable: true
1136
+ });
1137
+
1138
+ const INTERNALS$2 = Symbol('Request internals');
1139
+ const URL = whatwgUrl.URL;
1140
+
1141
+ // fix an issue where "format", "parse" aren't a named export for node <10
1142
+ const parse_url = Url.parse;
1143
+ const format_url = Url.format;
1144
+
1145
+ /**
1146
+ * Wrapper around `new URL` to handle arbitrary URLs
1147
+ *
1148
+ * @param {string} urlStr
1149
+ * @return {void}
1150
+ */
1151
+ function parseURL(urlStr) {
1152
+ /*
1153
+ Check whether the URL is absolute or not
1154
+ Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
1155
+ Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
1156
+ */
1157
+ if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
1158
+ urlStr = new URL(urlStr).toString();
1159
+ }
1160
+
1161
+ // Fallback to old implementation for arbitrary URLs
1162
+ return parse_url(urlStr);
1163
+ }
1164
+
1165
+ const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
1166
+
1167
+ /**
1168
+ * Check if a value is an instance of Request.
1169
+ *
1170
+ * @param Mixed input
1171
+ * @return Boolean
1172
+ */
1173
+ function isRequest(input) {
1174
+ return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
1175
+ }
1176
+
1177
+ function isAbortSignal(signal) {
1178
+ const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
1179
+ return !!(proto && proto.constructor.name === 'AbortSignal');
1180
+ }
1181
+
1182
+ /**
1183
+ * Request class
1184
+ *
1185
+ * @param Mixed input Url or Request instance
1186
+ * @param Object init Custom options
1187
+ * @return Void
1188
+ */
1189
+ class Request {
1190
+ constructor(input) {
1191
+ let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1192
+
1193
+ let parsedURL;
1194
+
1195
+ // normalize input
1196
+ if (!isRequest(input)) {
1197
+ if (input && input.href) {
1198
+ // in order to support Node.js' Url objects; though WHATWG's URL objects
1199
+ // will fall into this branch also (since their `toString()` will return
1200
+ // `href` property anyway)
1201
+ parsedURL = parseURL(input.href);
1202
+ } else {
1203
+ // coerce input to a string before attempting to parse
1204
+ parsedURL = parseURL(`${input}`);
1205
+ }
1206
+ input = {};
1207
+ } else {
1208
+ parsedURL = parseURL(input.url);
1209
+ }
1210
+
1211
+ let method = init.method || input.method || 'GET';
1212
+ method = method.toUpperCase();
1213
+
1214
+ if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
1215
+ throw new TypeError('Request with GET/HEAD method cannot have body');
1216
+ }
1217
+
1218
+ let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
1219
+
1220
+ Body.call(this, inputBody, {
1221
+ timeout: init.timeout || input.timeout || 0,
1222
+ size: init.size || input.size || 0
1223
+ });
1224
+
1225
+ const headers = new Headers(init.headers || input.headers || {});
1226
+
1227
+ if (inputBody != null && !headers.has('Content-Type')) {
1228
+ const contentType = extractContentType(inputBody);
1229
+ if (contentType) {
1230
+ headers.append('Content-Type', contentType);
1231
+ }
1232
+ }
1233
+
1234
+ let signal = isRequest(input) ? input.signal : null;
1235
+ if ('signal' in init) signal = init.signal;
1236
+
1237
+ if (signal != null && !isAbortSignal(signal)) {
1238
+ throw new TypeError('Expected signal to be an instanceof AbortSignal');
1239
+ }
1240
+
1241
+ this[INTERNALS$2] = {
1242
+ method,
1243
+ redirect: init.redirect || input.redirect || 'follow',
1244
+ headers,
1245
+ parsedURL,
1246
+ signal
1247
+ };
1248
+
1249
+ // node-fetch-only options
1250
+ this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
1251
+ this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
1252
+ this.counter = init.counter || input.counter || 0;
1253
+ this.agent = init.agent || input.agent;
1254
+ }
1255
+
1256
+ get method() {
1257
+ return this[INTERNALS$2].method;
1258
+ }
1259
+
1260
+ get url() {
1261
+ return format_url(this[INTERNALS$2].parsedURL);
1262
+ }
1263
+
1264
+ get headers() {
1265
+ return this[INTERNALS$2].headers;
1266
+ }
1267
+
1268
+ get redirect() {
1269
+ return this[INTERNALS$2].redirect;
1270
+ }
1271
+
1272
+ get signal() {
1273
+ return this[INTERNALS$2].signal;
1274
+ }
1275
+
1276
+ /**
1277
+ * Clone this request
1278
+ *
1279
+ * @return Request
1280
+ */
1281
+ clone() {
1282
+ return new Request(this);
1283
+ }
1284
+ }
1285
+
1286
+ Body.mixIn(Request.prototype);
1287
+
1288
+ Object.defineProperty(Request.prototype, Symbol.toStringTag, {
1289
+ value: 'Request',
1290
+ writable: false,
1291
+ enumerable: false,
1292
+ configurable: true
1293
+ });
1294
+
1295
+ Object.defineProperties(Request.prototype, {
1296
+ method: { enumerable: true },
1297
+ url: { enumerable: true },
1298
+ headers: { enumerable: true },
1299
+ redirect: { enumerable: true },
1300
+ clone: { enumerable: true },
1301
+ signal: { enumerable: true }
1302
+ });
1303
+
1304
+ /**
1305
+ * Convert a Request to Node.js http request options.
1306
+ *
1307
+ * @param Request A Request instance
1308
+ * @return Object The options object to be passed to http.request
1309
+ */
1310
+ function getNodeRequestOptions(request) {
1311
+ const parsedURL = request[INTERNALS$2].parsedURL;
1312
+ const headers = new Headers(request[INTERNALS$2].headers);
1313
+
1314
+ // fetch step 1.3
1315
+ if (!headers.has('Accept')) {
1316
+ headers.set('Accept', '*/*');
1317
+ }
1318
+
1319
+ // Basic fetch
1320
+ if (!parsedURL.protocol || !parsedURL.hostname) {
1321
+ throw new TypeError('Only absolute URLs are supported');
1322
+ }
1323
+
1324
+ if (!/^https?:$/.test(parsedURL.protocol)) {
1325
+ throw new TypeError('Only HTTP(S) protocols are supported');
1326
+ }
1327
+
1328
+ if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
1329
+ throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
1330
+ }
1331
+
1332
+ // HTTP-network-or-cache fetch steps 2.4-2.7
1333
+ let contentLengthValue = null;
1334
+ if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
1335
+ contentLengthValue = '0';
1336
+ }
1337
+ if (request.body != null) {
1338
+ const totalBytes = getTotalBytes(request);
1339
+ if (typeof totalBytes === 'number') {
1340
+ contentLengthValue = String(totalBytes);
1341
+ }
1342
+ }
1343
+ if (contentLengthValue) {
1344
+ headers.set('Content-Length', contentLengthValue);
1345
+ }
1346
+
1347
+ // HTTP-network-or-cache fetch step 2.11
1348
+ if (!headers.has('User-Agent')) {
1349
+ headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
1350
+ }
1351
+
1352
+ // HTTP-network-or-cache fetch step 2.15
1353
+ if (request.compress && !headers.has('Accept-Encoding')) {
1354
+ headers.set('Accept-Encoding', 'gzip,deflate');
1355
+ }
1356
+
1357
+ let agent = request.agent;
1358
+ if (typeof agent === 'function') {
1359
+ agent = agent(parsedURL);
1360
+ }
1361
+
1362
+ if (!headers.has('Connection') && !agent) {
1363
+ headers.set('Connection', 'close');
1364
+ }
1365
+
1366
+ // HTTP-network fetch step 4.2
1367
+ // chunked encoding is handled by Node.js
1368
+
1369
+ return Object.assign({}, parsedURL, {
1370
+ method: request.method,
1371
+ headers: exportNodeCompatibleHeaders(headers),
1372
+ agent
1373
+ });
1374
+ }
1375
+
1376
+ /**
1377
+ * abort-error.js
1378
+ *
1379
+ * AbortError interface for cancelled requests
1380
+ */
1381
+
1382
+ /**
1383
+ * Create AbortError instance
1384
+ *
1385
+ * @param String message Error message for human
1386
+ * @return AbortError
1387
+ */
1388
+ function AbortError(message) {
1389
+ Error.call(this, message);
1390
+
1391
+ this.type = 'aborted';
1392
+ this.message = message;
1393
+
1394
+ // hide custom error implementation details from end-users
1395
+ Error.captureStackTrace(this, this.constructor);
1396
+ }
1397
+
1398
+ AbortError.prototype = Object.create(Error.prototype);
1399
+ AbortError.prototype.constructor = AbortError;
1400
+ AbortError.prototype.name = 'AbortError';
1401
+
1402
+ // fix an issue where "PassThrough", "resolve" aren't a named export for node <10
1403
+ const PassThrough$1 = Stream.PassThrough;
1404
+ const resolve_url = Url.resolve;
1405
+
1406
+ /**
1407
+ * Fetch function
1408
+ *
1409
+ * @param Mixed url Absolute url or Request instance
1410
+ * @param Object opts Fetch options
1411
+ * @return Promise
1412
+ */
1413
+ function fetch(url, opts) {
1414
+
1415
+ // allow custom promise
1416
+ if (!fetch.Promise) {
1417
+ throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
1418
+ }
1419
+
1420
+ Body.Promise = fetch.Promise;
1421
+
1422
+ // wrap http.request into fetch
1423
+ return new fetch.Promise(function (resolve, reject) {
1424
+ // build request object
1425
+ const request = new Request(url, opts);
1426
+ const options = getNodeRequestOptions(request);
1427
+
1428
+ const send = (options.protocol === 'https:' ? https : http).request;
1429
+ const signal = request.signal;
1430
+
1431
+ let response = null;
1432
+
1433
+ const abort = function abort() {
1434
+ let error = new AbortError('The user aborted a request.');
1435
+ reject(error);
1436
+ if (request.body && request.body instanceof Stream.Readable) {
1437
+ request.body.destroy(error);
1438
+ }
1439
+ if (!response || !response.body) return;
1440
+ response.body.emit('error', error);
1441
+ };
1442
+
1443
+ if (signal && signal.aborted) {
1444
+ abort();
1445
+ return;
1446
+ }
1447
+
1448
+ const abortAndFinalize = function abortAndFinalize() {
1449
+ abort();
1450
+ finalize();
1451
+ };
1452
+
1453
+ // send request
1454
+ const req = send(options);
1455
+ let reqTimeout;
1456
+
1457
+ if (signal) {
1458
+ signal.addEventListener('abort', abortAndFinalize);
1459
+ }
1460
+
1461
+ function finalize() {
1462
+ req.abort();
1463
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
1464
+ clearTimeout(reqTimeout);
1465
+ }
1466
+
1467
+ if (request.timeout) {
1468
+ req.once('socket', function (socket) {
1469
+ reqTimeout = setTimeout(function () {
1470
+ reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
1471
+ finalize();
1472
+ }, request.timeout);
1473
+ });
1474
+ }
1475
+
1476
+ req.on('error', function (err) {
1477
+ reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
1478
+ finalize();
1479
+ });
1480
+
1481
+ req.on('response', function (res) {
1482
+ clearTimeout(reqTimeout);
1483
+
1484
+ const headers = createHeadersLenient(res.headers);
1485
+
1486
+ // HTTP fetch step 5
1487
+ if (fetch.isRedirect(res.statusCode)) {
1488
+ // HTTP fetch step 5.2
1489
+ const location = headers.get('Location');
1490
+
1491
+ // HTTP fetch step 5.3
1492
+ const locationURL = location === null ? null : resolve_url(request.url, location);
1493
+
1494
+ // HTTP fetch step 5.5
1495
+ switch (request.redirect) {
1496
+ case 'error':
1497
+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
1498
+ finalize();
1499
+ return;
1500
+ case 'manual':
1501
+ // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
1502
+ if (locationURL !== null) {
1503
+ // handle corrupted header
1504
+ try {
1505
+ headers.set('Location', locationURL);
1506
+ } catch (err) {
1507
+ // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
1508
+ reject(err);
1509
+ }
1510
+ }
1511
+ break;
1512
+ case 'follow':
1513
+ // HTTP-redirect fetch step 2
1514
+ if (locationURL === null) {
1515
+ break;
1516
+ }
1517
+
1518
+ // HTTP-redirect fetch step 5
1519
+ if (request.counter >= request.follow) {
1520
+ reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
1521
+ finalize();
1522
+ return;
1523
+ }
1524
+
1525
+ // HTTP-redirect fetch step 6 (counter increment)
1526
+ // Create a new Request object.
1527
+ const requestOpts = {
1528
+ headers: new Headers(request.headers),
1529
+ follow: request.follow,
1530
+ counter: request.counter + 1,
1531
+ agent: request.agent,
1532
+ compress: request.compress,
1533
+ method: request.method,
1534
+ body: request.body,
1535
+ signal: request.signal,
1536
+ timeout: request.timeout,
1537
+ size: request.size
1538
+ };
1539
+
1540
+ // HTTP-redirect fetch step 9
1541
+ if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
1542
+ reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
1543
+ finalize();
1544
+ return;
1545
+ }
1546
+
1547
+ // HTTP-redirect fetch step 11
1548
+ if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
1549
+ requestOpts.method = 'GET';
1550
+ requestOpts.body = undefined;
1551
+ requestOpts.headers.delete('content-length');
1552
+ }
1553
+
1554
+ // HTTP-redirect fetch step 15
1555
+ resolve(fetch(new Request(locationURL, requestOpts)));
1556
+ finalize();
1557
+ return;
1558
+ }
1559
+ }
1560
+
1561
+ // prepare response
1562
+ res.once('end', function () {
1563
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
1564
+ });
1565
+ let body = res.pipe(new PassThrough$1());
1566
+
1567
+ const response_options = {
1568
+ url: request.url,
1569
+ status: res.statusCode,
1570
+ statusText: res.statusMessage,
1571
+ headers: headers,
1572
+ size: request.size,
1573
+ timeout: request.timeout,
1574
+ counter: request.counter
1575
+ };
1576
+
1577
+ // HTTP-network fetch step 12.1.1.3
1578
+ const codings = headers.get('Content-Encoding');
1579
+
1580
+ // HTTP-network fetch step 12.1.1.4: handle content codings
1581
+
1582
+ // in following scenarios we ignore compression support
1583
+ // 1. compression support is disabled
1584
+ // 2. HEAD request
1585
+ // 3. no Content-Encoding header
1586
+ // 4. no content response (204)
1587
+ // 5. content not modified response (304)
1588
+ if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
1589
+ response = new Response(body, response_options);
1590
+ resolve(response);
1591
+ return;
1592
+ }
1593
+
1594
+ // For Node v6+
1595
+ // Be less strict when decoding compressed responses, since sometimes
1596
+ // servers send slightly invalid responses that are still accepted
1597
+ // by common browsers.
1598
+ // Always using Z_SYNC_FLUSH is what cURL does.
1599
+ const zlibOptions = {
1600
+ flush: zlib.Z_SYNC_FLUSH,
1601
+ finishFlush: zlib.Z_SYNC_FLUSH
1602
+ };
1603
+
1604
+ // for gzip
1605
+ if (codings == 'gzip' || codings == 'x-gzip') {
1606
+ body = body.pipe(zlib.createGunzip(zlibOptions));
1607
+ response = new Response(body, response_options);
1608
+ resolve(response);
1609
+ return;
1610
+ }
1611
+
1612
+ // for deflate
1613
+ if (codings == 'deflate' || codings == 'x-deflate') {
1614
+ // handle the infamous raw deflate response from old servers
1615
+ // a hack for old IIS and Apache servers
1616
+ const raw = res.pipe(new PassThrough$1());
1617
+ raw.once('data', function (chunk) {
1618
+ // see http://stackoverflow.com/questions/37519828
1619
+ if ((chunk[0] & 0x0F) === 0x08) {
1620
+ body = body.pipe(zlib.createInflate());
1621
+ } else {
1622
+ body = body.pipe(zlib.createInflateRaw());
1623
+ }
1624
+ response = new Response(body, response_options);
1625
+ resolve(response);
1626
+ });
1627
+ return;
1628
+ }
1629
+
1630
+ // for br
1631
+ if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
1632
+ body = body.pipe(zlib.createBrotliDecompress());
1633
+ response = new Response(body, response_options);
1634
+ resolve(response);
1635
+ return;
1636
+ }
1637
+
1638
+ // otherwise, use response as-is
1639
+ response = new Response(body, response_options);
1640
+ resolve(response);
1641
+ });
1642
+
1643
+ writeToStream(req, request);
1644
+ });
1645
+ }
1646
+ /**
1647
+ * Redirect code matching
1648
+ *
1649
+ * @param Number code Status code
1650
+ * @return Boolean
1651
+ */
1652
+ fetch.isRedirect = function (code) {
1653
+ return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
1654
+ };
1655
+
1656
+ // expose Promise
1657
+ fetch.Promise = global.Promise;
1658
+
1659
+ export default fetch;
1660
+ export { Headers, Request, Response, FetchError };