postdoc 0.2.0.beta4 → 0.2.0

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 (371) hide show
  1. checksums.yaml +4 -4
  2. data/lib/postdoc/postdoc_view_helper.rb +15 -0
  3. data/lib/postdoc.rb +34 -14
  4. metadata +20 -373
  5. data/lib/pdf.js +0 -27
  6. data/node_modules/agent-base/History.md +0 -113
  7. data/node_modules/agent-base/README.md +0 -145
  8. data/node_modules/agent-base/index.js +0 -160
  9. data/node_modules/agent-base/package.json +0 -35
  10. data/node_modules/agent-base/patch-core.js +0 -37
  11. data/node_modules/agent-base/test/ssl-cert-snakeoil.key +0 -15
  12. data/node_modules/agent-base/test/ssl-cert-snakeoil.pem +0 -12
  13. data/node_modules/agent-base/test/test.js +0 -673
  14. data/node_modules/async-limiter/LICENSE +0 -8
  15. data/node_modules/async-limiter/coverage/coverage.json +0 -1
  16. data/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html +0 -73
  17. data/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html +0 -246
  18. data/node_modules/async-limiter/coverage/lcov-report/base.css +0 -182
  19. data/node_modules/async-limiter/coverage/lcov-report/index.html +0 -73
  20. data/node_modules/async-limiter/coverage/lcov-report/prettify.css +0 -1
  21. data/node_modules/async-limiter/coverage/lcov-report/prettify.js +0 -1
  22. data/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  23. data/node_modules/async-limiter/coverage/lcov-report/sorter.js +0 -156
  24. data/node_modules/async-limiter/coverage/lcov.info +0 -74
  25. data/node_modules/async-limiter/index.js +0 -67
  26. data/node_modules/async-limiter/package.json +0 -35
  27. data/node_modules/async-limiter/readme.md +0 -132
  28. data/node_modules/balanced-match/LICENSE.md +0 -21
  29. data/node_modules/balanced-match/README.md +0 -91
  30. data/node_modules/balanced-match/index.js +0 -59
  31. data/node_modules/balanced-match/package.json +0 -49
  32. data/node_modules/brace-expansion/LICENSE +0 -21
  33. data/node_modules/brace-expansion/README.md +0 -129
  34. data/node_modules/brace-expansion/index.js +0 -201
  35. data/node_modules/brace-expansion/package.json +0 -47
  36. data/node_modules/buffer-from/index.js +0 -69
  37. data/node_modules/buffer-from/package.json +0 -16
  38. data/node_modules/buffer-from/readme.md +0 -69
  39. data/node_modules/buffer-from/test.js +0 -12
  40. data/node_modules/concat-map/LICENSE +0 -18
  41. data/node_modules/concat-map/README.markdown +0 -62
  42. data/node_modules/concat-map/example/map.js +0 -6
  43. data/node_modules/concat-map/index.js +0 -13
  44. data/node_modules/concat-map/package.json +0 -43
  45. data/node_modules/concat-map/test/map.js +0 -39
  46. data/node_modules/concat-stream/LICENSE +0 -24
  47. data/node_modules/concat-stream/index.js +0 -144
  48. data/node_modules/concat-stream/package.json +0 -55
  49. data/node_modules/concat-stream/readme.md +0 -102
  50. data/node_modules/core-util-is/LICENSE +0 -19
  51. data/node_modules/core-util-is/README.md +0 -3
  52. data/node_modules/core-util-is/float.patch +0 -604
  53. data/node_modules/core-util-is/lib/util.js +0 -107
  54. data/node_modules/core-util-is/package.json +0 -32
  55. data/node_modules/core-util-is/test.js +0 -68
  56. data/node_modules/debug/CHANGELOG.md +0 -395
  57. data/node_modules/debug/LICENSE +0 -19
  58. data/node_modules/debug/Makefile +0 -58
  59. data/node_modules/debug/README.md +0 -368
  60. data/node_modules/debug/karma.conf.js +0 -70
  61. data/node_modules/debug/node.js +0 -1
  62. data/node_modules/debug/package.json +0 -43
  63. data/node_modules/debug/src/browser.js +0 -195
  64. data/node_modules/debug/src/debug.js +0 -225
  65. data/node_modules/debug/src/index.js +0 -10
  66. data/node_modules/debug/src/node.js +0 -186
  67. data/node_modules/es6-promise/CHANGELOG.md +0 -151
  68. data/node_modules/es6-promise/LICENSE +0 -19
  69. data/node_modules/es6-promise/README.md +0 -97
  70. data/node_modules/es6-promise/auto.js +0 -4
  71. data/node_modules/es6-promise/dist/es6-promise.auto.js +0 -1181
  72. data/node_modules/es6-promise/dist/es6-promise.auto.map +0 -1
  73. data/node_modules/es6-promise/dist/es6-promise.auto.min.js +0 -1
  74. data/node_modules/es6-promise/dist/es6-promise.auto.min.map +0 -1
  75. data/node_modules/es6-promise/dist/es6-promise.js +0 -1179
  76. data/node_modules/es6-promise/dist/es6-promise.map +0 -1
  77. data/node_modules/es6-promise/dist/es6-promise.min.js +0 -1
  78. data/node_modules/es6-promise/dist/es6-promise.min.map +0 -1
  79. data/node_modules/es6-promise/es6-promise.d.ts +0 -81
  80. data/node_modules/es6-promise/lib/es6-promise/-internal.js +0 -266
  81. data/node_modules/es6-promise/lib/es6-promise/asap.js +0 -119
  82. data/node_modules/es6-promise/lib/es6-promise/enumerator.js +0 -113
  83. data/node_modules/es6-promise/lib/es6-promise/polyfill.js +0 -35
  84. data/node_modules/es6-promise/lib/es6-promise/promise/all.js +0 -52
  85. data/node_modules/es6-promise/lib/es6-promise/promise/race.js +0 -84
  86. data/node_modules/es6-promise/lib/es6-promise/promise/reject.js +0 -46
  87. data/node_modules/es6-promise/lib/es6-promise/promise/resolve.js +0 -48
  88. data/node_modules/es6-promise/lib/es6-promise/promise.js +0 -427
  89. data/node_modules/es6-promise/lib/es6-promise/then.js +0 -32
  90. data/node_modules/es6-promise/lib/es6-promise/utils.js +0 -21
  91. data/node_modules/es6-promise/lib/es6-promise.auto.js +0 -3
  92. data/node_modules/es6-promise/lib/es6-promise.js +0 -7
  93. data/node_modules/es6-promise/package.json +0 -75
  94. data/node_modules/es6-promisify/README.md +0 -89
  95. data/node_modules/es6-promisify/dist/promise.js +0 -73
  96. data/node_modules/es6-promisify/dist/promisify.js +0 -85
  97. data/node_modules/es6-promisify/package.json +0 -41
  98. data/node_modules/extract-zip/CONTRIBUTING.md +0 -1
  99. data/node_modules/extract-zip/LICENSE +0 -23
  100. data/node_modules/extract-zip/cli.js +0 -20
  101. data/node_modules/extract-zip/index.js +0 -205
  102. data/node_modules/extract-zip/node_modules/debug/CHANGELOG.md +0 -362
  103. data/node_modules/extract-zip/node_modules/debug/LICENSE +0 -19
  104. data/node_modules/extract-zip/node_modules/debug/Makefile +0 -50
  105. data/node_modules/extract-zip/node_modules/debug/README.md +0 -312
  106. data/node_modules/extract-zip/node_modules/debug/component.json +0 -19
  107. data/node_modules/extract-zip/node_modules/debug/karma.conf.js +0 -70
  108. data/node_modules/extract-zip/node_modules/debug/node.js +0 -1
  109. data/node_modules/extract-zip/node_modules/debug/package.json +0 -49
  110. data/node_modules/extract-zip/node_modules/debug/src/browser.js +0 -185
  111. data/node_modules/extract-zip/node_modules/debug/src/debug.js +0 -202
  112. data/node_modules/extract-zip/node_modules/debug/src/index.js +0 -10
  113. data/node_modules/extract-zip/node_modules/debug/src/inspector-log.js +0 -15
  114. data/node_modules/extract-zip/node_modules/debug/src/node.js +0 -248
  115. data/node_modules/extract-zip/package.json +0 -35
  116. data/node_modules/extract-zip/readme.md +0 -49
  117. data/node_modules/fd-slicer/CHANGELOG.md +0 -49
  118. data/node_modules/fd-slicer/LICENSE +0 -21
  119. data/node_modules/fd-slicer/README.md +0 -189
  120. data/node_modules/fd-slicer/index.js +0 -277
  121. data/node_modules/fd-slicer/package.json +0 -36
  122. data/node_modules/fd-slicer/test/test.js +0 -350
  123. data/node_modules/fs.realpath/LICENSE +0 -43
  124. data/node_modules/fs.realpath/README.md +0 -33
  125. data/node_modules/fs.realpath/index.js +0 -66
  126. data/node_modules/fs.realpath/old.js +0 -303
  127. data/node_modules/fs.realpath/package.json +0 -26
  128. data/node_modules/glob/LICENSE +0 -15
  129. data/node_modules/glob/README.md +0 -368
  130. data/node_modules/glob/changelog.md +0 -67
  131. data/node_modules/glob/common.js +0 -240
  132. data/node_modules/glob/glob.js +0 -790
  133. data/node_modules/glob/package.json +0 -43
  134. data/node_modules/glob/sync.js +0 -486
  135. data/node_modules/https-proxy-agent/History.md +0 -124
  136. data/node_modules/https-proxy-agent/README.md +0 -137
  137. data/node_modules/https-proxy-agent/index.js +0 -229
  138. data/node_modules/https-proxy-agent/package.json +0 -35
  139. data/node_modules/https-proxy-agent/test/ssl-cert-snakeoil.key +0 -15
  140. data/node_modules/https-proxy-agent/test/ssl-cert-snakeoil.pem +0 -12
  141. data/node_modules/https-proxy-agent/test/test.js +0 -342
  142. data/node_modules/inflight/LICENSE +0 -15
  143. data/node_modules/inflight/README.md +0 -37
  144. data/node_modules/inflight/inflight.js +0 -54
  145. data/node_modules/inflight/package.json +0 -29
  146. data/node_modules/inherits/LICENSE +0 -16
  147. data/node_modules/inherits/README.md +0 -42
  148. data/node_modules/inherits/inherits.js +0 -7
  149. data/node_modules/inherits/inherits_browser.js +0 -23
  150. data/node_modules/inherits/package.json +0 -29
  151. data/node_modules/isarray/Makefile +0 -6
  152. data/node_modules/isarray/README.md +0 -60
  153. data/node_modules/isarray/component.json +0 -19
  154. data/node_modules/isarray/index.js +0 -5
  155. data/node_modules/isarray/package.json +0 -45
  156. data/node_modules/isarray/test.js +0 -20
  157. data/node_modules/mime/CHANGELOG.md +0 -225
  158. data/node_modules/mime/CONTRIBUTING.md +0 -5
  159. data/node_modules/mime/LICENSE +0 -21
  160. data/node_modules/mime/Mime.js +0 -89
  161. data/node_modules/mime/README.md +0 -188
  162. data/node_modules/mime/cli.js +0 -10
  163. data/node_modules/mime/index.js +0 -4
  164. data/node_modules/mime/lite.js +0 -4
  165. data/node_modules/mime/package.json +0 -43
  166. data/node_modules/mime/src/README_js.md +0 -179
  167. data/node_modules/mime/src/build.js +0 -71
  168. data/node_modules/mime/src/test.js +0 -257
  169. data/node_modules/mime/types/other.json +0 -1
  170. data/node_modules/mime/types/standard.json +0 -1
  171. data/node_modules/minimatch/LICENSE +0 -15
  172. data/node_modules/minimatch/README.md +0 -209
  173. data/node_modules/minimatch/minimatch.js +0 -923
  174. data/node_modules/minimatch/package.json +0 -30
  175. data/node_modules/minimist/LICENSE +0 -18
  176. data/node_modules/minimist/example/parse.js +0 -2
  177. data/node_modules/minimist/index.js +0 -187
  178. data/node_modules/minimist/package.json +0 -40
  179. data/node_modules/minimist/readme.markdown +0 -73
  180. data/node_modules/minimist/test/dash.js +0 -24
  181. data/node_modules/minimist/test/default_bool.js +0 -20
  182. data/node_modules/minimist/test/dotted.js +0 -16
  183. data/node_modules/minimist/test/long.js +0 -31
  184. data/node_modules/minimist/test/parse.js +0 -318
  185. data/node_modules/minimist/test/parse_modified.js +0 -9
  186. data/node_modules/minimist/test/short.js +0 -67
  187. data/node_modules/minimist/test/whitespace.js +0 -8
  188. data/node_modules/mkdirp/LICENSE +0 -21
  189. data/node_modules/mkdirp/bin/cmd.js +0 -33
  190. data/node_modules/mkdirp/bin/usage.txt +0 -12
  191. data/node_modules/mkdirp/examples/pow.js +0 -6
  192. data/node_modules/mkdirp/index.js +0 -98
  193. data/node_modules/mkdirp/package.json +0 -27
  194. data/node_modules/mkdirp/readme.markdown +0 -100
  195. data/node_modules/mkdirp/test/chmod.js +0 -41
  196. data/node_modules/mkdirp/test/clobber.js +0 -38
  197. data/node_modules/mkdirp/test/mkdirp.js +0 -28
  198. data/node_modules/mkdirp/test/opts_fs.js +0 -29
  199. data/node_modules/mkdirp/test/opts_fs_sync.js +0 -27
  200. data/node_modules/mkdirp/test/perm.js +0 -32
  201. data/node_modules/mkdirp/test/perm_sync.js +0 -36
  202. data/node_modules/mkdirp/test/race.js +0 -37
  203. data/node_modules/mkdirp/test/rel.js +0 -32
  204. data/node_modules/mkdirp/test/return.js +0 -25
  205. data/node_modules/mkdirp/test/return_sync.js +0 -24
  206. data/node_modules/mkdirp/test/root.js +0 -19
  207. data/node_modules/mkdirp/test/sync.js +0 -32
  208. data/node_modules/mkdirp/test/umask.js +0 -28
  209. data/node_modules/mkdirp/test/umask_sync.js +0 -32
  210. data/node_modules/ms/index.js +0 -152
  211. data/node_modules/ms/license.md +0 -21
  212. data/node_modules/ms/package.json +0 -37
  213. data/node_modules/ms/readme.md +0 -51
  214. data/node_modules/once/LICENSE +0 -15
  215. data/node_modules/once/README.md +0 -79
  216. data/node_modules/once/once.js +0 -42
  217. data/node_modules/once/package.json +0 -33
  218. data/node_modules/path-is-absolute/index.js +0 -20
  219. data/node_modules/path-is-absolute/license +0 -21
  220. data/node_modules/path-is-absolute/package.json +0 -43
  221. data/node_modules/path-is-absolute/readme.md +0 -59
  222. data/node_modules/pend/LICENSE +0 -23
  223. data/node_modules/pend/README.md +0 -41
  224. data/node_modules/pend/index.js +0 -55
  225. data/node_modules/pend/package.json +0 -18
  226. data/node_modules/pend/test.js +0 -137
  227. data/node_modules/process-nextick-args/index.js +0 -44
  228. data/node_modules/process-nextick-args/license.md +0 -19
  229. data/node_modules/process-nextick-args/package.json +0 -25
  230. data/node_modules/process-nextick-args/readme.md +0 -18
  231. data/node_modules/progress/CHANGELOG.md +0 -115
  232. data/node_modules/progress/LICENSE +0 -22
  233. data/node_modules/progress/Makefile +0 -8
  234. data/node_modules/progress/README.md +0 -146
  235. data/node_modules/progress/index.js +0 -1
  236. data/node_modules/progress/lib/node-progress.js +0 -231
  237. data/node_modules/progress/package.json +0 -25
  238. data/node_modules/proxy-from-env/README.md +0 -131
  239. data/node_modules/proxy-from-env/index.js +0 -103
  240. data/node_modules/proxy-from-env/package.json +0 -35
  241. data/node_modules/proxy-from-env/test.js +0 -393
  242. data/node_modules/puppeteer/CONTRIBUTING.md +0 -206
  243. data/node_modules/puppeteer/DeviceDescriptors.js +0 -704
  244. data/node_modules/puppeteer/LICENSE +0 -202
  245. data/node_modules/puppeteer/README.md +0 -306
  246. data/node_modules/puppeteer/index.js +0 -28
  247. data/node_modules/puppeteer/install.js +0 -122
  248. data/node_modules/puppeteer/lib/Browser.js +0 -186
  249. data/node_modules/puppeteer/lib/BrowserFetcher.js +0 -279
  250. data/node_modules/puppeteer/lib/Connection.js +0 -246
  251. data/node_modules/puppeteer/lib/Coverage.js +0 -301
  252. data/node_modules/puppeteer/lib/Dialog.js +0 -84
  253. data/node_modules/puppeteer/lib/ElementHandle.js +0 -328
  254. data/node_modules/puppeteer/lib/EmulationManager.js +0 -89
  255. data/node_modules/puppeteer/lib/ExecutionContext.js +0 -232
  256. data/node_modules/puppeteer/lib/FrameManager.js +0 -997
  257. data/node_modules/puppeteer/lib/Input.js +0 -309
  258. data/node_modules/puppeteer/lib/Launcher.js +0 -310
  259. data/node_modules/puppeteer/lib/Multimap.js +0 -95
  260. data/node_modules/puppeteer/lib/NavigatorWatcher.js +0 -137
  261. data/node_modules/puppeteer/lib/NetworkManager.js +0 -796
  262. data/node_modules/puppeteer/lib/Page.js +0 -1098
  263. data/node_modules/puppeteer/lib/Pipe.js +0 -69
  264. data/node_modules/puppeteer/lib/Puppeteer.js +0 -60
  265. data/node_modules/puppeteer/lib/Target.js +0 -88
  266. data/node_modules/puppeteer/lib/TaskQueue.js +0 -17
  267. data/node_modules/puppeteer/lib/Tracing.js +0 -99
  268. data/node_modules/puppeteer/lib/USKeyboardLayout.js +0 -281
  269. data/node_modules/puppeteer/lib/helper.js +0 -248
  270. data/node_modules/puppeteer/node6/lib/Browser.js +0 -394
  271. data/node_modules/puppeteer/node6/lib/BrowserFetcher.js +0 -357
  272. data/node_modules/puppeteer/node6/lib/Connection.js +0 -350
  273. data/node_modules/puppeteer/node6/lib/Coverage.js +0 -561
  274. data/node_modules/puppeteer/node6/lib/Dialog.js +0 -136
  275. data/node_modules/puppeteer/node6/lib/ElementHandle.js +0 -796
  276. data/node_modules/puppeteer/node6/lib/EmulationManager.js +0 -115
  277. data/node_modules/puppeteer/node6/lib/ExecutionContext.js +0 -414
  278. data/node_modules/puppeteer/node6/lib/FrameManager.js +0 -1621
  279. data/node_modules/puppeteer/node6/lib/Input.js +0 -569
  280. data/node_modules/puppeteer/node6/lib/Launcher.js +0 -362
  281. data/node_modules/puppeteer/node6/lib/Multimap.js +0 -95
  282. data/node_modules/puppeteer/node6/lib/NavigatorWatcher.js +0 -163
  283. data/node_modules/puppeteer/node6/lib/NetworkManager.js +0 -1108
  284. data/node_modules/puppeteer/node6/lib/Page.js +0 -2242
  285. data/node_modules/puppeteer/node6/lib/Pipe.js +0 -69
  286. data/node_modules/puppeteer/node6/lib/Puppeteer.js +0 -60
  287. data/node_modules/puppeteer/node6/lib/Target.js +0 -114
  288. data/node_modules/puppeteer/node6/lib/TaskQueue.js +0 -17
  289. data/node_modules/puppeteer/node6/lib/Tracing.js +0 -177
  290. data/node_modules/puppeteer/node6/lib/USKeyboardLayout.js +0 -281
  291. data/node_modules/puppeteer/node6/lib/helper.js +0 -274
  292. data/node_modules/puppeteer/package.json +0 -61
  293. data/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  294. data/node_modules/readable-stream/GOVERNANCE.md +0 -136
  295. data/node_modules/readable-stream/LICENSE +0 -47
  296. data/node_modules/readable-stream/README.md +0 -58
  297. data/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  298. data/node_modules/readable-stream/duplex-browser.js +0 -1
  299. data/node_modules/readable-stream/duplex.js +0 -1
  300. data/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  301. data/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  302. data/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  303. data/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  304. data/node_modules/readable-stream/lib/_stream_writable.js +0 -687
  305. data/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  306. data/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
  307. data/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  308. data/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  309. data/node_modules/readable-stream/package.json +0 -52
  310. data/node_modules/readable-stream/passthrough.js +0 -1
  311. data/node_modules/readable-stream/readable-browser.js +0 -7
  312. data/node_modules/readable-stream/readable.js +0 -19
  313. data/node_modules/readable-stream/transform.js +0 -1
  314. data/node_modules/readable-stream/writable-browser.js +0 -1
  315. data/node_modules/readable-stream/writable.js +0 -8
  316. data/node_modules/rimraf/LICENSE +0 -15
  317. data/node_modules/rimraf/README.md +0 -101
  318. data/node_modules/rimraf/bin.js +0 -50
  319. data/node_modules/rimraf/package.json +0 -26
  320. data/node_modules/rimraf/rimraf.js +0 -364
  321. data/node_modules/safe-buffer/LICENSE +0 -21
  322. data/node_modules/safe-buffer/README.md +0 -584
  323. data/node_modules/safe-buffer/index.d.ts +0 -187
  324. data/node_modules/safe-buffer/index.js +0 -62
  325. data/node_modules/safe-buffer/package.json +0 -37
  326. data/node_modules/string_decoder/LICENSE +0 -48
  327. data/node_modules/string_decoder/README.md +0 -47
  328. data/node_modules/string_decoder/lib/string_decoder.js +0 -296
  329. data/node_modules/string_decoder/package.json +0 -31
  330. data/node_modules/typedarray/LICENSE +0 -35
  331. data/node_modules/typedarray/example/tarray.js +0 -4
  332. data/node_modules/typedarray/index.js +0 -630
  333. data/node_modules/typedarray/package.json +0 -55
  334. data/node_modules/typedarray/readme.markdown +0 -61
  335. data/node_modules/typedarray/test/server/undef_globals.js +0 -19
  336. data/node_modules/typedarray/test/tarray.js +0 -10
  337. data/node_modules/ultron/LICENSE +0 -22
  338. data/node_modules/ultron/README.md +0 -113
  339. data/node_modules/ultron/index.js +0 -136
  340. data/node_modules/ultron/package.json +0 -41
  341. data/node_modules/util-deprecate/History.md +0 -16
  342. data/node_modules/util-deprecate/LICENSE +0 -24
  343. data/node_modules/util-deprecate/README.md +0 -53
  344. data/node_modules/util-deprecate/browser.js +0 -67
  345. data/node_modules/util-deprecate/node.js +0 -6
  346. data/node_modules/util-deprecate/package.json +0 -27
  347. data/node_modules/wrappy/LICENSE +0 -15
  348. data/node_modules/wrappy/README.md +0 -36
  349. data/node_modules/wrappy/package.json +0 -29
  350. data/node_modules/wrappy/wrappy.js +0 -33
  351. data/node_modules/ws/LICENSE +0 -21
  352. data/node_modules/ws/README.md +0 -341
  353. data/node_modules/ws/index.js +0 -15
  354. data/node_modules/ws/lib/BufferUtil.js +0 -71
  355. data/node_modules/ws/lib/Constants.js +0 -10
  356. data/node_modules/ws/lib/ErrorCodes.js +0 -28
  357. data/node_modules/ws/lib/EventTarget.js +0 -151
  358. data/node_modules/ws/lib/Extensions.js +0 -203
  359. data/node_modules/ws/lib/PerMessageDeflate.js +0 -507
  360. data/node_modules/ws/lib/Receiver.js +0 -553
  361. data/node_modules/ws/lib/Sender.js +0 -412
  362. data/node_modules/ws/lib/Validation.js +0 -17
  363. data/node_modules/ws/lib/WebSocket.js +0 -717
  364. data/node_modules/ws/lib/WebSocketServer.js +0 -326
  365. data/node_modules/ws/package.json +0 -46
  366. data/node_modules/yauzl/LICENSE +0 -21
  367. data/node_modules/yauzl/README.md +0 -467
  368. data/node_modules/yauzl/index.js +0 -626
  369. data/node_modules/yauzl/package.json +0 -36
  370. data/package.json +0 -5
  371. 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);