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,1098 +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) {
42
-
43
- await client.send('Page.enable');
44
- const {frameTree} = await client.send('Page.getFrameTree');
45
- const page = new Page(client, target, frameTree, ignoreHTTPSErrors, screenshotTaskQueue);
46
-
47
- await Promise.all([
48
- client.send('Page.setLifecycleEventsEnabled', { enabled: true }),
49
- client.send('Network.enable', {}),
50
- client.send('Runtime.enable', {}),
51
- client.send('Security.enable', {}),
52
- client.send('Performance.enable', {}),
53
- client.send('Log.enable', {}),
54
- ]);
55
- if (ignoreHTTPSErrors)
56
- await client.send('Security.setOverrideCertificateErrors', {override: true});
57
- // Initialize default page size.
58
- if (setDefaultViewport)
59
- await page.setViewport({width: 800, height: 600});
60
-
61
- return page;
62
- }
63
-
64
- /**
65
- * @param {!Puppeteer.CDPSession} client
66
- * @param {!Puppeteer.Target} target
67
- * @param {!Protocol.Page.FrameTree} frameTree
68
- * @param {boolean} ignoreHTTPSErrors
69
- * @param {!Puppeteer.TaskQueue} screenshotTaskQueue
70
- */
71
- constructor(client, target, frameTree, ignoreHTTPSErrors, screenshotTaskQueue) {
72
- super();
73
- this._client = client;
74
- this._target = target;
75
- this._keyboard = new Keyboard(client);
76
- this._mouse = new Mouse(client, this._keyboard);
77
- this._touchscreen = new Touchscreen(client, this._keyboard);
78
- this._frameManager = new FrameManager(client, frameTree, this);
79
- this._networkManager = new NetworkManager(client, this._frameManager);
80
- this._emulationManager = new EmulationManager(client);
81
- this._tracing = new Tracing(client);
82
- /** @type {!Map<string, Function>} */
83
- this._pageBindings = new Map();
84
- this._ignoreHTTPSErrors = ignoreHTTPSErrors;
85
- this._coverage = new Coverage(client);
86
- this._defaultNavigationTimeout = 30000;
87
-
88
- this._screenshotTaskQueue = screenshotTaskQueue;
89
-
90
- this._frameManager.on(FrameManager.Events.FrameAttached, event => this.emit(Page.Events.FrameAttached, event));
91
- this._frameManager.on(FrameManager.Events.FrameDetached, event => this.emit(Page.Events.FrameDetached, event));
92
- this._frameManager.on(FrameManager.Events.FrameNavigated, event => this.emit(Page.Events.FrameNavigated, event));
93
-
94
- this._networkManager.on(NetworkManager.Events.Request, event => this.emit(Page.Events.Request, event));
95
- this._networkManager.on(NetworkManager.Events.Response, event => this.emit(Page.Events.Response, event));
96
- this._networkManager.on(NetworkManager.Events.RequestFailed, event => this.emit(Page.Events.RequestFailed, event));
97
- this._networkManager.on(NetworkManager.Events.RequestFinished, event => this.emit(Page.Events.RequestFinished, event));
98
-
99
- client.on('Page.domContentEventFired', event => this.emit(Page.Events.DOMContentLoaded));
100
- client.on('Page.loadEventFired', event => this.emit(Page.Events.Load));
101
- client.on('Runtime.consoleAPICalled', event => this._onConsoleAPI(event));
102
- client.on('Page.javascriptDialogOpening', event => this._onDialog(event));
103
- client.on('Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails));
104
- client.on('Security.certificateError', event => this._onCertificateError(event));
105
- client.on('Inspector.targetCrashed', event => this._onTargetCrashed());
106
- client.on('Performance.metrics', event => this._emitMetrics(event));
107
- client.on('Log.entryAdded', event => this._onLogEntryAdded(event));
108
- this._target._isClosedPromise.then(() => this.emit(Page.Events.Close));
109
- }
110
-
111
- /**
112
- * @return {!Puppeteer.Target}
113
- */
114
- target() {
115
- return this._target;
116
- }
117
-
118
- /**
119
- * @return {!Puppeteer.Browser}
120
- */
121
- browser() {
122
- return this._target.browser();
123
- }
124
-
125
- _onTargetCrashed() {
126
- this.emit('error', new Error('Page crashed!'));
127
- }
128
-
129
- _onLogEntryAdded(event) {
130
- const {level, text, args} = event.entry;
131
- if (args)
132
- args.map(arg => helper.releaseObject(this._client, arg));
133
-
134
- this.emit(Page.Events.Console, new ConsoleMessage(level, text));
135
- }
136
-
137
- /**
138
- * @return {!Puppeteer.Frame}
139
- */
140
- mainFrame() {
141
- return this._frameManager.mainFrame();
142
- }
143
-
144
- /**
145
- * @return {!Keyboard}
146
- */
147
- get keyboard() {
148
- return this._keyboard;
149
- }
150
-
151
- /**
152
- * @return {!Touchscreen}
153
- */
154
- get touchscreen() {
155
- return this._touchscreen;
156
- }
157
-
158
- /**
159
- * @return {!Coverage}
160
- */
161
- get coverage() {
162
- return this._coverage;
163
- }
164
-
165
- /**
166
- * @return {!Tracing}
167
- */
168
- get tracing() {
169
- return this._tracing;
170
- }
171
-
172
- /**
173
- * @return {!Array<Puppeteer.Frame>}
174
- */
175
- frames() {
176
- return this._frameManager.frames();
177
- }
178
-
179
- /**
180
- * @param {boolean} value
181
- */
182
- async setRequestInterception(value) {
183
- return this._networkManager.setRequestInterception(value);
184
- }
185
-
186
- /**
187
- * @param {boolean} enabled
188
- */
189
- setOfflineMode(enabled) {
190
- return this._networkManager.setOfflineMode(enabled);
191
- }
192
-
193
- /**
194
- * @param {number} timeout
195
- */
196
- setDefaultNavigationTimeout(timeout) {
197
- this._defaultNavigationTimeout = timeout;
198
- }
199
-
200
- /**
201
- * @param {!Protocol.Security.certificateErrorPayload} event
202
- */
203
- _onCertificateError(event) {
204
- if (!this._ignoreHTTPSErrors)
205
- return;
206
- this._client.send('Security.handleCertificateError', {
207
- eventId: event.eventId,
208
- action: 'continue'
209
- }).catch(debugError);
210
- }
211
-
212
- /**
213
- * @param {string} selector
214
- * @return {!Promise<?Puppeteer.ElementHandle>}
215
- */
216
- async $(selector) {
217
- return this.mainFrame().$(selector);
218
- }
219
-
220
- /**
221
- * @param {function()|string} pageFunction
222
- * @param {!Array<*>} args
223
- * @return {!Promise<!Puppeteer.JSHandle>}
224
- */
225
- async evaluateHandle(pageFunction, ...args) {
226
- const context = await this.mainFrame().executionContext();
227
- return context.evaluateHandle(pageFunction, ...args);
228
- }
229
-
230
- /**
231
- * @param {!Puppeteer.JSHandle} prototypeHandle
232
- * @return {!Promise<!Puppeteer.JSHandle>}
233
- */
234
- async queryObjects(prototypeHandle) {
235
- const context = await this.mainFrame().executionContext();
236
- return context.queryObjects(prototypeHandle);
237
- }
238
-
239
- /**
240
- * @param {string} selector
241
- * @param {function()|string} pageFunction
242
- * @param {!Array<*>} args
243
- * @return {!Promise<(!Object|undefined)>}
244
- */
245
- async $eval(selector, pageFunction, ...args) {
246
- return this.mainFrame().$eval(selector, pageFunction, ...args);
247
- }
248
-
249
- /**
250
- * @param {string} selector
251
- * @param {Function|string} pageFunction
252
- * @param {!Array<*>} args
253
- * @return {!Promise<(!Object|undefined)>}
254
- */
255
- async $$eval(selector, pageFunction, ...args) {
256
- return this.mainFrame().$$eval(selector, pageFunction, ...args);
257
- }
258
-
259
- /**
260
- * @param {string} selector
261
- * @return {!Promise<!Array<!Puppeteer.ElementHandle>>}
262
- */
263
- async $$(selector) {
264
- return this.mainFrame().$$(selector);
265
- }
266
-
267
- /**
268
- * @param {string} expression
269
- * @return {!Promise<!Array<!Puppeteer.ElementHandle>>}
270
- */
271
- async $x(expression) {
272
- return this.mainFrame().$x(expression);
273
- }
274
-
275
- /**
276
- * @param {!Array<string>} urls
277
- * @return {!Promise<!Array<Network.Cookie>>}
278
- */
279
- async cookies(...urls) {
280
- return (await this._client.send('Network.getCookies', {
281
- urls: urls.length ? urls : [this.url()]
282
- })).cookies;
283
- }
284
-
285
- /**
286
- * @param {Array<Network.CookieParam>} cookies
287
- */
288
- async deleteCookie(...cookies) {
289
- const pageURL = this.url();
290
- for (const cookie of cookies) {
291
- const item = Object.assign({}, cookie);
292
- if (!cookie.url && pageURL.startsWith('http'))
293
- item.url = pageURL;
294
- await this._client.send('Network.deleteCookies', item);
295
- }
296
- }
297
-
298
- /**
299
- * @param {Array<Network.CookieParam>} cookies
300
- */
301
- async setCookie(...cookies) {
302
- const pageURL = this.url();
303
- const startsWithHTTP = pageURL.startsWith('http');
304
- const items = cookies.map(cookie => {
305
- const item = Object.assign({}, cookie);
306
- if (!item.url && startsWithHTTP)
307
- item.url = pageURL;
308
- console.assert(
309
- item.url !== 'about:blank',
310
- `Blank page can not have cookie "${item.name}"`
311
- );
312
- console.assert(
313
- !String.prototype.startsWith.call(item.url || '', 'data:'),
314
- `Data URL page can not have cookie "${item.name}"`
315
- );
316
- return item;
317
- });
318
- await this.deleteCookie(...items);
319
- if (items.length)
320
- await this._client.send('Network.setCookies', { cookies: items });
321
- }
322
-
323
- /**
324
- * @param {Object} options
325
- * @return {!Promise<!Puppeteer.ElementHandle>}
326
- */
327
- async addScriptTag(options) {
328
- return this.mainFrame().addScriptTag(options);
329
- }
330
-
331
- /**
332
- * @param {Object} options
333
- * @return {!Promise<!Puppeteer.ElementHandle>}
334
- */
335
- async addStyleTag(options) {
336
- return this.mainFrame().addStyleTag(options);
337
- }
338
-
339
- /**
340
- * @param {string} name
341
- * @param {function(?)} puppeteerFunction
342
- */
343
- async exposeFunction(name, puppeteerFunction) {
344
- if (this._pageBindings[name])
345
- throw new Error(`Failed to add page binding with name ${name}: window['${name}'] already exists!`);
346
- this._pageBindings[name] = puppeteerFunction;
347
-
348
- const expression = helper.evaluationString(addPageBinding, name);
349
- await this._client.send('Page.addScriptToEvaluateOnNewDocument', {source: expression});
350
- await Promise.all(this.frames().map(frame => frame.evaluate(expression).catch(debugError)));
351
-
352
- function addPageBinding(bindingName) {
353
- window[bindingName] = async(...args) => {
354
- const me = window[bindingName];
355
- let callbacks = me['callbacks'];
356
- if (!callbacks) {
357
- callbacks = new Map();
358
- me['callbacks'] = callbacks;
359
- }
360
- const seq = (me['lastSeq'] || 0) + 1;
361
- me['lastSeq'] = seq;
362
- const promise = new Promise(fulfill => callbacks.set(seq, fulfill));
363
- // eslint-disable-next-line no-console
364
- console.debug('driver:page-binding', JSON.stringify({name: bindingName, seq, args}));
365
- return promise;
366
- };
367
- }
368
- }
369
-
370
- /**
371
- * @param {?{username: string, password: string}} credentials
372
- */
373
- async authenticate(credentials) {
374
- return this._networkManager.authenticate(credentials);
375
- }
376
-
377
- /**
378
- * @param {!Object<string, string>} headers
379
- */
380
- async setExtraHTTPHeaders(headers) {
381
- return this._networkManager.setExtraHTTPHeaders(headers);
382
- }
383
-
384
- /**
385
- * @param {string} userAgent
386
- */
387
- async setUserAgent(userAgent) {
388
- return this._networkManager.setUserAgent(userAgent);
389
- }
390
-
391
- /**
392
- * @return {!Promise<!Object>}
393
- */
394
- async metrics() {
395
- const response = await this._client.send('Performance.getMetrics');
396
- return this._buildMetricsObject(response.metrics);
397
- }
398
-
399
- /**
400
- * @param {*} event
401
- */
402
- _emitMetrics(event) {
403
- this.emit(Page.Events.Metrics, {
404
- title: event.title,
405
- metrics: this._buildMetricsObject(event.metrics)
406
- });
407
- }
408
-
409
- /**
410
- * @param {?Array<!Protocol.Performance.Metric>} metrics
411
- * @return {!Object}
412
- */
413
- _buildMetricsObject(metrics) {
414
- const result = {};
415
- for (const metric of metrics || []) {
416
- if (supportedMetrics.has(metric.name))
417
- result[metric.name] = metric.value;
418
- }
419
- return result;
420
- }
421
-
422
- /**
423
- * @param {!Protocol.Runtime.ExceptionDetails} exceptionDetails
424
- */
425
- _handleException(exceptionDetails) {
426
- const message = helper.getExceptionMessage(exceptionDetails);
427
- this.emit(Page.Events.PageError, new Error(message));
428
- }
429
-
430
- async _onConsoleAPI(event) {
431
- if (event.type === 'debug' && event.args.length && event.args[0].value === 'driver:page-binding') {
432
- const {name, seq, args} = JSON.parse(event.args[1].value);
433
- const result = await this._pageBindings[name](...args);
434
- const expression = helper.evaluationString(deliverResult, name, seq, result);
435
- this._client.send('Runtime.evaluate', { expression, contextId: event.executionContextId }).catch(debugError);
436
-
437
- function deliverResult(name, seq, result) {
438
- window[name]['callbacks'].get(seq)(result);
439
- window[name]['callbacks'].delete(seq);
440
- }
441
- return;
442
- }
443
- if (!this.listenerCount(Page.Events.Console)) {
444
- event.args.map(arg => helper.releaseObject(this._client, arg));
445
- return;
446
- }
447
- const values = event.args.map(arg => this._frameManager.createJSHandle(event.executionContextId, arg));
448
- const textTokens = [];
449
- for (let i = 0; i < event.args.length; ++i) {
450
- const remoteObject = event.args[i];
451
- if (remoteObject.objectId)
452
- textTokens.push(values[i].toString());
453
- else
454
- textTokens.push(helper.valueFromRemoteObject(remoteObject));
455
- }
456
- const message = new ConsoleMessage(event.type, textTokens.join(' '), values);
457
- this.emit(Page.Events.Console, message);
458
- }
459
-
460
- _onDialog(event) {
461
- let dialogType = null;
462
- if (event.type === 'alert')
463
- dialogType = Dialog.Type.Alert;
464
- else if (event.type === 'confirm')
465
- dialogType = Dialog.Type.Confirm;
466
- else if (event.type === 'prompt')
467
- dialogType = Dialog.Type.Prompt;
468
- else if (event.type === 'beforeunload')
469
- dialogType = Dialog.Type.BeforeUnload;
470
- console.assert(dialogType, 'Unknown javascript dialog type: ' + event.type);
471
- const dialog = new Dialog(this._client, dialogType, event.message, event.defaultPrompt);
472
- this.emit(Page.Events.Dialog, dialog);
473
- }
474
-
475
- /**
476
- * @return {!string}
477
- */
478
- url() {
479
- return this.mainFrame().url();
480
- }
481
-
482
- /**
483
- * @return {!Promise<String>}
484
- */
485
- async content() {
486
- return await this._frameManager.mainFrame().content();
487
- }
488
-
489
- /**
490
- * @param {string} html
491
- */
492
- async setContent(html) {
493
- await this._frameManager.mainFrame().setContent(html);
494
- }
495
-
496
- /**
497
- * @param {string} url
498
- * @param {!Object=} options
499
- * @return {!Promise<?Puppeteer.Response>}
500
- */
501
- async goto(url, options = {}) {
502
- const referrer = this._networkManager.extraHTTPHeaders()['referer'];
503
-
504
- /** @type {Map<string, !Puppeteer.Request>} */
505
- const requests = new Map();
506
- const eventListeners = [
507
- helper.addEventListener(this._networkManager, NetworkManager.Events.Request, request => {
508
- if (!requests.get(request.url()))
509
- requests.set(request.url(), request);
510
- })
511
- ];
512
-
513
- const mainFrame = this._frameManager.mainFrame();
514
- const timeout = typeof options.timeout === 'number' ? options.timeout : this._defaultNavigationTimeout;
515
- const watcher = new NavigatorWatcher(this._frameManager, mainFrame, timeout, options);
516
- const navigationPromise = watcher.navigationPromise();
517
- let error = await Promise.race([
518
- navigate(this._client, url, referrer),
519
- navigationPromise,
520
- ]);
521
- if (!error)
522
- error = await navigationPromise;
523
- watcher.cancel();
524
- helper.removeEventListeners(eventListeners);
525
- if (error)
526
- throw error;
527
- const request = requests.get(mainFrame._navigationURL);
528
- return request ? request.response() : null;
529
-
530
- /**
531
- * @param {!Puppeteer.CDPSession} client
532
- * @param {string} url
533
- * @param {string} referrer
534
- * @return {!Promise<?Error>}
535
- */
536
- async function navigate(client, url, referrer) {
537
- try {
538
- const response = await client.send('Page.navigate', {url, referrer});
539
- return response.errorText ? new Error(`${response.errorText} at ${url}`) : null;
540
- } catch (error) {
541
- return error;
542
- }
543
- }
544
- }
545
-
546
- /**
547
- * @param {!Object=} options
548
- * @return {!Promise<?Puppeteer.Response>}
549
- */
550
- async reload(options) {
551
- const [response] = await Promise.all([
552
- this.waitForNavigation(options),
553
- this._client.send('Page.reload')
554
- ]);
555
- return response;
556
- }
557
-
558
- /**
559
- * @param {!Object=} options
560
- * @return {!Promise<!Puppeteer.Response>}
561
- */
562
- async waitForNavigation(options = {}) {
563
- const mainFrame = this._frameManager.mainFrame();
564
- const timeout = typeof options.timeout === 'number' ? options.timeout : this._defaultNavigationTimeout;
565
- const watcher = new NavigatorWatcher(this._frameManager, mainFrame, timeout, options);
566
-
567
- const responses = new Map();
568
- const listener = helper.addEventListener(this._networkManager, NetworkManager.Events.Response, response => responses.set(response.url(), response));
569
- const error = await watcher.navigationPromise();
570
- helper.removeEventListeners([listener]);
571
- if (error)
572
- throw error;
573
- return responses.get(this.mainFrame().url()) || null;
574
- }
575
-
576
- /**
577
- * @param {!Object=} options
578
- * @return {!Promise<?Puppeteer.Response>}
579
- */
580
- async goBack(options) {
581
- return this._go(-1, options);
582
- }
583
-
584
- /**
585
- * @param {!Object=} options
586
- * @return {!Promise<?Puppeteer.Response>}
587
- */
588
- async goForward(options) {
589
- return this._go(+1, options);
590
- }
591
-
592
- /**
593
- * @param {!Object=} options
594
- * @return {!Promise<?Puppeteer.Response>}
595
- */
596
- async _go(delta, options) {
597
- const history = await this._client.send('Page.getNavigationHistory');
598
- const entry = history.entries[history.currentIndex + delta];
599
- if (!entry)
600
- return null;
601
- const [response] = await Promise.all([
602
- this.waitForNavigation(options),
603
- this._client.send('Page.navigateToHistoryEntry', {entryId: entry.id}),
604
- ]);
605
- return response;
606
- }
607
-
608
- async bringToFront() {
609
- await this._client.send('Page.bringToFront');
610
- }
611
-
612
- /**
613
- * @param {!Object} options
614
- */
615
- async emulate(options) {
616
- return Promise.all([
617
- this.setViewport(options.viewport),
618
- this.setUserAgent(options.userAgent)
619
- ]);
620
- }
621
-
622
- /**
623
- * @param {boolean} enabled
624
- */
625
- async setJavaScriptEnabled(enabled) {
626
- await this._client.send('Emulation.setScriptExecutionDisabled', { value: !enabled });
627
- }
628
-
629
- /**
630
- * @param {boolean} enabled
631
- */
632
- async setBypassCSP(enabled) {
633
- await this._client.send('Page.setBypassCSP', { enabled });
634
- }
635
-
636
- /**
637
- * @param {?string} mediaType
638
- */
639
- async emulateMedia(mediaType) {
640
- console.assert(mediaType === 'screen' || mediaType === 'print' || mediaType === null, 'Unsupported media type: ' + mediaType);
641
- await this._client.send('Emulation.setEmulatedMedia', {media: mediaType || ''});
642
- }
643
-
644
- /**
645
- * @param {!Page.Viewport} viewport
646
- */
647
- async setViewport(viewport) {
648
- const needsReload = await this._emulationManager.emulateViewport(viewport);
649
- this._viewport = viewport;
650
- if (needsReload)
651
- await this.reload();
652
- }
653
-
654
- /**
655
- * @return {!Page.Viewport}
656
- */
657
- viewport() {
658
- return this._viewport;
659
- }
660
-
661
- /**
662
- * @param {function()|string} pageFunction
663
- * @param {!Array<*>} args
664
- * @return {!Promise<*>}
665
- */
666
- async evaluate(pageFunction, ...args) {
667
- return this._frameManager.mainFrame().evaluate(pageFunction, ...args);
668
- }
669
-
670
- /**
671
- * @param {function()|string} pageFunction
672
- * @param {!Array<*>} args
673
- */
674
- async evaluateOnNewDocument(pageFunction, ...args) {
675
- const source = helper.evaluationString(pageFunction, ...args);
676
- await this._client.send('Page.addScriptToEvaluateOnNewDocument', { source });
677
- }
678
-
679
- /**
680
- * @param {Boolean} enabled
681
- * @returns {!Promise}
682
- */
683
- async setCacheEnabled(enabled = true) {
684
- await this._client.send('Network.setCacheDisabled', {cacheDisabled: !enabled});
685
- }
686
-
687
- /**
688
- * @param {!Object=} options
689
- * @return {!Promise<!Buffer>}
690
- */
691
- async screenshot(options = {}) {
692
- let screenshotType = null;
693
- // options.type takes precedence over inferring the type from options.path
694
- // because it may be a 0-length file with no extension created beforehand (i.e. as a temp file).
695
- if (options.type) {
696
- console.assert(options.type === 'png' || options.type === 'jpeg', 'Unknown options.type value: ' + options.type);
697
- screenshotType = options.type;
698
- } else if (options.path) {
699
- const mimeType = mime.getType(options.path);
700
- if (mimeType === 'image/png')
701
- screenshotType = 'png';
702
- else if (mimeType === 'image/jpeg')
703
- screenshotType = 'jpeg';
704
- console.assert(screenshotType, 'Unsupported screenshot mime type: ' + mimeType);
705
- }
706
-
707
- if (!screenshotType)
708
- screenshotType = 'png';
709
-
710
- if (options.quality) {
711
- console.assert(screenshotType === 'jpeg', 'options.quality is unsupported for the ' + screenshotType + ' screenshots');
712
- console.assert(typeof options.quality === 'number', 'Expected options.quality to be a number but found ' + (typeof options.quality));
713
- console.assert(Number.isInteger(options.quality), 'Expected options.quality to be an integer');
714
- console.assert(options.quality >= 0 && options.quality <= 100, 'Expected options.quality to be between 0 and 100 (inclusive), got ' + options.quality);
715
- }
716
- console.assert(!options.clip || !options.fullPage, 'options.clip and options.fullPage are exclusive');
717
- if (options.clip) {
718
- console.assert(typeof options.clip.x === 'number', 'Expected options.clip.x to be a number but found ' + (typeof options.clip.x));
719
- console.assert(typeof options.clip.y === 'number', 'Expected options.clip.y to be a number but found ' + (typeof options.clip.y));
720
- console.assert(typeof options.clip.width === 'number', 'Expected options.clip.width to be a number but found ' + (typeof options.clip.width));
721
- console.assert(typeof options.clip.height === 'number', 'Expected options.clip.height to be a number but found ' + (typeof options.clip.height));
722
- }
723
- return this._screenshotTaskQueue.postTask(this._screenshotTask.bind(this, screenshotType, options));
724
- }
725
-
726
- /**
727
- * @param {"png"|"jpeg"} format
728
- * @param {!Object=} options
729
- * @return {!Promise<!Buffer>}
730
- */
731
- async _screenshotTask(format, options) {
732
- await this._client.send('Target.activateTarget', {targetId: this._target._targetId});
733
- let clip = options.clip ? Object.assign({}, options['clip']) : undefined;
734
- if (clip)
735
- clip.scale = 1;
736
-
737
- if (options.fullPage) {
738
- const metrics = await this._client.send('Page.getLayoutMetrics');
739
- const width = Math.ceil(metrics.contentSize.width);
740
- const height = Math.ceil(metrics.contentSize.height);
741
-
742
- // Overwrite clip for full page at all times.
743
- clip = { x: 0, y: 0, width, height, scale: 1 };
744
- const mobile = this._viewport.isMobile || false;
745
- const deviceScaleFactor = this._viewport.deviceScaleFactor || 1;
746
- const landscape = this._viewport.isLandscape || false;
747
- /** @type {!Protocol.Emulation.ScreenOrientation} */
748
- const screenOrientation = landscape ? { angle: 90, type: 'landscapePrimary' } : { angle: 0, type: 'portraitPrimary' };
749
- await this._client.send('Emulation.setDeviceMetricsOverride', { mobile, width, height, deviceScaleFactor, screenOrientation });
750
- }
751
-
752
- if (options.omitBackground)
753
- await this._client.send('Emulation.setDefaultBackgroundColorOverride', { color: { r: 0, g: 0, b: 0, a: 0 } });
754
- const result = await this._client.send('Page.captureScreenshot', { format, quality: options.quality, clip });
755
- if (options.omitBackground)
756
- await this._client.send('Emulation.setDefaultBackgroundColorOverride');
757
-
758
- if (options.fullPage)
759
- await this.setViewport(this._viewport);
760
-
761
- const buffer = Buffer.from(result.data, 'base64');
762
- if (options.path)
763
- await writeFileAsync(options.path, buffer);
764
- return buffer;
765
- }
766
-
767
- /**
768
- * @param {!Object=} options
769
- * @return {!Promise<!Buffer>}
770
- */
771
- async pdf(options = {}) {
772
- const scale = options.scale || 1;
773
- const displayHeaderFooter = !!options.displayHeaderFooter;
774
- const headerTemplate = options.headerTemplate || '';
775
- const footerTemplate = options.footerTemplate || '';
776
- const printBackground = !!options.printBackground;
777
- const landscape = !!options.landscape;
778
- const pageRanges = options.pageRanges || '';
779
-
780
- let paperWidth = 8.5;
781
- let paperHeight = 11;
782
- if (options.format) {
783
- const format = Page.PaperFormats[options.format.toLowerCase()];
784
- console.assert(format, 'Unknown paper format: ' + options.format);
785
- paperWidth = format.width;
786
- paperHeight = format.height;
787
- } else {
788
- paperWidth = convertPrintParameterToInches(options.width) || paperWidth;
789
- paperHeight = convertPrintParameterToInches(options.height) || paperHeight;
790
- }
791
-
792
- const marginOptions = options.margin || {};
793
- const marginTop = convertPrintParameterToInches(marginOptions.top) || 0;
794
- const marginLeft = convertPrintParameterToInches(marginOptions.left) || 0;
795
- const marginBottom = convertPrintParameterToInches(marginOptions.bottom) || 0;
796
- const marginRight = convertPrintParameterToInches(marginOptions.right) || 0;
797
-
798
- const result = await this._client.send('Page.printToPDF', {
799
- landscape: landscape,
800
- displayHeaderFooter: displayHeaderFooter,
801
- headerTemplate: headerTemplate,
802
- footerTemplate: footerTemplate,
803
- printBackground: printBackground,
804
- scale: scale,
805
- paperWidth: paperWidth,
806
- paperHeight: paperHeight,
807
- marginTop: marginTop,
808
- marginBottom: marginBottom,
809
- marginLeft: marginLeft,
810
- marginRight: marginRight,
811
- pageRanges: pageRanges
812
- });
813
- const buffer = Buffer.from(result.data, 'base64');
814
- if (options.path)
815
- await writeFileAsync(options.path, buffer);
816
- return buffer;
817
- }
818
-
819
- /**
820
- * @return {!Promise<string>}
821
- */
822
- async title() {
823
- return this.mainFrame().title();
824
- }
825
-
826
- /**
827
- * @param {!{runBeforeUnload: (boolean|undefined)}=} options
828
- */
829
- async close(options = {runBeforeUnload: undefined}) {
830
- console.assert(!!this._client._connection, 'Protocol error: Connection closed. Most likely the page has been closed.');
831
- const runBeforeUnload = !!options.runBeforeUnload;
832
- if (runBeforeUnload) {
833
- await this._client.send('Page.close');
834
- } else {
835
- await this._client._connection.send('Target.closeTarget', { targetId: this._target._targetId });
836
- await this._target._isClosedPromise;
837
- }
838
- }
839
-
840
- /**
841
- * @return {!Mouse}
842
- */
843
- get mouse() {
844
- return this._mouse;
845
- }
846
-
847
- /**
848
- * @param {string} selector
849
- * @param {!Object=} options
850
- */
851
- click(selector, options = {}) {
852
- return this.mainFrame().click(selector, options);
853
- }
854
-
855
- /**
856
- * @param {string} selector
857
- */
858
- focus(selector) {
859
- return this.mainFrame().focus(selector);
860
- }
861
-
862
- /**
863
- * @param {string} selector
864
- */
865
- hover(selector) {
866
- return this.mainFrame().hover(selector);
867
- }
868
-
869
- /**
870
- * @param {string} selector
871
- * @param {!Array<string>} values
872
- * @return {!Promise<!Array<string>>}
873
- */
874
- select(selector, ...values) {
875
- return this.mainFrame().select(selector, ...values);
876
- }
877
-
878
- /**
879
- * @param {string} selector
880
- */
881
- tap(selector) {
882
- return this.mainFrame().tap(selector);
883
- }
884
-
885
- /**
886
- * @param {string} selector
887
- * @param {string} text
888
- * @param {{delay: (number|undefined)}=} options
889
- */
890
- type(selector, text, options) {
891
- return this.mainFrame().type(selector, text, options);
892
- }
893
-
894
- /**
895
- * @param {(string|number|Function)} selectorOrFunctionOrTimeout
896
- * @param {!Object=} options
897
- * @param {!Array<*>} args
898
- * @return {!Promise}
899
- */
900
- waitFor(selectorOrFunctionOrTimeout, options = {}, ...args) {
901
- return this.mainFrame().waitFor(selectorOrFunctionOrTimeout, options, ...args);
902
- }
903
-
904
- /**
905
- * @param {string} selector
906
- * @param {!Object=} options
907
- * @return {!Promise}
908
- */
909
- waitForSelector(selector, options = {}) {
910
- return this.mainFrame().waitForSelector(selector, options);
911
- }
912
-
913
- /**
914
- * @param {string} xpath
915
- * @param {!Object=} options
916
- * @return {!Promise}
917
- */
918
- waitForXPath(xpath, options = {}) {
919
- return this.mainFrame().waitForXPath(xpath, options);
920
- }
921
-
922
- /**
923
- * @param {function()} pageFunction
924
- * @param {!Object=} options
925
- * @param {!Array<*>} args
926
- * @return {!Promise}
927
- */
928
- waitForFunction(pageFunction, options = {}, ...args) {
929
- return this.mainFrame().waitForFunction(pageFunction, options, ...args);
930
- }
931
- }
932
-
933
- /** @type {!Set<string>} */
934
- const supportedMetrics = new Set([
935
- 'Timestamp',
936
- 'Documents',
937
- 'Frames',
938
- 'JSEventListeners',
939
- 'Nodes',
940
- 'LayoutCount',
941
- 'RecalcStyleCount',
942
- 'LayoutDuration',
943
- 'RecalcStyleDuration',
944
- 'ScriptDuration',
945
- 'TaskDuration',
946
- 'JSHeapUsedSize',
947
- 'JSHeapTotalSize',
948
- ]);
949
-
950
- /** @enum {string} */
951
- Page.PaperFormats = {
952
- letter: {width: 8.5, height: 11},
953
- legal: {width: 8.5, height: 14},
954
- tabloid: {width: 11, height: 17},
955
- ledger: {width: 17, height: 11},
956
- a0: {width: 33.1, height: 46.8 },
957
- a1: {width: 23.4, height: 33.1 },
958
- a2: {width: 16.5, height: 23.4 },
959
- a3: {width: 11.7, height: 16.5 },
960
- a4: {width: 8.27, height: 11.7 },
961
- a5: {width: 5.83, height: 8.27 },
962
- a6: {width: 4.13, height: 5.83 },
963
- };
964
-
965
- const unitToPixels = {
966
- 'px': 1,
967
- 'in': 96,
968
- 'cm': 37.8,
969
- 'mm': 3.78
970
- };
971
-
972
- /**
973
- * @param {(string|number|undefined)} parameter
974
- * @return {(number|undefined)}
975
- */
976
- function convertPrintParameterToInches(parameter) {
977
- if (typeof parameter === 'undefined')
978
- return undefined;
979
- let pixels;
980
- if (helper.isNumber(parameter)) {
981
- // Treat numbers as pixel values to be aligned with phantom's paperSize.
982
- pixels = /** @type {number} */ (parameter);
983
- } else if (helper.isString(parameter)) {
984
- const text = /** @type {string} */ (parameter);
985
- let unit = text.substring(text.length - 2).toLowerCase();
986
- let valueText = '';
987
- if (unitToPixels.hasOwnProperty(unit)) {
988
- valueText = text.substring(0, text.length - 2);
989
- } else {
990
- // In case of unknown unit try to parse the whole parameter as number of pixels.
991
- // This is consistent with phantom's paperSize behavior.
992
- unit = 'px';
993
- valueText = text;
994
- }
995
- const value = Number(valueText);
996
- console.assert(!isNaN(value), 'Failed to parse parameter value: ' + text);
997
- pixels = value * unitToPixels[unit];
998
- } else {
999
- throw new Error('page.pdf() Cannot handle parameter type: ' + (typeof parameter));
1000
- }
1001
- return pixels / 96;
1002
- }
1003
-
1004
- Page.Events = {
1005
- Close: 'close',
1006
- Console: 'console',
1007
- Dialog: 'dialog',
1008
- DOMContentLoaded: 'domcontentloaded',
1009
- Error: 'error',
1010
- // Can't use just 'error' due to node.js special treatment of error events.
1011
- // @see https://nodejs.org/api/events.html#events_error_events
1012
- PageError: 'pageerror',
1013
- Request: 'request',
1014
- Response: 'response',
1015
- RequestFailed: 'requestfailed',
1016
- RequestFinished: 'requestfinished',
1017
- FrameAttached: 'frameattached',
1018
- FrameDetached: 'framedetached',
1019
- FrameNavigated: 'framenavigated',
1020
- Load: 'load',
1021
- Metrics: 'metrics',
1022
- };
1023
-
1024
- /**
1025
- * @typedef {Object} Page.Viewport
1026
- * @property {number} width
1027
- * @property {number} height
1028
- * @property {number=} deviceScaleFactor
1029
- * @property {boolean=} isMobile
1030
- * @property {boolean=} isLandscape
1031
- * @property {boolean=} hasTouch
1032
- */
1033
-
1034
- /**
1035
- * @typedef {Object} Network.Cookie
1036
- * @property {string} name
1037
- * @property {string} value
1038
- * @property {string} domain
1039
- * @property {string} path
1040
- * @property {number} expires
1041
- * @property {number} size
1042
- * @property {boolean} httpOnly
1043
- * @property {boolean} secure
1044
- * @property {boolean} session
1045
- * @property {("Strict"|"Lax")=} sameSite
1046
- */
1047
-
1048
-
1049
- /**
1050
- * @typedef {Object} Network.CookieParam
1051
- * @property {string} name
1052
- * @property {string} value
1053
- * @property {string=} url
1054
- * @property {string=} domain
1055
- * @property {string=} path
1056
- * @property {number=} expires
1057
- * @property {boolean=} httpOnly
1058
- * @property {boolean=} secure
1059
- * @property {("Strict"|"Lax")=} sameSite
1060
- */
1061
-
1062
- class ConsoleMessage {
1063
- /**
1064
- * @param {string} type
1065
- * @param {string} text
1066
- * @param {!Array<*>} args
1067
- */
1068
- constructor(type, text, args = []) {
1069
- this._type = type;
1070
- this._text = text;
1071
- this._args = args;
1072
- }
1073
-
1074
- /**
1075
- * @return {string}
1076
- */
1077
- type() {
1078
- return this._type;
1079
- }
1080
-
1081
- /**
1082
- * @return {string}
1083
- */
1084
- text() {
1085
- return this._text;
1086
- }
1087
-
1088
- /**
1089
- * @return {!Array<string>}
1090
- */
1091
- args() {
1092
- return this._args;
1093
- }
1094
- }
1095
-
1096
-
1097
- module.exports = Page;
1098
- helper.tracePublicAPI(Page);