postdoc 0.2.0.beta4 → 0.2.4

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