postdoc 0.2.0.beta4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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);