postdoc 0.2.0.beta4 → 0.2.4

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 (370) hide show
  1. checksums.yaml +4 -4
  2. data/lib/postdoc.rb +50 -18
  3. metadata +24 -378
  4. data/lib/pdf.js +0 -27
  5. data/node_modules/agent-base/History.md +0 -113
  6. data/node_modules/agent-base/README.md +0 -145
  7. data/node_modules/agent-base/index.js +0 -160
  8. data/node_modules/agent-base/package.json +0 -35
  9. data/node_modules/agent-base/patch-core.js +0 -37
  10. data/node_modules/agent-base/test/ssl-cert-snakeoil.key +0 -15
  11. data/node_modules/agent-base/test/ssl-cert-snakeoil.pem +0 -12
  12. data/node_modules/agent-base/test/test.js +0 -673
  13. data/node_modules/async-limiter/LICENSE +0 -8
  14. data/node_modules/async-limiter/coverage/coverage.json +0 -1
  15. data/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html +0 -73
  16. data/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html +0 -246
  17. data/node_modules/async-limiter/coverage/lcov-report/base.css +0 -182
  18. data/node_modules/async-limiter/coverage/lcov-report/index.html +0 -73
  19. data/node_modules/async-limiter/coverage/lcov-report/prettify.css +0 -1
  20. data/node_modules/async-limiter/coverage/lcov-report/prettify.js +0 -1
  21. data/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  22. data/node_modules/async-limiter/coverage/lcov-report/sorter.js +0 -156
  23. data/node_modules/async-limiter/coverage/lcov.info +0 -74
  24. data/node_modules/async-limiter/index.js +0 -67
  25. data/node_modules/async-limiter/package.json +0 -35
  26. data/node_modules/async-limiter/readme.md +0 -132
  27. data/node_modules/balanced-match/LICENSE.md +0 -21
  28. data/node_modules/balanced-match/README.md +0 -91
  29. data/node_modules/balanced-match/index.js +0 -59
  30. data/node_modules/balanced-match/package.json +0 -49
  31. data/node_modules/brace-expansion/LICENSE +0 -21
  32. data/node_modules/brace-expansion/README.md +0 -129
  33. data/node_modules/brace-expansion/index.js +0 -201
  34. data/node_modules/brace-expansion/package.json +0 -47
  35. data/node_modules/buffer-from/index.js +0 -69
  36. data/node_modules/buffer-from/package.json +0 -16
  37. data/node_modules/buffer-from/readme.md +0 -69
  38. data/node_modules/buffer-from/test.js +0 -12
  39. data/node_modules/concat-map/LICENSE +0 -18
  40. data/node_modules/concat-map/README.markdown +0 -62
  41. data/node_modules/concat-map/example/map.js +0 -6
  42. data/node_modules/concat-map/index.js +0 -13
  43. data/node_modules/concat-map/package.json +0 -43
  44. data/node_modules/concat-map/test/map.js +0 -39
  45. data/node_modules/concat-stream/LICENSE +0 -24
  46. data/node_modules/concat-stream/index.js +0 -144
  47. data/node_modules/concat-stream/package.json +0 -55
  48. data/node_modules/concat-stream/readme.md +0 -102
  49. data/node_modules/core-util-is/LICENSE +0 -19
  50. data/node_modules/core-util-is/README.md +0 -3
  51. data/node_modules/core-util-is/float.patch +0 -604
  52. data/node_modules/core-util-is/lib/util.js +0 -107
  53. data/node_modules/core-util-is/package.json +0 -32
  54. data/node_modules/core-util-is/test.js +0 -68
  55. data/node_modules/debug/CHANGELOG.md +0 -395
  56. data/node_modules/debug/LICENSE +0 -19
  57. data/node_modules/debug/Makefile +0 -58
  58. data/node_modules/debug/README.md +0 -368
  59. data/node_modules/debug/karma.conf.js +0 -70
  60. data/node_modules/debug/node.js +0 -1
  61. data/node_modules/debug/package.json +0 -43
  62. data/node_modules/debug/src/browser.js +0 -195
  63. data/node_modules/debug/src/debug.js +0 -225
  64. data/node_modules/debug/src/index.js +0 -10
  65. data/node_modules/debug/src/node.js +0 -186
  66. data/node_modules/es6-promise/CHANGELOG.md +0 -151
  67. data/node_modules/es6-promise/LICENSE +0 -19
  68. data/node_modules/es6-promise/README.md +0 -97
  69. data/node_modules/es6-promise/auto.js +0 -4
  70. data/node_modules/es6-promise/dist/es6-promise.auto.js +0 -1181
  71. data/node_modules/es6-promise/dist/es6-promise.auto.map +0 -1
  72. data/node_modules/es6-promise/dist/es6-promise.auto.min.js +0 -1
  73. data/node_modules/es6-promise/dist/es6-promise.auto.min.map +0 -1
  74. data/node_modules/es6-promise/dist/es6-promise.js +0 -1179
  75. data/node_modules/es6-promise/dist/es6-promise.map +0 -1
  76. data/node_modules/es6-promise/dist/es6-promise.min.js +0 -1
  77. data/node_modules/es6-promise/dist/es6-promise.min.map +0 -1
  78. data/node_modules/es6-promise/es6-promise.d.ts +0 -81
  79. data/node_modules/es6-promise/lib/es6-promise.auto.js +0 -3
  80. data/node_modules/es6-promise/lib/es6-promise.js +0 -7
  81. data/node_modules/es6-promise/lib/es6-promise/-internal.js +0 -266
  82. data/node_modules/es6-promise/lib/es6-promise/asap.js +0 -119
  83. data/node_modules/es6-promise/lib/es6-promise/enumerator.js +0 -113
  84. data/node_modules/es6-promise/lib/es6-promise/polyfill.js +0 -35
  85. data/node_modules/es6-promise/lib/es6-promise/promise.js +0 -427
  86. data/node_modules/es6-promise/lib/es6-promise/promise/all.js +0 -52
  87. data/node_modules/es6-promise/lib/es6-promise/promise/race.js +0 -84
  88. data/node_modules/es6-promise/lib/es6-promise/promise/reject.js +0 -46
  89. data/node_modules/es6-promise/lib/es6-promise/promise/resolve.js +0 -48
  90. data/node_modules/es6-promise/lib/es6-promise/then.js +0 -32
  91. data/node_modules/es6-promise/lib/es6-promise/utils.js +0 -21
  92. data/node_modules/es6-promise/package.json +0 -75
  93. data/node_modules/es6-promisify/README.md +0 -89
  94. data/node_modules/es6-promisify/dist/promise.js +0 -73
  95. data/node_modules/es6-promisify/dist/promisify.js +0 -85
  96. data/node_modules/es6-promisify/package.json +0 -41
  97. data/node_modules/extract-zip/CONTRIBUTING.md +0 -1
  98. data/node_modules/extract-zip/LICENSE +0 -23
  99. data/node_modules/extract-zip/cli.js +0 -20
  100. data/node_modules/extract-zip/index.js +0 -205
  101. data/node_modules/extract-zip/node_modules/debug/CHANGELOG.md +0 -362
  102. data/node_modules/extract-zip/node_modules/debug/LICENSE +0 -19
  103. data/node_modules/extract-zip/node_modules/debug/Makefile +0 -50
  104. data/node_modules/extract-zip/node_modules/debug/README.md +0 -312
  105. data/node_modules/extract-zip/node_modules/debug/component.json +0 -19
  106. data/node_modules/extract-zip/node_modules/debug/karma.conf.js +0 -70
  107. data/node_modules/extract-zip/node_modules/debug/node.js +0 -1
  108. data/node_modules/extract-zip/node_modules/debug/package.json +0 -49
  109. data/node_modules/extract-zip/node_modules/debug/src/browser.js +0 -185
  110. data/node_modules/extract-zip/node_modules/debug/src/debug.js +0 -202
  111. data/node_modules/extract-zip/node_modules/debug/src/index.js +0 -10
  112. data/node_modules/extract-zip/node_modules/debug/src/inspector-log.js +0 -15
  113. data/node_modules/extract-zip/node_modules/debug/src/node.js +0 -248
  114. data/node_modules/extract-zip/package.json +0 -35
  115. data/node_modules/extract-zip/readme.md +0 -49
  116. data/node_modules/fd-slicer/CHANGELOG.md +0 -49
  117. data/node_modules/fd-slicer/LICENSE +0 -21
  118. data/node_modules/fd-slicer/README.md +0 -189
  119. data/node_modules/fd-slicer/index.js +0 -277
  120. data/node_modules/fd-slicer/package.json +0 -36
  121. data/node_modules/fd-slicer/test/test.js +0 -350
  122. data/node_modules/fs.realpath/LICENSE +0 -43
  123. data/node_modules/fs.realpath/README.md +0 -33
  124. data/node_modules/fs.realpath/index.js +0 -66
  125. data/node_modules/fs.realpath/old.js +0 -303
  126. data/node_modules/fs.realpath/package.json +0 -26
  127. data/node_modules/glob/LICENSE +0 -15
  128. data/node_modules/glob/README.md +0 -368
  129. data/node_modules/glob/changelog.md +0 -67
  130. data/node_modules/glob/common.js +0 -240
  131. data/node_modules/glob/glob.js +0 -790
  132. data/node_modules/glob/package.json +0 -43
  133. data/node_modules/glob/sync.js +0 -486
  134. data/node_modules/https-proxy-agent/History.md +0 -124
  135. data/node_modules/https-proxy-agent/README.md +0 -137
  136. data/node_modules/https-proxy-agent/index.js +0 -229
  137. data/node_modules/https-proxy-agent/package.json +0 -35
  138. data/node_modules/https-proxy-agent/test/ssl-cert-snakeoil.key +0 -15
  139. data/node_modules/https-proxy-agent/test/ssl-cert-snakeoil.pem +0 -12
  140. data/node_modules/https-proxy-agent/test/test.js +0 -342
  141. data/node_modules/inflight/LICENSE +0 -15
  142. data/node_modules/inflight/README.md +0 -37
  143. data/node_modules/inflight/inflight.js +0 -54
  144. data/node_modules/inflight/package.json +0 -29
  145. data/node_modules/inherits/LICENSE +0 -16
  146. data/node_modules/inherits/README.md +0 -42
  147. data/node_modules/inherits/inherits.js +0 -7
  148. data/node_modules/inherits/inherits_browser.js +0 -23
  149. data/node_modules/inherits/package.json +0 -29
  150. data/node_modules/isarray/Makefile +0 -6
  151. data/node_modules/isarray/README.md +0 -60
  152. data/node_modules/isarray/component.json +0 -19
  153. data/node_modules/isarray/index.js +0 -5
  154. data/node_modules/isarray/package.json +0 -45
  155. data/node_modules/isarray/test.js +0 -20
  156. data/node_modules/mime/CHANGELOG.md +0 -225
  157. data/node_modules/mime/CONTRIBUTING.md +0 -5
  158. data/node_modules/mime/LICENSE +0 -21
  159. data/node_modules/mime/Mime.js +0 -89
  160. data/node_modules/mime/README.md +0 -188
  161. data/node_modules/mime/cli.js +0 -10
  162. data/node_modules/mime/index.js +0 -4
  163. data/node_modules/mime/lite.js +0 -4
  164. data/node_modules/mime/package.json +0 -43
  165. data/node_modules/mime/src/README_js.md +0 -179
  166. data/node_modules/mime/src/build.js +0 -71
  167. data/node_modules/mime/src/test.js +0 -257
  168. data/node_modules/mime/types/other.json +0 -1
  169. data/node_modules/mime/types/standard.json +0 -1
  170. data/node_modules/minimatch/LICENSE +0 -15
  171. data/node_modules/minimatch/README.md +0 -209
  172. data/node_modules/minimatch/minimatch.js +0 -923
  173. data/node_modules/minimatch/package.json +0 -30
  174. data/node_modules/minimist/LICENSE +0 -18
  175. data/node_modules/minimist/example/parse.js +0 -2
  176. data/node_modules/minimist/index.js +0 -187
  177. data/node_modules/minimist/package.json +0 -40
  178. data/node_modules/minimist/readme.markdown +0 -73
  179. data/node_modules/minimist/test/dash.js +0 -24
  180. data/node_modules/minimist/test/default_bool.js +0 -20
  181. data/node_modules/minimist/test/dotted.js +0 -16
  182. data/node_modules/minimist/test/long.js +0 -31
  183. data/node_modules/minimist/test/parse.js +0 -318
  184. data/node_modules/minimist/test/parse_modified.js +0 -9
  185. data/node_modules/minimist/test/short.js +0 -67
  186. data/node_modules/minimist/test/whitespace.js +0 -8
  187. data/node_modules/mkdirp/LICENSE +0 -21
  188. data/node_modules/mkdirp/bin/cmd.js +0 -33
  189. data/node_modules/mkdirp/bin/usage.txt +0 -12
  190. data/node_modules/mkdirp/examples/pow.js +0 -6
  191. data/node_modules/mkdirp/index.js +0 -98
  192. data/node_modules/mkdirp/package.json +0 -27
  193. data/node_modules/mkdirp/readme.markdown +0 -100
  194. data/node_modules/mkdirp/test/chmod.js +0 -41
  195. data/node_modules/mkdirp/test/clobber.js +0 -38
  196. data/node_modules/mkdirp/test/mkdirp.js +0 -28
  197. data/node_modules/mkdirp/test/opts_fs.js +0 -29
  198. data/node_modules/mkdirp/test/opts_fs_sync.js +0 -27
  199. data/node_modules/mkdirp/test/perm.js +0 -32
  200. data/node_modules/mkdirp/test/perm_sync.js +0 -36
  201. data/node_modules/mkdirp/test/race.js +0 -37
  202. data/node_modules/mkdirp/test/rel.js +0 -32
  203. data/node_modules/mkdirp/test/return.js +0 -25
  204. data/node_modules/mkdirp/test/return_sync.js +0 -24
  205. data/node_modules/mkdirp/test/root.js +0 -19
  206. data/node_modules/mkdirp/test/sync.js +0 -32
  207. data/node_modules/mkdirp/test/umask.js +0 -28
  208. data/node_modules/mkdirp/test/umask_sync.js +0 -32
  209. data/node_modules/ms/index.js +0 -152
  210. data/node_modules/ms/license.md +0 -21
  211. data/node_modules/ms/package.json +0 -37
  212. data/node_modules/ms/readme.md +0 -51
  213. data/node_modules/once/LICENSE +0 -15
  214. data/node_modules/once/README.md +0 -79
  215. data/node_modules/once/once.js +0 -42
  216. data/node_modules/once/package.json +0 -33
  217. data/node_modules/path-is-absolute/index.js +0 -20
  218. data/node_modules/path-is-absolute/license +0 -21
  219. data/node_modules/path-is-absolute/package.json +0 -43
  220. data/node_modules/path-is-absolute/readme.md +0 -59
  221. data/node_modules/pend/LICENSE +0 -23
  222. data/node_modules/pend/README.md +0 -41
  223. data/node_modules/pend/index.js +0 -55
  224. data/node_modules/pend/package.json +0 -18
  225. data/node_modules/pend/test.js +0 -137
  226. data/node_modules/process-nextick-args/index.js +0 -44
  227. data/node_modules/process-nextick-args/license.md +0 -19
  228. data/node_modules/process-nextick-args/package.json +0 -25
  229. data/node_modules/process-nextick-args/readme.md +0 -18
  230. data/node_modules/progress/CHANGELOG.md +0 -115
  231. data/node_modules/progress/LICENSE +0 -22
  232. data/node_modules/progress/Makefile +0 -8
  233. data/node_modules/progress/README.md +0 -146
  234. data/node_modules/progress/index.js +0 -1
  235. data/node_modules/progress/lib/node-progress.js +0 -231
  236. data/node_modules/progress/package.json +0 -25
  237. data/node_modules/proxy-from-env/README.md +0 -131
  238. data/node_modules/proxy-from-env/index.js +0 -103
  239. data/node_modules/proxy-from-env/package.json +0 -35
  240. data/node_modules/proxy-from-env/test.js +0 -393
  241. data/node_modules/puppeteer/CONTRIBUTING.md +0 -206
  242. data/node_modules/puppeteer/DeviceDescriptors.js +0 -704
  243. data/node_modules/puppeteer/LICENSE +0 -202
  244. data/node_modules/puppeteer/README.md +0 -306
  245. data/node_modules/puppeteer/index.js +0 -28
  246. data/node_modules/puppeteer/install.js +0 -122
  247. data/node_modules/puppeteer/lib/Browser.js +0 -186
  248. data/node_modules/puppeteer/lib/BrowserFetcher.js +0 -279
  249. data/node_modules/puppeteer/lib/Connection.js +0 -246
  250. data/node_modules/puppeteer/lib/Coverage.js +0 -301
  251. data/node_modules/puppeteer/lib/Dialog.js +0 -84
  252. data/node_modules/puppeteer/lib/ElementHandle.js +0 -328
  253. data/node_modules/puppeteer/lib/EmulationManager.js +0 -89
  254. data/node_modules/puppeteer/lib/ExecutionContext.js +0 -232
  255. data/node_modules/puppeteer/lib/FrameManager.js +0 -997
  256. data/node_modules/puppeteer/lib/Input.js +0 -309
  257. data/node_modules/puppeteer/lib/Launcher.js +0 -310
  258. data/node_modules/puppeteer/lib/Multimap.js +0 -95
  259. data/node_modules/puppeteer/lib/NavigatorWatcher.js +0 -137
  260. data/node_modules/puppeteer/lib/NetworkManager.js +0 -796
  261. data/node_modules/puppeteer/lib/Page.js +0 -1098
  262. data/node_modules/puppeteer/lib/Pipe.js +0 -69
  263. data/node_modules/puppeteer/lib/Puppeteer.js +0 -60
  264. data/node_modules/puppeteer/lib/Target.js +0 -88
  265. data/node_modules/puppeteer/lib/TaskQueue.js +0 -17
  266. data/node_modules/puppeteer/lib/Tracing.js +0 -99
  267. data/node_modules/puppeteer/lib/USKeyboardLayout.js +0 -281
  268. data/node_modules/puppeteer/lib/helper.js +0 -248
  269. data/node_modules/puppeteer/node6/lib/Browser.js +0 -394
  270. data/node_modules/puppeteer/node6/lib/BrowserFetcher.js +0 -357
  271. data/node_modules/puppeteer/node6/lib/Connection.js +0 -350
  272. data/node_modules/puppeteer/node6/lib/Coverage.js +0 -561
  273. data/node_modules/puppeteer/node6/lib/Dialog.js +0 -136
  274. data/node_modules/puppeteer/node6/lib/ElementHandle.js +0 -796
  275. data/node_modules/puppeteer/node6/lib/EmulationManager.js +0 -115
  276. data/node_modules/puppeteer/node6/lib/ExecutionContext.js +0 -414
  277. data/node_modules/puppeteer/node6/lib/FrameManager.js +0 -1621
  278. data/node_modules/puppeteer/node6/lib/Input.js +0 -569
  279. data/node_modules/puppeteer/node6/lib/Launcher.js +0 -362
  280. data/node_modules/puppeteer/node6/lib/Multimap.js +0 -95
  281. data/node_modules/puppeteer/node6/lib/NavigatorWatcher.js +0 -163
  282. data/node_modules/puppeteer/node6/lib/NetworkManager.js +0 -1108
  283. data/node_modules/puppeteer/node6/lib/Page.js +0 -2242
  284. data/node_modules/puppeteer/node6/lib/Pipe.js +0 -69
  285. data/node_modules/puppeteer/node6/lib/Puppeteer.js +0 -60
  286. data/node_modules/puppeteer/node6/lib/Target.js +0 -114
  287. data/node_modules/puppeteer/node6/lib/TaskQueue.js +0 -17
  288. data/node_modules/puppeteer/node6/lib/Tracing.js +0 -177
  289. data/node_modules/puppeteer/node6/lib/USKeyboardLayout.js +0 -281
  290. data/node_modules/puppeteer/node6/lib/helper.js +0 -274
  291. data/node_modules/puppeteer/package.json +0 -61
  292. data/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  293. data/node_modules/readable-stream/GOVERNANCE.md +0 -136
  294. data/node_modules/readable-stream/LICENSE +0 -47
  295. data/node_modules/readable-stream/README.md +0 -58
  296. data/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  297. data/node_modules/readable-stream/duplex-browser.js +0 -1
  298. data/node_modules/readable-stream/duplex.js +0 -1
  299. data/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  300. data/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  301. data/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  302. data/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  303. data/node_modules/readable-stream/lib/_stream_writable.js +0 -687
  304. data/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  305. data/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
  306. data/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  307. data/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  308. data/node_modules/readable-stream/package.json +0 -52
  309. data/node_modules/readable-stream/passthrough.js +0 -1
  310. data/node_modules/readable-stream/readable-browser.js +0 -7
  311. data/node_modules/readable-stream/readable.js +0 -19
  312. data/node_modules/readable-stream/transform.js +0 -1
  313. data/node_modules/readable-stream/writable-browser.js +0 -1
  314. data/node_modules/readable-stream/writable.js +0 -8
  315. data/node_modules/rimraf/LICENSE +0 -15
  316. data/node_modules/rimraf/README.md +0 -101
  317. data/node_modules/rimraf/bin.js +0 -50
  318. data/node_modules/rimraf/package.json +0 -26
  319. data/node_modules/rimraf/rimraf.js +0 -364
  320. data/node_modules/safe-buffer/LICENSE +0 -21
  321. data/node_modules/safe-buffer/README.md +0 -584
  322. data/node_modules/safe-buffer/index.d.ts +0 -187
  323. data/node_modules/safe-buffer/index.js +0 -62
  324. data/node_modules/safe-buffer/package.json +0 -37
  325. data/node_modules/string_decoder/LICENSE +0 -48
  326. data/node_modules/string_decoder/README.md +0 -47
  327. data/node_modules/string_decoder/lib/string_decoder.js +0 -296
  328. data/node_modules/string_decoder/package.json +0 -31
  329. data/node_modules/typedarray/LICENSE +0 -35
  330. data/node_modules/typedarray/example/tarray.js +0 -4
  331. data/node_modules/typedarray/index.js +0 -630
  332. data/node_modules/typedarray/package.json +0 -55
  333. data/node_modules/typedarray/readme.markdown +0 -61
  334. data/node_modules/typedarray/test/server/undef_globals.js +0 -19
  335. data/node_modules/typedarray/test/tarray.js +0 -10
  336. data/node_modules/ultron/LICENSE +0 -22
  337. data/node_modules/ultron/README.md +0 -113
  338. data/node_modules/ultron/index.js +0 -136
  339. data/node_modules/ultron/package.json +0 -41
  340. data/node_modules/util-deprecate/History.md +0 -16
  341. data/node_modules/util-deprecate/LICENSE +0 -24
  342. data/node_modules/util-deprecate/README.md +0 -53
  343. data/node_modules/util-deprecate/browser.js +0 -67
  344. data/node_modules/util-deprecate/node.js +0 -6
  345. data/node_modules/util-deprecate/package.json +0 -27
  346. data/node_modules/wrappy/LICENSE +0 -15
  347. data/node_modules/wrappy/README.md +0 -36
  348. data/node_modules/wrappy/package.json +0 -29
  349. data/node_modules/wrappy/wrappy.js +0 -33
  350. data/node_modules/ws/LICENSE +0 -21
  351. data/node_modules/ws/README.md +0 -341
  352. data/node_modules/ws/index.js +0 -15
  353. data/node_modules/ws/lib/BufferUtil.js +0 -71
  354. data/node_modules/ws/lib/Constants.js +0 -10
  355. data/node_modules/ws/lib/ErrorCodes.js +0 -28
  356. data/node_modules/ws/lib/EventTarget.js +0 -151
  357. data/node_modules/ws/lib/Extensions.js +0 -203
  358. data/node_modules/ws/lib/PerMessageDeflate.js +0 -507
  359. data/node_modules/ws/lib/Receiver.js +0 -553
  360. data/node_modules/ws/lib/Sender.js +0 -412
  361. data/node_modules/ws/lib/Validation.js +0 -17
  362. data/node_modules/ws/lib/WebSocket.js +0 -717
  363. data/node_modules/ws/lib/WebSocketServer.js +0 -326
  364. data/node_modules/ws/package.json +0 -46
  365. data/node_modules/yauzl/LICENSE +0 -21
  366. data/node_modules/yauzl/README.md +0 -467
  367. data/node_modules/yauzl/index.js +0 -626
  368. data/node_modules/yauzl/package.json +0 -36
  369. data/package.json +0 -5
  370. data/yarn.lock +0 -240
@@ -1,2242 +0,0 @@
1
- /**
2
- * Copyright 2017 Google Inc. All rights reserved.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- const fs = require('fs');
18
- const EventEmitter = require('events');
19
- const mime = require('mime');
20
- const {NetworkManager} = require('./NetworkManager');
21
- const NavigatorWatcher = require('./NavigatorWatcher');
22
- const Dialog = require('./Dialog');
23
- const EmulationManager = require('./EmulationManager');
24
- const {FrameManager} = require('./FrameManager');
25
- const {Keyboard, Mouse, Touchscreen} = require('./Input');
26
- const Tracing = require('./Tracing');
27
- const {helper, debugError} = require('./helper');
28
- const {Coverage} = require('./Coverage');
29
-
30
- const writeFileAsync = helper.promisify(fs.writeFile);
31
-
32
- class Page extends EventEmitter {
33
- /**
34
- * @param {!Puppeteer.CDPSession} client
35
- * @param {!Puppeteer.Target} target
36
- * @param {boolean} ignoreHTTPSErrors
37
- * @param {boolean} setDefaultViewport
38
- * @param {!Puppeteer.TaskQueue} screenshotTaskQueue
39
- * @return {!Promise<!Page>}
40
- */
41
- static /* async */ create(client, target, ignoreHTTPSErrors, setDefaultViewport, screenshotTaskQueue) {return (fn => {
42
- const gen = fn.call(this);
43
- return new Promise((resolve, reject) => {
44
- function step(key, arg) {
45
- let info, value;
46
- try {
47
- info = gen[key](arg);
48
- value = info.value;
49
- } catch (error) {
50
- reject(error);
51
- return;
52
- }
53
- if (info.done) {
54
- resolve(value);
55
- } else {
56
- return Promise.resolve(value).then(
57
- value => {
58
- step('next', value);
59
- },
60
- err => {
61
- step('throw', err);
62
- });
63
- }
64
- }
65
- return step('next');
66
- });
67
- })(function*(){
68
-
69
- (yield client.send('Page.enable'));
70
- const {frameTree} = (yield client.send('Page.getFrameTree'));
71
- const page = new Page(client, target, frameTree, ignoreHTTPSErrors, screenshotTaskQueue);
72
-
73
- (yield Promise.all([
74
- client.send('Page.setLifecycleEventsEnabled', { enabled: true }),
75
- client.send('Network.enable', {}),
76
- client.send('Runtime.enable', {}),
77
- client.send('Security.enable', {}),
78
- client.send('Performance.enable', {}),
79
- client.send('Log.enable', {}),
80
- ]));
81
- if (ignoreHTTPSErrors)
82
- (yield client.send('Security.setOverrideCertificateErrors', {override: true}));
83
- // Initialize default page size.
84
- if (setDefaultViewport)
85
- (yield page.setViewport({width: 800, height: 600}));
86
-
87
- return page;
88
- });}
89
-
90
- /**
91
- * @param {!Puppeteer.CDPSession} client
92
- * @param {!Puppeteer.Target} target
93
- * @param {!Protocol.Page.FrameTree} frameTree
94
- * @param {boolean} ignoreHTTPSErrors
95
- * @param {!Puppeteer.TaskQueue} screenshotTaskQueue
96
- */
97
- constructor(client, target, frameTree, ignoreHTTPSErrors, screenshotTaskQueue) {
98
- super();
99
- this._client = client;
100
- this._target = target;
101
- this._keyboard = new Keyboard(client);
102
- this._mouse = new Mouse(client, this._keyboard);
103
- this._touchscreen = new Touchscreen(client, this._keyboard);
104
- this._frameManager = new FrameManager(client, frameTree, this);
105
- this._networkManager = new NetworkManager(client, this._frameManager);
106
- this._emulationManager = new EmulationManager(client);
107
- this._tracing = new Tracing(client);
108
- /** @type {!Map<string, Function>} */
109
- this._pageBindings = new Map();
110
- this._ignoreHTTPSErrors = ignoreHTTPSErrors;
111
- this._coverage = new Coverage(client);
112
- this._defaultNavigationTimeout = 30000;
113
-
114
- this._screenshotTaskQueue = screenshotTaskQueue;
115
-
116
- this._frameManager.on(FrameManager.Events.FrameAttached, event => this.emit(Page.Events.FrameAttached, event));
117
- this._frameManager.on(FrameManager.Events.FrameDetached, event => this.emit(Page.Events.FrameDetached, event));
118
- this._frameManager.on(FrameManager.Events.FrameNavigated, event => this.emit(Page.Events.FrameNavigated, event));
119
-
120
- this._networkManager.on(NetworkManager.Events.Request, event => this.emit(Page.Events.Request, event));
121
- this._networkManager.on(NetworkManager.Events.Response, event => this.emit(Page.Events.Response, event));
122
- this._networkManager.on(NetworkManager.Events.RequestFailed, event => this.emit(Page.Events.RequestFailed, event));
123
- this._networkManager.on(NetworkManager.Events.RequestFinished, event => this.emit(Page.Events.RequestFinished, event));
124
-
125
- client.on('Page.domContentEventFired', event => this.emit(Page.Events.DOMContentLoaded));
126
- client.on('Page.loadEventFired', event => this.emit(Page.Events.Load));
127
- client.on('Runtime.consoleAPICalled', event => this._onConsoleAPI(event));
128
- client.on('Page.javascriptDialogOpening', event => this._onDialog(event));
129
- client.on('Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails));
130
- client.on('Security.certificateError', event => this._onCertificateError(event));
131
- client.on('Inspector.targetCrashed', event => this._onTargetCrashed());
132
- client.on('Performance.metrics', event => this._emitMetrics(event));
133
- client.on('Log.entryAdded', event => this._onLogEntryAdded(event));
134
- this._target._isClosedPromise.then(() => this.emit(Page.Events.Close));
135
- }
136
-
137
- /**
138
- * @return {!Puppeteer.Target}
139
- */
140
- target() {
141
- return this._target;
142
- }
143
-
144
- /**
145
- * @return {!Puppeteer.Browser}
146
- */
147
- browser() {
148
- return this._target.browser();
149
- }
150
-
151
- _onTargetCrashed() {
152
- this.emit('error', new Error('Page crashed!'));
153
- }
154
-
155
- _onLogEntryAdded(event) {
156
- const {level, text, args} = event.entry;
157
- if (args)
158
- args.map(arg => helper.releaseObject(this._client, arg));
159
-
160
- this.emit(Page.Events.Console, new ConsoleMessage(level, text));
161
- }
162
-
163
- /**
164
- * @return {!Puppeteer.Frame}
165
- */
166
- mainFrame() {
167
- return this._frameManager.mainFrame();
168
- }
169
-
170
- /**
171
- * @return {!Keyboard}
172
- */
173
- get keyboard() {
174
- return this._keyboard;
175
- }
176
-
177
- /**
178
- * @return {!Touchscreen}
179
- */
180
- get touchscreen() {
181
- return this._touchscreen;
182
- }
183
-
184
- /**
185
- * @return {!Coverage}
186
- */
187
- get coverage() {
188
- return this._coverage;
189
- }
190
-
191
- /**
192
- * @return {!Tracing}
193
- */
194
- get tracing() {
195
- return this._tracing;
196
- }
197
-
198
- /**
199
- * @return {!Array<Puppeteer.Frame>}
200
- */
201
- frames() {
202
- return this._frameManager.frames();
203
- }
204
-
205
- /**
206
- * @param {boolean} value
207
- */
208
- /* async */ setRequestInterception(value) {return (fn => {
209
- const gen = fn.call(this);
210
- return new Promise((resolve, reject) => {
211
- function step(key, arg) {
212
- let info, value;
213
- try {
214
- info = gen[key](arg);
215
- value = info.value;
216
- } catch (error) {
217
- reject(error);
218
- return;
219
- }
220
- if (info.done) {
221
- resolve(value);
222
- } else {
223
- return Promise.resolve(value).then(
224
- value => {
225
- step('next', value);
226
- },
227
- err => {
228
- step('throw', err);
229
- });
230
- }
231
- }
232
- return step('next');
233
- });
234
- })(function*(){
235
- return this._networkManager.setRequestInterception(value);
236
- });}
237
-
238
- /**
239
- * @param {boolean} enabled
240
- */
241
- setOfflineMode(enabled) {
242
- return this._networkManager.setOfflineMode(enabled);
243
- }
244
-
245
- /**
246
- * @param {number} timeout
247
- */
248
- setDefaultNavigationTimeout(timeout) {
249
- this._defaultNavigationTimeout = timeout;
250
- }
251
-
252
- /**
253
- * @param {!Protocol.Security.certificateErrorPayload} event
254
- */
255
- _onCertificateError(event) {
256
- if (!this._ignoreHTTPSErrors)
257
- return;
258
- this._client.send('Security.handleCertificateError', {
259
- eventId: event.eventId,
260
- action: 'continue'
261
- }).catch(debugError);
262
- }
263
-
264
- /**
265
- * @param {string} selector
266
- * @return {!Promise<?Puppeteer.ElementHandle>}
267
- */
268
- /* async */ $(selector) {return (fn => {
269
- const gen = fn.call(this);
270
- return new Promise((resolve, reject) => {
271
- function step(key, arg) {
272
- let info, value;
273
- try {
274
- info = gen[key](arg);
275
- value = info.value;
276
- } catch (error) {
277
- reject(error);
278
- return;
279
- }
280
- if (info.done) {
281
- resolve(value);
282
- } else {
283
- return Promise.resolve(value).then(
284
- value => {
285
- step('next', value);
286
- },
287
- err => {
288
- step('throw', err);
289
- });
290
- }
291
- }
292
- return step('next');
293
- });
294
- })(function*(){
295
- return this.mainFrame().$(selector);
296
- });}
297
-
298
- /**
299
- * @param {function()|string} pageFunction
300
- * @param {!Array<*>} args
301
- * @return {!Promise<!Puppeteer.JSHandle>}
302
- */
303
- /* async */ evaluateHandle(pageFunction, ...args) {return (fn => {
304
- const gen = fn.call(this);
305
- return new Promise((resolve, reject) => {
306
- function step(key, arg) {
307
- let info, value;
308
- try {
309
- info = gen[key](arg);
310
- value = info.value;
311
- } catch (error) {
312
- reject(error);
313
- return;
314
- }
315
- if (info.done) {
316
- resolve(value);
317
- } else {
318
- return Promise.resolve(value).then(
319
- value => {
320
- step('next', value);
321
- },
322
- err => {
323
- step('throw', err);
324
- });
325
- }
326
- }
327
- return step('next');
328
- });
329
- })(function*(){
330
- const context = (yield this.mainFrame().executionContext());
331
- return context.evaluateHandle(pageFunction, ...args);
332
- });}
333
-
334
- /**
335
- * @param {!Puppeteer.JSHandle} prototypeHandle
336
- * @return {!Promise<!Puppeteer.JSHandle>}
337
- */
338
- /* async */ queryObjects(prototypeHandle) {return (fn => {
339
- const gen = fn.call(this);
340
- return new Promise((resolve, reject) => {
341
- function step(key, arg) {
342
- let info, value;
343
- try {
344
- info = gen[key](arg);
345
- value = info.value;
346
- } catch (error) {
347
- reject(error);
348
- return;
349
- }
350
- if (info.done) {
351
- resolve(value);
352
- } else {
353
- return Promise.resolve(value).then(
354
- value => {
355
- step('next', value);
356
- },
357
- err => {
358
- step('throw', err);
359
- });
360
- }
361
- }
362
- return step('next');
363
- });
364
- })(function*(){
365
- const context = (yield this.mainFrame().executionContext());
366
- return context.queryObjects(prototypeHandle);
367
- });}
368
-
369
- /**
370
- * @param {string} selector
371
- * @param {function()|string} pageFunction
372
- * @param {!Array<*>} args
373
- * @return {!Promise<(!Object|undefined)>}
374
- */
375
- /* async */ $eval(selector, pageFunction, ...args) {return (fn => {
376
- const gen = fn.call(this);
377
- return new Promise((resolve, reject) => {
378
- function step(key, arg) {
379
- let info, value;
380
- try {
381
- info = gen[key](arg);
382
- value = info.value;
383
- } catch (error) {
384
- reject(error);
385
- return;
386
- }
387
- if (info.done) {
388
- resolve(value);
389
- } else {
390
- return Promise.resolve(value).then(
391
- value => {
392
- step('next', value);
393
- },
394
- err => {
395
- step('throw', err);
396
- });
397
- }
398
- }
399
- return step('next');
400
- });
401
- })(function*(){
402
- return this.mainFrame().$eval(selector, pageFunction, ...args);
403
- });}
404
-
405
- /**
406
- * @param {string} selector
407
- * @param {Function|string} pageFunction
408
- * @param {!Array<*>} args
409
- * @return {!Promise<(!Object|undefined)>}
410
- */
411
- /* async */ $$eval(selector, pageFunction, ...args) {return (fn => {
412
- const gen = fn.call(this);
413
- return new Promise((resolve, reject) => {
414
- function step(key, arg) {
415
- let info, value;
416
- try {
417
- info = gen[key](arg);
418
- value = info.value;
419
- } catch (error) {
420
- reject(error);
421
- return;
422
- }
423
- if (info.done) {
424
- resolve(value);
425
- } else {
426
- return Promise.resolve(value).then(
427
- value => {
428
- step('next', value);
429
- },
430
- err => {
431
- step('throw', err);
432
- });
433
- }
434
- }
435
- return step('next');
436
- });
437
- })(function*(){
438
- return this.mainFrame().$$eval(selector, pageFunction, ...args);
439
- });}
440
-
441
- /**
442
- * @param {string} selector
443
- * @return {!Promise<!Array<!Puppeteer.ElementHandle>>}
444
- */
445
- /* async */ $$(selector) {return (fn => {
446
- const gen = fn.call(this);
447
- return new Promise((resolve, reject) => {
448
- function step(key, arg) {
449
- let info, value;
450
- try {
451
- info = gen[key](arg);
452
- value = info.value;
453
- } catch (error) {
454
- reject(error);
455
- return;
456
- }
457
- if (info.done) {
458
- resolve(value);
459
- } else {
460
- return Promise.resolve(value).then(
461
- value => {
462
- step('next', value);
463
- },
464
- err => {
465
- step('throw', err);
466
- });
467
- }
468
- }
469
- return step('next');
470
- });
471
- })(function*(){
472
- return this.mainFrame().$$(selector);
473
- });}
474
-
475
- /**
476
- * @param {string} expression
477
- * @return {!Promise<!Array<!Puppeteer.ElementHandle>>}
478
- */
479
- /* async */ $x(expression) {return (fn => {
480
- const gen = fn.call(this);
481
- return new Promise((resolve, reject) => {
482
- function step(key, arg) {
483
- let info, value;
484
- try {
485
- info = gen[key](arg);
486
- value = info.value;
487
- } catch (error) {
488
- reject(error);
489
- return;
490
- }
491
- if (info.done) {
492
- resolve(value);
493
- } else {
494
- return Promise.resolve(value).then(
495
- value => {
496
- step('next', value);
497
- },
498
- err => {
499
- step('throw', err);
500
- });
501
- }
502
- }
503
- return step('next');
504
- });
505
- })(function*(){
506
- return this.mainFrame().$x(expression);
507
- });}
508
-
509
- /**
510
- * @param {!Array<string>} urls
511
- * @return {!Promise<!Array<Network.Cookie>>}
512
- */
513
- /* async */ cookies(...urls) {return (fn => {
514
- const gen = fn.call(this);
515
- return new Promise((resolve, reject) => {
516
- function step(key, arg) {
517
- let info, value;
518
- try {
519
- info = gen[key](arg);
520
- value = info.value;
521
- } catch (error) {
522
- reject(error);
523
- return;
524
- }
525
- if (info.done) {
526
- resolve(value);
527
- } else {
528
- return Promise.resolve(value).then(
529
- value => {
530
- step('next', value);
531
- },
532
- err => {
533
- step('throw', err);
534
- });
535
- }
536
- }
537
- return step('next');
538
- });
539
- })(function*(){
540
- return ((yield this._client.send('Network.getCookies', {
541
- urls: urls.length ? urls : [this.url()]
542
- }))).cookies;
543
- });}
544
-
545
- /**
546
- * @param {Array<Network.CookieParam>} cookies
547
- */
548
- /* async */ deleteCookie(...cookies) {return (fn => {
549
- const gen = fn.call(this);
550
- return new Promise((resolve, reject) => {
551
- function step(key, arg) {
552
- let info, value;
553
- try {
554
- info = gen[key](arg);
555
- value = info.value;
556
- } catch (error) {
557
- reject(error);
558
- return;
559
- }
560
- if (info.done) {
561
- resolve(value);
562
- } else {
563
- return Promise.resolve(value).then(
564
- value => {
565
- step('next', value);
566
- },
567
- err => {
568
- step('throw', err);
569
- });
570
- }
571
- }
572
- return step('next');
573
- });
574
- })(function*(){
575
- const pageURL = this.url();
576
- for (const cookie of cookies) {
577
- const item = Object.assign({}, cookie);
578
- if (!cookie.url && pageURL.startsWith('http'))
579
- item.url = pageURL;
580
- (yield this._client.send('Network.deleteCookies', item));
581
- }
582
- });}
583
-
584
- /**
585
- * @param {Array<Network.CookieParam>} cookies
586
- */
587
- /* async */ setCookie(...cookies) {return (fn => {
588
- const gen = fn.call(this);
589
- return new Promise((resolve, reject) => {
590
- function step(key, arg) {
591
- let info, value;
592
- try {
593
- info = gen[key](arg);
594
- value = info.value;
595
- } catch (error) {
596
- reject(error);
597
- return;
598
- }
599
- if (info.done) {
600
- resolve(value);
601
- } else {
602
- return Promise.resolve(value).then(
603
- value => {
604
- step('next', value);
605
- },
606
- err => {
607
- step('throw', err);
608
- });
609
- }
610
- }
611
- return step('next');
612
- });
613
- })(function*(){
614
- const pageURL = this.url();
615
- const startsWithHTTP = pageURL.startsWith('http');
616
- const items = cookies.map(cookie => {
617
- const item = Object.assign({}, cookie);
618
- if (!item.url && startsWithHTTP)
619
- item.url = pageURL;
620
- console.assert(
621
- item.url !== 'about:blank',
622
- `Blank page can not have cookie "${item.name}"`
623
- );
624
- console.assert(
625
- !String.prototype.startsWith.call(item.url || '', 'data:'),
626
- `Data URL page can not have cookie "${item.name}"`
627
- );
628
- return item;
629
- });
630
- (yield this.deleteCookie(...items));
631
- if (items.length)
632
- (yield this._client.send('Network.setCookies', { cookies: items }));
633
- });}
634
-
635
- /**
636
- * @param {Object} options
637
- * @return {!Promise<!Puppeteer.ElementHandle>}
638
- */
639
- /* async */ addScriptTag(options) {return (fn => {
640
- const gen = fn.call(this);
641
- return new Promise((resolve, reject) => {
642
- function step(key, arg) {
643
- let info, value;
644
- try {
645
- info = gen[key](arg);
646
- value = info.value;
647
- } catch (error) {
648
- reject(error);
649
- return;
650
- }
651
- if (info.done) {
652
- resolve(value);
653
- } else {
654
- return Promise.resolve(value).then(
655
- value => {
656
- step('next', value);
657
- },
658
- err => {
659
- step('throw', err);
660
- });
661
- }
662
- }
663
- return step('next');
664
- });
665
- })(function*(){
666
- return this.mainFrame().addScriptTag(options);
667
- });}
668
-
669
- /**
670
- * @param {Object} options
671
- * @return {!Promise<!Puppeteer.ElementHandle>}
672
- */
673
- /* async */ addStyleTag(options) {return (fn => {
674
- const gen = fn.call(this);
675
- return new Promise((resolve, reject) => {
676
- function step(key, arg) {
677
- let info, value;
678
- try {
679
- info = gen[key](arg);
680
- value = info.value;
681
- } catch (error) {
682
- reject(error);
683
- return;
684
- }
685
- if (info.done) {
686
- resolve(value);
687
- } else {
688
- return Promise.resolve(value).then(
689
- value => {
690
- step('next', value);
691
- },
692
- err => {
693
- step('throw', err);
694
- });
695
- }
696
- }
697
- return step('next');
698
- });
699
- })(function*(){
700
- return this.mainFrame().addStyleTag(options);
701
- });}
702
-
703
- /**
704
- * @param {string} name
705
- * @param {function(?)} puppeteerFunction
706
- */
707
- /* async */ exposeFunction(name, puppeteerFunction) {return (fn => {
708
- const gen = fn.call(this);
709
- return new Promise((resolve, reject) => {
710
- function step(key, arg) {
711
- let info, value;
712
- try {
713
- info = gen[key](arg);
714
- value = info.value;
715
- } catch (error) {
716
- reject(error);
717
- return;
718
- }
719
- if (info.done) {
720
- resolve(value);
721
- } else {
722
- return Promise.resolve(value).then(
723
- value => {
724
- step('next', value);
725
- },
726
- err => {
727
- step('throw', err);
728
- });
729
- }
730
- }
731
- return step('next');
732
- });
733
- })(function*(){
734
- if (this._pageBindings[name])
735
- throw new Error(`Failed to add page binding with name ${name}: window['${name}'] already exists!`);
736
- this._pageBindings[name] = puppeteerFunction;
737
-
738
- const expression = helper.evaluationString(addPageBinding, name);
739
- (yield this._client.send('Page.addScriptToEvaluateOnNewDocument', {source: expression}));
740
- (yield Promise.all(this.frames().map(frame => frame.evaluate(expression).catch(debugError))));
741
-
742
- function addPageBinding(bindingName) {
743
- window[bindingName] = /* async */(...args) => {return (fn => {
744
- const gen = fn.call(this);
745
- return new Promise((resolve, reject) => {
746
- function step(key, arg) {
747
- let info, value;
748
- try {
749
- info = gen[key](arg);
750
- value = info.value;
751
- } catch (error) {
752
- reject(error);
753
- return;
754
- }
755
- if (info.done) {
756
- resolve(value);
757
- } else {
758
- return Promise.resolve(value).then(
759
- value => {
760
- step('next', value);
761
- },
762
- err => {
763
- step('throw', err);
764
- });
765
- }
766
- }
767
- return step('next');
768
- });
769
- })(function*(){
770
- const me = window[bindingName];
771
- let callbacks = me['callbacks'];
772
- if (!callbacks) {
773
- callbacks = new Map();
774
- me['callbacks'] = callbacks;
775
- }
776
- const seq = (me['lastSeq'] || 0) + 1;
777
- me['lastSeq'] = seq;
778
- const promise = new Promise(fulfill => callbacks.set(seq, fulfill));
779
- // eslint-disable-next-line no-console
780
- console.debug('driver:page-binding', JSON.stringify({name: bindingName, seq, args}));
781
- return promise;
782
- });};
783
- }
784
- });}
785
-
786
- /**
787
- * @param {?{username: string, password: string}} credentials
788
- */
789
- /* async */ authenticate(credentials) {return (fn => {
790
- const gen = fn.call(this);
791
- return new Promise((resolve, reject) => {
792
- function step(key, arg) {
793
- let info, value;
794
- try {
795
- info = gen[key](arg);
796
- value = info.value;
797
- } catch (error) {
798
- reject(error);
799
- return;
800
- }
801
- if (info.done) {
802
- resolve(value);
803
- } else {
804
- return Promise.resolve(value).then(
805
- value => {
806
- step('next', value);
807
- },
808
- err => {
809
- step('throw', err);
810
- });
811
- }
812
- }
813
- return step('next');
814
- });
815
- })(function*(){
816
- return this._networkManager.authenticate(credentials);
817
- });}
818
-
819
- /**
820
- * @param {!Object<string, string>} headers
821
- */
822
- /* async */ setExtraHTTPHeaders(headers) {return (fn => {
823
- const gen = fn.call(this);
824
- return new Promise((resolve, reject) => {
825
- function step(key, arg) {
826
- let info, value;
827
- try {
828
- info = gen[key](arg);
829
- value = info.value;
830
- } catch (error) {
831
- reject(error);
832
- return;
833
- }
834
- if (info.done) {
835
- resolve(value);
836
- } else {
837
- return Promise.resolve(value).then(
838
- value => {
839
- step('next', value);
840
- },
841
- err => {
842
- step('throw', err);
843
- });
844
- }
845
- }
846
- return step('next');
847
- });
848
- })(function*(){
849
- return this._networkManager.setExtraHTTPHeaders(headers);
850
- });}
851
-
852
- /**
853
- * @param {string} userAgent
854
- */
855
- /* async */ setUserAgent(userAgent) {return (fn => {
856
- const gen = fn.call(this);
857
- return new Promise((resolve, reject) => {
858
- function step(key, arg) {
859
- let info, value;
860
- try {
861
- info = gen[key](arg);
862
- value = info.value;
863
- } catch (error) {
864
- reject(error);
865
- return;
866
- }
867
- if (info.done) {
868
- resolve(value);
869
- } else {
870
- return Promise.resolve(value).then(
871
- value => {
872
- step('next', value);
873
- },
874
- err => {
875
- step('throw', err);
876
- });
877
- }
878
- }
879
- return step('next');
880
- });
881
- })(function*(){
882
- return this._networkManager.setUserAgent(userAgent);
883
- });}
884
-
885
- /**
886
- * @return {!Promise<!Object>}
887
- */
888
- /* async */ metrics() {return (fn => {
889
- const gen = fn.call(this);
890
- return new Promise((resolve, reject) => {
891
- function step(key, arg) {
892
- let info, value;
893
- try {
894
- info = gen[key](arg);
895
- value = info.value;
896
- } catch (error) {
897
- reject(error);
898
- return;
899
- }
900
- if (info.done) {
901
- resolve(value);
902
- } else {
903
- return Promise.resolve(value).then(
904
- value => {
905
- step('next', value);
906
- },
907
- err => {
908
- step('throw', err);
909
- });
910
- }
911
- }
912
- return step('next');
913
- });
914
- })(function*(){
915
- const response = (yield this._client.send('Performance.getMetrics'));
916
- return this._buildMetricsObject(response.metrics);
917
- });}
918
-
919
- /**
920
- * @param {*} event
921
- */
922
- _emitMetrics(event) {
923
- this.emit(Page.Events.Metrics, {
924
- title: event.title,
925
- metrics: this._buildMetricsObject(event.metrics)
926
- });
927
- }
928
-
929
- /**
930
- * @param {?Array<!Protocol.Performance.Metric>} metrics
931
- * @return {!Object}
932
- */
933
- _buildMetricsObject(metrics) {
934
- const result = {};
935
- for (const metric of metrics || []) {
936
- if (supportedMetrics.has(metric.name))
937
- result[metric.name] = metric.value;
938
- }
939
- return result;
940
- }
941
-
942
- /**
943
- * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails
944
- */
945
- _handleException(exceptionDetails) {
946
- const message = helper.getExceptionMessage(exceptionDetails);
947
- this.emit(Page.Events.PageError, new Error(message));
948
- }
949
-
950
- /* async */ _onConsoleAPI(event) {return (fn => {
951
- const gen = fn.call(this);
952
- return new Promise((resolve, reject) => {
953
- function step(key, arg) {
954
- let info, value;
955
- try {
956
- info = gen[key](arg);
957
- value = info.value;
958
- } catch (error) {
959
- reject(error);
960
- return;
961
- }
962
- if (info.done) {
963
- resolve(value);
964
- } else {
965
- return Promise.resolve(value).then(
966
- value => {
967
- step('next', value);
968
- },
969
- err => {
970
- step('throw', err);
971
- });
972
- }
973
- }
974
- return step('next');
975
- });
976
- })(function*(){
977
- if (event.type === 'debug' && event.args.length && event.args[0].value === 'driver:page-binding') {
978
- const {name, seq, args} = JSON.parse(event.args[1].value);
979
- const result = (yield this._pageBindings[name](...args));
980
- const expression = helper.evaluationString(deliverResult, name, seq, result);
981
- this._client.send('Runtime.evaluate', { expression, contextId: event.executionContextId }).catch(debugError);
982
-
983
- function deliverResult(name, seq, result) {
984
- window[name]['callbacks'].get(seq)(result);
985
- window[name]['callbacks'].delete(seq);
986
- }
987
- return;
988
- }
989
- if (!this.listenerCount(Page.Events.Console)) {
990
- event.args.map(arg => helper.releaseObject(this._client, arg));
991
- return;
992
- }
993
- const values = event.args.map(arg => this._frameManager.createJSHandle(event.executionContextId, arg));
994
- const textTokens = [];
995
- for (let i = 0; i < event.args.length; ++i) {
996
- const remoteObject = event.args[i];
997
- if (remoteObject.objectId)
998
- textTokens.push(values[i].toString());
999
- else
1000
- textTokens.push(helper.valueFromRemoteObject(remoteObject));
1001
- }
1002
- const message = new ConsoleMessage(event.type, textTokens.join(' '), values);
1003
- this.emit(Page.Events.Console, message);
1004
- });}
1005
-
1006
- _onDialog(event) {
1007
- let dialogType = null;
1008
- if (event.type === 'alert')
1009
- dialogType = Dialog.Type.Alert;
1010
- else if (event.type === 'confirm')
1011
- dialogType = Dialog.Type.Confirm;
1012
- else if (event.type === 'prompt')
1013
- dialogType = Dialog.Type.Prompt;
1014
- else if (event.type === 'beforeunload')
1015
- dialogType = Dialog.Type.BeforeUnload;
1016
- console.assert(dialogType, 'Unknown javascript dialog type: ' + event.type);
1017
- const dialog = new Dialog(this._client, dialogType, event.message, event.defaultPrompt);
1018
- this.emit(Page.Events.Dialog, dialog);
1019
- }
1020
-
1021
- /**
1022
- * @return {!string}
1023
- */
1024
- url() {
1025
- return this.mainFrame().url();
1026
- }
1027
-
1028
- /**
1029
- * @return {!Promise<String>}
1030
- */
1031
- /* async */ content() {return (fn => {
1032
- const gen = fn.call(this);
1033
- return new Promise((resolve, reject) => {
1034
- function step(key, arg) {
1035
- let info, value;
1036
- try {
1037
- info = gen[key](arg);
1038
- value = info.value;
1039
- } catch (error) {
1040
- reject(error);
1041
- return;
1042
- }
1043
- if (info.done) {
1044
- resolve(value);
1045
- } else {
1046
- return Promise.resolve(value).then(
1047
- value => {
1048
- step('next', value);
1049
- },
1050
- err => {
1051
- step('throw', err);
1052
- });
1053
- }
1054
- }
1055
- return step('next');
1056
- });
1057
- })(function*(){
1058
- return (yield this._frameManager.mainFrame().content());
1059
- });}
1060
-
1061
- /**
1062
- * @param {string} html
1063
- */
1064
- /* async */ setContent(html) {return (fn => {
1065
- const gen = fn.call(this);
1066
- return new Promise((resolve, reject) => {
1067
- function step(key, arg) {
1068
- let info, value;
1069
- try {
1070
- info = gen[key](arg);
1071
- value = info.value;
1072
- } catch (error) {
1073
- reject(error);
1074
- return;
1075
- }
1076
- if (info.done) {
1077
- resolve(value);
1078
- } else {
1079
- return Promise.resolve(value).then(
1080
- value => {
1081
- step('next', value);
1082
- },
1083
- err => {
1084
- step('throw', err);
1085
- });
1086
- }
1087
- }
1088
- return step('next');
1089
- });
1090
- })(function*(){
1091
- (yield this._frameManager.mainFrame().setContent(html));
1092
- });}
1093
-
1094
- /**
1095
- * @param {string} url
1096
- * @param {!Object=} options
1097
- * @return {!Promise<?Puppeteer.Response>}
1098
- */
1099
- /* async */ goto(url, options = {}) {return (fn => {
1100
- const gen = fn.call(this);
1101
- return new Promise((resolve, reject) => {
1102
- function step(key, arg) {
1103
- let info, value;
1104
- try {
1105
- info = gen[key](arg);
1106
- value = info.value;
1107
- } catch (error) {
1108
- reject(error);
1109
- return;
1110
- }
1111
- if (info.done) {
1112
- resolve(value);
1113
- } else {
1114
- return Promise.resolve(value).then(
1115
- value => {
1116
- step('next', value);
1117
- },
1118
- err => {
1119
- step('throw', err);
1120
- });
1121
- }
1122
- }
1123
- return step('next');
1124
- });
1125
- })(function*(){
1126
- const referrer = this._networkManager.extraHTTPHeaders()['referer'];
1127
-
1128
- /** @type {Map<string, !Puppeteer.Request>} */
1129
- const requests = new Map();
1130
- const eventListeners = [
1131
- helper.addEventListener(this._networkManager, NetworkManager.Events.Request, request => {
1132
- if (!requests.get(request.url()))
1133
- requests.set(request.url(), request);
1134
- })
1135
- ];
1136
-
1137
- const mainFrame = this._frameManager.mainFrame();
1138
- const timeout = typeof options.timeout === 'number' ? options.timeout : this._defaultNavigationTimeout;
1139
- const watcher = new NavigatorWatcher(this._frameManager, mainFrame, timeout, options);
1140
- const navigationPromise = watcher.navigationPromise();
1141
- let error = (yield Promise.race([
1142
- navigate(this._client, url, referrer),
1143
- navigationPromise,
1144
- ]));
1145
- if (!error)
1146
- error = (yield navigationPromise);
1147
- watcher.cancel();
1148
- helper.removeEventListeners(eventListeners);
1149
- if (error)
1150
- throw error;
1151
- const request = requests.get(mainFrame._navigationURL);
1152
- return request ? request.response() : null;
1153
-
1154
- /**
1155
- * @param {!Puppeteer.CDPSession} client
1156
- * @param {string} url
1157
- * @param {string} referrer
1158
- * @return {!Promise<?Error>}
1159
- */
1160
- /* async */ function navigate(client, url, referrer) {return (fn => {
1161
- const gen = fn.call(this);
1162
- return new Promise((resolve, reject) => {
1163
- function step(key, arg) {
1164
- let info, value;
1165
- try {
1166
- info = gen[key](arg);
1167
- value = info.value;
1168
- } catch (error) {
1169
- reject(error);
1170
- return;
1171
- }
1172
- if (info.done) {
1173
- resolve(value);
1174
- } else {
1175
- return Promise.resolve(value).then(
1176
- value => {
1177
- step('next', value);
1178
- },
1179
- err => {
1180
- step('throw', err);
1181
- });
1182
- }
1183
- }
1184
- return step('next');
1185
- });
1186
- })(function*(){
1187
- try {
1188
- const response = (yield client.send('Page.navigate', {url, referrer}));
1189
- return response.errorText ? new Error(`${response.errorText} at ${url}`) : null;
1190
- } catch (error) {
1191
- return error;
1192
- }
1193
- });}
1194
- });}
1195
-
1196
- /**
1197
- * @param {!Object=} options
1198
- * @return {!Promise<?Puppeteer.Response>}
1199
- */
1200
- /* async */ reload(options) {return (fn => {
1201
- const gen = fn.call(this);
1202
- return new Promise((resolve, reject) => {
1203
- function step(key, arg) {
1204
- let info, value;
1205
- try {
1206
- info = gen[key](arg);
1207
- value = info.value;
1208
- } catch (error) {
1209
- reject(error);
1210
- return;
1211
- }
1212
- if (info.done) {
1213
- resolve(value);
1214
- } else {
1215
- return Promise.resolve(value).then(
1216
- value => {
1217
- step('next', value);
1218
- },
1219
- err => {
1220
- step('throw', err);
1221
- });
1222
- }
1223
- }
1224
- return step('next');
1225
- });
1226
- })(function*(){
1227
- const [response] = (yield Promise.all([
1228
- this.waitForNavigation(options),
1229
- this._client.send('Page.reload')
1230
- ]));
1231
- return response;
1232
- });}
1233
-
1234
- /**
1235
- * @param {!Object=} options
1236
- * @return {!Promise<!Puppeteer.Response>}
1237
- */
1238
- /* async */ waitForNavigation(options = {}) {return (fn => {
1239
- const gen = fn.call(this);
1240
- return new Promise((resolve, reject) => {
1241
- function step(key, arg) {
1242
- let info, value;
1243
- try {
1244
- info = gen[key](arg);
1245
- value = info.value;
1246
- } catch (error) {
1247
- reject(error);
1248
- return;
1249
- }
1250
- if (info.done) {
1251
- resolve(value);
1252
- } else {
1253
- return Promise.resolve(value).then(
1254
- value => {
1255
- step('next', value);
1256
- },
1257
- err => {
1258
- step('throw', err);
1259
- });
1260
- }
1261
- }
1262
- return step('next');
1263
- });
1264
- })(function*(){
1265
- const mainFrame = this._frameManager.mainFrame();
1266
- const timeout = typeof options.timeout === 'number' ? options.timeout : this._defaultNavigationTimeout;
1267
- const watcher = new NavigatorWatcher(this._frameManager, mainFrame, timeout, options);
1268
-
1269
- const responses = new Map();
1270
- const listener = helper.addEventListener(this._networkManager, NetworkManager.Events.Response, response => responses.set(response.url(), response));
1271
- const error = (yield watcher.navigationPromise());
1272
- helper.removeEventListeners([listener]);
1273
- if (error)
1274
- throw error;
1275
- return responses.get(this.mainFrame().url()) || null;
1276
- });}
1277
-
1278
- /**
1279
- * @param {!Object=} options
1280
- * @return {!Promise<?Puppeteer.Response>}
1281
- */
1282
- /* async */ goBack(options) {return (fn => {
1283
- const gen = fn.call(this);
1284
- return new Promise((resolve, reject) => {
1285
- function step(key, arg) {
1286
- let info, value;
1287
- try {
1288
- info = gen[key](arg);
1289
- value = info.value;
1290
- } catch (error) {
1291
- reject(error);
1292
- return;
1293
- }
1294
- if (info.done) {
1295
- resolve(value);
1296
- } else {
1297
- return Promise.resolve(value).then(
1298
- value => {
1299
- step('next', value);
1300
- },
1301
- err => {
1302
- step('throw', err);
1303
- });
1304
- }
1305
- }
1306
- return step('next');
1307
- });
1308
- })(function*(){
1309
- return this._go(-1, options);
1310
- });}
1311
-
1312
- /**
1313
- * @param {!Object=} options
1314
- * @return {!Promise<?Puppeteer.Response>}
1315
- */
1316
- /* async */ goForward(options) {return (fn => {
1317
- const gen = fn.call(this);
1318
- return new Promise((resolve, reject) => {
1319
- function step(key, arg) {
1320
- let info, value;
1321
- try {
1322
- info = gen[key](arg);
1323
- value = info.value;
1324
- } catch (error) {
1325
- reject(error);
1326
- return;
1327
- }
1328
- if (info.done) {
1329
- resolve(value);
1330
- } else {
1331
- return Promise.resolve(value).then(
1332
- value => {
1333
- step('next', value);
1334
- },
1335
- err => {
1336
- step('throw', err);
1337
- });
1338
- }
1339
- }
1340
- return step('next');
1341
- });
1342
- })(function*(){
1343
- return this._go(+1, options);
1344
- });}
1345
-
1346
- /**
1347
- * @param {!Object=} options
1348
- * @return {!Promise<?Puppeteer.Response>}
1349
- */
1350
- /* async */ _go(delta, options) {return (fn => {
1351
- const gen = fn.call(this);
1352
- return new Promise((resolve, reject) => {
1353
- function step(key, arg) {
1354
- let info, value;
1355
- try {
1356
- info = gen[key](arg);
1357
- value = info.value;
1358
- } catch (error) {
1359
- reject(error);
1360
- return;
1361
- }
1362
- if (info.done) {
1363
- resolve(value);
1364
- } else {
1365
- return Promise.resolve(value).then(
1366
- value => {
1367
- step('next', value);
1368
- },
1369
- err => {
1370
- step('throw', err);
1371
- });
1372
- }
1373
- }
1374
- return step('next');
1375
- });
1376
- })(function*(){
1377
- const history = (yield this._client.send('Page.getNavigationHistory'));
1378
- const entry = history.entries[history.currentIndex + delta];
1379
- if (!entry)
1380
- return null;
1381
- const [response] = (yield Promise.all([
1382
- this.waitForNavigation(options),
1383
- this._client.send('Page.navigateToHistoryEntry', {entryId: entry.id}),
1384
- ]));
1385
- return response;
1386
- });}
1387
-
1388
- /* async */ bringToFront() {return (fn => {
1389
- const gen = fn.call(this);
1390
- return new Promise((resolve, reject) => {
1391
- function step(key, arg) {
1392
- let info, value;
1393
- try {
1394
- info = gen[key](arg);
1395
- value = info.value;
1396
- } catch (error) {
1397
- reject(error);
1398
- return;
1399
- }
1400
- if (info.done) {
1401
- resolve(value);
1402
- } else {
1403
- return Promise.resolve(value).then(
1404
- value => {
1405
- step('next', value);
1406
- },
1407
- err => {
1408
- step('throw', err);
1409
- });
1410
- }
1411
- }
1412
- return step('next');
1413
- });
1414
- })(function*(){
1415
- (yield this._client.send('Page.bringToFront'));
1416
- });}
1417
-
1418
- /**
1419
- * @param {!Object} options
1420
- */
1421
- /* async */ emulate(options) {return (fn => {
1422
- const gen = fn.call(this);
1423
- return new Promise((resolve, reject) => {
1424
- function step(key, arg) {
1425
- let info, value;
1426
- try {
1427
- info = gen[key](arg);
1428
- value = info.value;
1429
- } catch (error) {
1430
- reject(error);
1431
- return;
1432
- }
1433
- if (info.done) {
1434
- resolve(value);
1435
- } else {
1436
- return Promise.resolve(value).then(
1437
- value => {
1438
- step('next', value);
1439
- },
1440
- err => {
1441
- step('throw', err);
1442
- });
1443
- }
1444
- }
1445
- return step('next');
1446
- });
1447
- })(function*(){
1448
- return Promise.all([
1449
- this.setViewport(options.viewport),
1450
- this.setUserAgent(options.userAgent)
1451
- ]);
1452
- });}
1453
-
1454
- /**
1455
- * @param {boolean} enabled
1456
- */
1457
- /* async */ setJavaScriptEnabled(enabled) {return (fn => {
1458
- const gen = fn.call(this);
1459
- return new Promise((resolve, reject) => {
1460
- function step(key, arg) {
1461
- let info, value;
1462
- try {
1463
- info = gen[key](arg);
1464
- value = info.value;
1465
- } catch (error) {
1466
- reject(error);
1467
- return;
1468
- }
1469
- if (info.done) {
1470
- resolve(value);
1471
- } else {
1472
- return Promise.resolve(value).then(
1473
- value => {
1474
- step('next', value);
1475
- },
1476
- err => {
1477
- step('throw', err);
1478
- });
1479
- }
1480
- }
1481
- return step('next');
1482
- });
1483
- })(function*(){
1484
- (yield this._client.send('Emulation.setScriptExecutionDisabled', { value: !enabled }));
1485
- });}
1486
-
1487
- /**
1488
- * @param {boolean} enabled
1489
- */
1490
- /* async */ setBypassCSP(enabled) {return (fn => {
1491
- const gen = fn.call(this);
1492
- return new Promise((resolve, reject) => {
1493
- function step(key, arg) {
1494
- let info, value;
1495
- try {
1496
- info = gen[key](arg);
1497
- value = info.value;
1498
- } catch (error) {
1499
- reject(error);
1500
- return;
1501
- }
1502
- if (info.done) {
1503
- resolve(value);
1504
- } else {
1505
- return Promise.resolve(value).then(
1506
- value => {
1507
- step('next', value);
1508
- },
1509
- err => {
1510
- step('throw', err);
1511
- });
1512
- }
1513
- }
1514
- return step('next');
1515
- });
1516
- })(function*(){
1517
- (yield this._client.send('Page.setBypassCSP', { enabled }));
1518
- });}
1519
-
1520
- /**
1521
- * @param {?string} mediaType
1522
- */
1523
- /* async */ emulateMedia(mediaType) {return (fn => {
1524
- const gen = fn.call(this);
1525
- return new Promise((resolve, reject) => {
1526
- function step(key, arg) {
1527
- let info, value;
1528
- try {
1529
- info = gen[key](arg);
1530
- value = info.value;
1531
- } catch (error) {
1532
- reject(error);
1533
- return;
1534
- }
1535
- if (info.done) {
1536
- resolve(value);
1537
- } else {
1538
- return Promise.resolve(value).then(
1539
- value => {
1540
- step('next', value);
1541
- },
1542
- err => {
1543
- step('throw', err);
1544
- });
1545
- }
1546
- }
1547
- return step('next');
1548
- });
1549
- })(function*(){
1550
- console.assert(mediaType === 'screen' || mediaType === 'print' || mediaType === null, 'Unsupported media type: ' + mediaType);
1551
- (yield this._client.send('Emulation.setEmulatedMedia', {media: mediaType || ''}));
1552
- });}
1553
-
1554
- /**
1555
- * @param {!Page.Viewport} viewport
1556
- */
1557
- /* async */ setViewport(viewport) {return (fn => {
1558
- const gen = fn.call(this);
1559
- return new Promise((resolve, reject) => {
1560
- function step(key, arg) {
1561
- let info, value;
1562
- try {
1563
- info = gen[key](arg);
1564
- value = info.value;
1565
- } catch (error) {
1566
- reject(error);
1567
- return;
1568
- }
1569
- if (info.done) {
1570
- resolve(value);
1571
- } else {
1572
- return Promise.resolve(value).then(
1573
- value => {
1574
- step('next', value);
1575
- },
1576
- err => {
1577
- step('throw', err);
1578
- });
1579
- }
1580
- }
1581
- return step('next');
1582
- });
1583
- })(function*(){
1584
- const needsReload = (yield this._emulationManager.emulateViewport(viewport));
1585
- this._viewport = viewport;
1586
- if (needsReload)
1587
- (yield this.reload());
1588
- });}
1589
-
1590
- /**
1591
- * @return {!Page.Viewport}
1592
- */
1593
- viewport() {
1594
- return this._viewport;
1595
- }
1596
-
1597
- /**
1598
- * @param {function()|string} pageFunction
1599
- * @param {!Array<*>} args
1600
- * @return {!Promise<*>}
1601
- */
1602
- /* async */ evaluate(pageFunction, ...args) {return (fn => {
1603
- const gen = fn.call(this);
1604
- return new Promise((resolve, reject) => {
1605
- function step(key, arg) {
1606
- let info, value;
1607
- try {
1608
- info = gen[key](arg);
1609
- value = info.value;
1610
- } catch (error) {
1611
- reject(error);
1612
- return;
1613
- }
1614
- if (info.done) {
1615
- resolve(value);
1616
- } else {
1617
- return Promise.resolve(value).then(
1618
- value => {
1619
- step('next', value);
1620
- },
1621
- err => {
1622
- step('throw', err);
1623
- });
1624
- }
1625
- }
1626
- return step('next');
1627
- });
1628
- })(function*(){
1629
- return this._frameManager.mainFrame().evaluate(pageFunction, ...args);
1630
- });}
1631
-
1632
- /**
1633
- * @param {function()|string} pageFunction
1634
- * @param {!Array<*>} args
1635
- */
1636
- /* async */ evaluateOnNewDocument(pageFunction, ...args) {return (fn => {
1637
- const gen = fn.call(this);
1638
- return new Promise((resolve, reject) => {
1639
- function step(key, arg) {
1640
- let info, value;
1641
- try {
1642
- info = gen[key](arg);
1643
- value = info.value;
1644
- } catch (error) {
1645
- reject(error);
1646
- return;
1647
- }
1648
- if (info.done) {
1649
- resolve(value);
1650
- } else {
1651
- return Promise.resolve(value).then(
1652
- value => {
1653
- step('next', value);
1654
- },
1655
- err => {
1656
- step('throw', err);
1657
- });
1658
- }
1659
- }
1660
- return step('next');
1661
- });
1662
- })(function*(){
1663
- const source = helper.evaluationString(pageFunction, ...args);
1664
- (yield this._client.send('Page.addScriptToEvaluateOnNewDocument', { source }));
1665
- });}
1666
-
1667
- /**
1668
- * @param {Boolean} enabled
1669
- * @returns {!Promise}
1670
- */
1671
- /* async */ setCacheEnabled(enabled = true) {return (fn => {
1672
- const gen = fn.call(this);
1673
- return new Promise((resolve, reject) => {
1674
- function step(key, arg) {
1675
- let info, value;
1676
- try {
1677
- info = gen[key](arg);
1678
- value = info.value;
1679
- } catch (error) {
1680
- reject(error);
1681
- return;
1682
- }
1683
- if (info.done) {
1684
- resolve(value);
1685
- } else {
1686
- return Promise.resolve(value).then(
1687
- value => {
1688
- step('next', value);
1689
- },
1690
- err => {
1691
- step('throw', err);
1692
- });
1693
- }
1694
- }
1695
- return step('next');
1696
- });
1697
- })(function*(){
1698
- (yield this._client.send('Network.setCacheDisabled', {cacheDisabled: !enabled}));
1699
- });}
1700
-
1701
- /**
1702
- * @param {!Object=} options
1703
- * @return {!Promise<!Buffer>}
1704
- */
1705
- /* async */ screenshot(options = {}) {return (fn => {
1706
- const gen = fn.call(this);
1707
- return new Promise((resolve, reject) => {
1708
- function step(key, arg) {
1709
- let info, value;
1710
- try {
1711
- info = gen[key](arg);
1712
- value = info.value;
1713
- } catch (error) {
1714
- reject(error);
1715
- return;
1716
- }
1717
- if (info.done) {
1718
- resolve(value);
1719
- } else {
1720
- return Promise.resolve(value).then(
1721
- value => {
1722
- step('next', value);
1723
- },
1724
- err => {
1725
- step('throw', err);
1726
- });
1727
- }
1728
- }
1729
- return step('next');
1730
- });
1731
- })(function*(){
1732
- let screenshotType = null;
1733
- // options.type takes precedence over inferring the type from options.path
1734
- // because it may be a 0-length file with no extension created beforehand (i.e. as a temp file).
1735
- if (options.type) {
1736
- console.assert(options.type === 'png' || options.type === 'jpeg', 'Unknown options.type value: ' + options.type);
1737
- screenshotType = options.type;
1738
- } else if (options.path) {
1739
- const mimeType = mime.getType(options.path);
1740
- if (mimeType === 'image/png')
1741
- screenshotType = 'png';
1742
- else if (mimeType === 'image/jpeg')
1743
- screenshotType = 'jpeg';
1744
- console.assert(screenshotType, 'Unsupported screenshot mime type: ' + mimeType);
1745
- }
1746
-
1747
- if (!screenshotType)
1748
- screenshotType = 'png';
1749
-
1750
- if (options.quality) {
1751
- console.assert(screenshotType === 'jpeg', 'options.quality is unsupported for the ' + screenshotType + ' screenshots');
1752
- console.assert(typeof options.quality === 'number', 'Expected options.quality to be a number but found ' + (typeof options.quality));
1753
- console.assert(Number.isInteger(options.quality), 'Expected options.quality to be an integer');
1754
- console.assert(options.quality >= 0 && options.quality <= 100, 'Expected options.quality to be between 0 and 100 (inclusive), got ' + options.quality);
1755
- }
1756
- console.assert(!options.clip || !options.fullPage, 'options.clip and options.fullPage are exclusive');
1757
- if (options.clip) {
1758
- console.assert(typeof options.clip.x === 'number', 'Expected options.clip.x to be a number but found ' + (typeof options.clip.x));
1759
- console.assert(typeof options.clip.y === 'number', 'Expected options.clip.y to be a number but found ' + (typeof options.clip.y));
1760
- console.assert(typeof options.clip.width === 'number', 'Expected options.clip.width to be a number but found ' + (typeof options.clip.width));
1761
- console.assert(typeof options.clip.height === 'number', 'Expected options.clip.height to be a number but found ' + (typeof options.clip.height));
1762
- }
1763
- return this._screenshotTaskQueue.postTask(this._screenshotTask.bind(this, screenshotType, options));
1764
- });}
1765
-
1766
- /**
1767
- * @param {"png"|"jpeg"} format
1768
- * @param {!Object=} options
1769
- * @return {!Promise<!Buffer>}
1770
- */
1771
- /* async */ _screenshotTask(format, options) {return (fn => {
1772
- const gen = fn.call(this);
1773
- return new Promise((resolve, reject) => {
1774
- function step(key, arg) {
1775
- let info, value;
1776
- try {
1777
- info = gen[key](arg);
1778
- value = info.value;
1779
- } catch (error) {
1780
- reject(error);
1781
- return;
1782
- }
1783
- if (info.done) {
1784
- resolve(value);
1785
- } else {
1786
- return Promise.resolve(value).then(
1787
- value => {
1788
- step('next', value);
1789
- },
1790
- err => {
1791
- step('throw', err);
1792
- });
1793
- }
1794
- }
1795
- return step('next');
1796
- });
1797
- })(function*(){
1798
- (yield this._client.send('Target.activateTarget', {targetId: this._target._targetId}));
1799
- let clip = options.clip ? Object.assign({}, options['clip']) : undefined;
1800
- if (clip)
1801
- clip.scale = 1;
1802
-
1803
- if (options.fullPage) {
1804
- const metrics = (yield this._client.send('Page.getLayoutMetrics'));
1805
- const width = Math.ceil(metrics.contentSize.width);
1806
- const height = Math.ceil(metrics.contentSize.height);
1807
-
1808
- // Overwrite clip for full page at all times.
1809
- clip = { x: 0, y: 0, width, height, scale: 1 };
1810
- const mobile = this._viewport.isMobile || false;
1811
- const deviceScaleFactor = this._viewport.deviceScaleFactor || 1;
1812
- const landscape = this._viewport.isLandscape || false;
1813
- /** @type {!Protocol.Emulation.ScreenOrientation} */
1814
- const screenOrientation = landscape ? { angle: 90, type: 'landscapePrimary' } : { angle: 0, type: 'portraitPrimary' };
1815
- (yield this._client.send('Emulation.setDeviceMetricsOverride', { mobile, width, height, deviceScaleFactor, screenOrientation }));
1816
- }
1817
-
1818
- if (options.omitBackground)
1819
- (yield this._client.send('Emulation.setDefaultBackgroundColorOverride', { color: { r: 0, g: 0, b: 0, a: 0 } }));
1820
- const result = (yield this._client.send('Page.captureScreenshot', { format, quality: options.quality, clip }));
1821
- if (options.omitBackground)
1822
- (yield this._client.send('Emulation.setDefaultBackgroundColorOverride'));
1823
-
1824
- if (options.fullPage)
1825
- (yield this.setViewport(this._viewport));
1826
-
1827
- const buffer = Buffer.from(result.data, 'base64');
1828
- if (options.path)
1829
- (yield writeFileAsync(options.path, buffer));
1830
- return buffer;
1831
- });}
1832
-
1833
- /**
1834
- * @param {!Object=} options
1835
- * @return {!Promise<!Buffer>}
1836
- */
1837
- /* async */ pdf(options = {}) {return (fn => {
1838
- const gen = fn.call(this);
1839
- return new Promise((resolve, reject) => {
1840
- function step(key, arg) {
1841
- let info, value;
1842
- try {
1843
- info = gen[key](arg);
1844
- value = info.value;
1845
- } catch (error) {
1846
- reject(error);
1847
- return;
1848
- }
1849
- if (info.done) {
1850
- resolve(value);
1851
- } else {
1852
- return Promise.resolve(value).then(
1853
- value => {
1854
- step('next', value);
1855
- },
1856
- err => {
1857
- step('throw', err);
1858
- });
1859
- }
1860
- }
1861
- return step('next');
1862
- });
1863
- })(function*(){
1864
- const scale = options.scale || 1;
1865
- const displayHeaderFooter = !!options.displayHeaderFooter;
1866
- const headerTemplate = options.headerTemplate || '';
1867
- const footerTemplate = options.footerTemplate || '';
1868
- const printBackground = !!options.printBackground;
1869
- const landscape = !!options.landscape;
1870
- const pageRanges = options.pageRanges || '';
1871
-
1872
- let paperWidth = 8.5;
1873
- let paperHeight = 11;
1874
- if (options.format) {
1875
- const format = Page.PaperFormats[options.format.toLowerCase()];
1876
- console.assert(format, 'Unknown paper format: ' + options.format);
1877
- paperWidth = format.width;
1878
- paperHeight = format.height;
1879
- } else {
1880
- paperWidth = convertPrintParameterToInches(options.width) || paperWidth;
1881
- paperHeight = convertPrintParameterToInches(options.height) || paperHeight;
1882
- }
1883
-
1884
- const marginOptions = options.margin || {};
1885
- const marginTop = convertPrintParameterToInches(marginOptions.top) || 0;
1886
- const marginLeft = convertPrintParameterToInches(marginOptions.left) || 0;
1887
- const marginBottom = convertPrintParameterToInches(marginOptions.bottom) || 0;
1888
- const marginRight = convertPrintParameterToInches(marginOptions.right) || 0;
1889
-
1890
- const result = (yield this._client.send('Page.printToPDF', {
1891
- landscape: landscape,
1892
- displayHeaderFooter: displayHeaderFooter,
1893
- headerTemplate: headerTemplate,
1894
- footerTemplate: footerTemplate,
1895
- printBackground: printBackground,
1896
- scale: scale,
1897
- paperWidth: paperWidth,
1898
- paperHeight: paperHeight,
1899
- marginTop: marginTop,
1900
- marginBottom: marginBottom,
1901
- marginLeft: marginLeft,
1902
- marginRight: marginRight,
1903
- pageRanges: pageRanges
1904
- }));
1905
- const buffer = Buffer.from(result.data, 'base64');
1906
- if (options.path)
1907
- (yield writeFileAsync(options.path, buffer));
1908
- return buffer;
1909
- });}
1910
-
1911
- /**
1912
- * @return {!Promise<string>}
1913
- */
1914
- /* async */ title() {return (fn => {
1915
- const gen = fn.call(this);
1916
- return new Promise((resolve, reject) => {
1917
- function step(key, arg) {
1918
- let info, value;
1919
- try {
1920
- info = gen[key](arg);
1921
- value = info.value;
1922
- } catch (error) {
1923
- reject(error);
1924
- return;
1925
- }
1926
- if (info.done) {
1927
- resolve(value);
1928
- } else {
1929
- return Promise.resolve(value).then(
1930
- value => {
1931
- step('next', value);
1932
- },
1933
- err => {
1934
- step('throw', err);
1935
- });
1936
- }
1937
- }
1938
- return step('next');
1939
- });
1940
- })(function*(){
1941
- return this.mainFrame().title();
1942
- });}
1943
-
1944
- /**
1945
- * @param {!{runBeforeUnload: (boolean|undefined)}=} options
1946
- */
1947
- /* async */ close(options = {runBeforeUnload: undefined}) {return (fn => {
1948
- const gen = fn.call(this);
1949
- return new Promise((resolve, reject) => {
1950
- function step(key, arg) {
1951
- let info, value;
1952
- try {
1953
- info = gen[key](arg);
1954
- value = info.value;
1955
- } catch (error) {
1956
- reject(error);
1957
- return;
1958
- }
1959
- if (info.done) {
1960
- resolve(value);
1961
- } else {
1962
- return Promise.resolve(value).then(
1963
- value => {
1964
- step('next', value);
1965
- },
1966
- err => {
1967
- step('throw', err);
1968
- });
1969
- }
1970
- }
1971
- return step('next');
1972
- });
1973
- })(function*(){
1974
- console.assert(!!this._client._connection, 'Protocol error: Connection closed. Most likely the page has been closed.');
1975
- const runBeforeUnload = !!options.runBeforeUnload;
1976
- if (runBeforeUnload) {
1977
- (yield this._client.send('Page.close'));
1978
- } else {
1979
- (yield this._client._connection.send('Target.closeTarget', { targetId: this._target._targetId }));
1980
- (yield this._target._isClosedPromise);
1981
- }
1982
- });}
1983
-
1984
- /**
1985
- * @return {!Mouse}
1986
- */
1987
- get mouse() {
1988
- return this._mouse;
1989
- }
1990
-
1991
- /**
1992
- * @param {string} selector
1993
- * @param {!Object=} options
1994
- */
1995
- click(selector, options = {}) {
1996
- return this.mainFrame().click(selector, options);
1997
- }
1998
-
1999
- /**
2000
- * @param {string} selector
2001
- */
2002
- focus(selector) {
2003
- return this.mainFrame().focus(selector);
2004
- }
2005
-
2006
- /**
2007
- * @param {string} selector
2008
- */
2009
- hover(selector) {
2010
- return this.mainFrame().hover(selector);
2011
- }
2012
-
2013
- /**
2014
- * @param {string} selector
2015
- * @param {!Array<string>} values
2016
- * @return {!Promise<!Array<string>>}
2017
- */
2018
- select(selector, ...values) {
2019
- return this.mainFrame().select(selector, ...values);
2020
- }
2021
-
2022
- /**
2023
- * @param {string} selector
2024
- */
2025
- tap(selector) {
2026
- return this.mainFrame().tap(selector);
2027
- }
2028
-
2029
- /**
2030
- * @param {string} selector
2031
- * @param {string} text
2032
- * @param {{delay: (number|undefined)}=} options
2033
- */
2034
- type(selector, text, options) {
2035
- return this.mainFrame().type(selector, text, options);
2036
- }
2037
-
2038
- /**
2039
- * @param {(string|number|Function)} selectorOrFunctionOrTimeout
2040
- * @param {!Object=} options
2041
- * @param {!Array<*>} args
2042
- * @return {!Promise}
2043
- */
2044
- waitFor(selectorOrFunctionOrTimeout, options = {}, ...args) {
2045
- return this.mainFrame().waitFor(selectorOrFunctionOrTimeout, options, ...args);
2046
- }
2047
-
2048
- /**
2049
- * @param {string} selector
2050
- * @param {!Object=} options
2051
- * @return {!Promise}
2052
- */
2053
- waitForSelector(selector, options = {}) {
2054
- return this.mainFrame().waitForSelector(selector, options);
2055
- }
2056
-
2057
- /**
2058
- * @param {string} xpath
2059
- * @param {!Object=} options
2060
- * @return {!Promise}
2061
- */
2062
- waitForXPath(xpath, options = {}) {
2063
- return this.mainFrame().waitForXPath(xpath, options);
2064
- }
2065
-
2066
- /**
2067
- * @param {function()} pageFunction
2068
- * @param {!Object=} options
2069
- * @param {!Array<*>} args
2070
- * @return {!Promise}
2071
- */
2072
- waitForFunction(pageFunction, options = {}, ...args) {
2073
- return this.mainFrame().waitForFunction(pageFunction, options, ...args);
2074
- }
2075
- }
2076
-
2077
- /** @type {!Set<string>} */
2078
- const supportedMetrics = new Set([
2079
- 'Timestamp',
2080
- 'Documents',
2081
- 'Frames',
2082
- 'JSEventListeners',
2083
- 'Nodes',
2084
- 'LayoutCount',
2085
- 'RecalcStyleCount',
2086
- 'LayoutDuration',
2087
- 'RecalcStyleDuration',
2088
- 'ScriptDuration',
2089
- 'TaskDuration',
2090
- 'JSHeapUsedSize',
2091
- 'JSHeapTotalSize',
2092
- ]);
2093
-
2094
- /** @enum {string} */
2095
- Page.PaperFormats = {
2096
- letter: {width: 8.5, height: 11},
2097
- legal: {width: 8.5, height: 14},
2098
- tabloid: {width: 11, height: 17},
2099
- ledger: {width: 17, height: 11},
2100
- a0: {width: 33.1, height: 46.8 },
2101
- a1: {width: 23.4, height: 33.1 },
2102
- a2: {width: 16.5, height: 23.4 },
2103
- a3: {width: 11.7, height: 16.5 },
2104
- a4: {width: 8.27, height: 11.7 },
2105
- a5: {width: 5.83, height: 8.27 },
2106
- a6: {width: 4.13, height: 5.83 },
2107
- };
2108
-
2109
- const unitToPixels = {
2110
- 'px': 1,
2111
- 'in': 96,
2112
- 'cm': 37.8,
2113
- 'mm': 3.78
2114
- };
2115
-
2116
- /**
2117
- * @param {(string|number|undefined)} parameter
2118
- * @return {(number|undefined)}
2119
- */
2120
- function convertPrintParameterToInches(parameter) {
2121
- if (typeof parameter === 'undefined')
2122
- return undefined;
2123
- let pixels;
2124
- if (helper.isNumber(parameter)) {
2125
- // Treat numbers as pixel values to be aligned with phantom's paperSize.
2126
- pixels = /** @type {number} */ (parameter);
2127
- } else if (helper.isString(parameter)) {
2128
- const text = /** @type {string} */ (parameter);
2129
- let unit = text.substring(text.length - 2).toLowerCase();
2130
- let valueText = '';
2131
- if (unitToPixels.hasOwnProperty(unit)) {
2132
- valueText = text.substring(0, text.length - 2);
2133
- } else {
2134
- // In case of unknown unit try to parse the whole parameter as number of pixels.
2135
- // This is consistent with phantom's paperSize behavior.
2136
- unit = 'px';
2137
- valueText = text;
2138
- }
2139
- const value = Number(valueText);
2140
- console.assert(!isNaN(value), 'Failed to parse parameter value: ' + text);
2141
- pixels = value * unitToPixels[unit];
2142
- } else {
2143
- throw new Error('page.pdf() Cannot handle parameter type: ' + (typeof parameter));
2144
- }
2145
- return pixels / 96;
2146
- }
2147
-
2148
- Page.Events = {
2149
- Close: 'close',
2150
- Console: 'console',
2151
- Dialog: 'dialog',
2152
- DOMContentLoaded: 'domcontentloaded',
2153
- Error: 'error',
2154
- // Can't use just 'error' due to node.js special treatment of error events.
2155
- // @see https://nodejs.org/api/events.html#events_error_events
2156
- PageError: 'pageerror',
2157
- Request: 'request',
2158
- Response: 'response',
2159
- RequestFailed: 'requestfailed',
2160
- RequestFinished: 'requestfinished',
2161
- FrameAttached: 'frameattached',
2162
- FrameDetached: 'framedetached',
2163
- FrameNavigated: 'framenavigated',
2164
- Load: 'load',
2165
- Metrics: 'metrics',
2166
- };
2167
-
2168
- /**
2169
- * @typedef {Object} Page.Viewport
2170
- * @property {number} width
2171
- * @property {number} height
2172
- * @property {number=} deviceScaleFactor
2173
- * @property {boolean=} isMobile
2174
- * @property {boolean=} isLandscape
2175
- * @property {boolean=} hasTouch
2176
- */
2177
-
2178
- /**
2179
- * @typedef {Object} Network.Cookie
2180
- * @property {string} name
2181
- * @property {string} value
2182
- * @property {string} domain
2183
- * @property {string} path
2184
- * @property {number} expires
2185
- * @property {number} size
2186
- * @property {boolean} httpOnly
2187
- * @property {boolean} secure
2188
- * @property {boolean} session
2189
- * @property {("Strict"|"Lax")=} sameSite
2190
- */
2191
-
2192
-
2193
- /**
2194
- * @typedef {Object} Network.CookieParam
2195
- * @property {string} name
2196
- * @property {string} value
2197
- * @property {string=} url
2198
- * @property {string=} domain
2199
- * @property {string=} path
2200
- * @property {number=} expires
2201
- * @property {boolean=} httpOnly
2202
- * @property {boolean=} secure
2203
- * @property {("Strict"|"Lax")=} sameSite
2204
- */
2205
-
2206
- class ConsoleMessage {
2207
- /**
2208
- * @param {string} type
2209
- * @param {string} text
2210
- * @param {!Array<*>} args
2211
- */
2212
- constructor(type, text, args = []) {
2213
- this._type = type;
2214
- this._text = text;
2215
- this._args = args;
2216
- }
2217
-
2218
- /**
2219
- * @return {string}
2220
- */
2221
- type() {
2222
- return this._type;
2223
- }
2224
-
2225
- /**
2226
- * @return {string}
2227
- */
2228
- text() {
2229
- return this._text;
2230
- }
2231
-
2232
- /**
2233
- * @return {!Array<string>}
2234
- */
2235
- args() {
2236
- return this._args;
2237
- }
2238
- }
2239
-
2240
-
2241
- module.exports = Page;
2242
- helper.tracePublicAPI(Page);