postdoc 0.2.0.beta4 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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,1621 +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 {helper} = require('./helper');
20
- const {ExecutionContext, JSHandle} = require('./ExecutionContext');
21
- const ElementHandle = require('./ElementHandle');
22
-
23
- const readFileAsync = helper.promisify(fs.readFile);
24
-
25
- class FrameManager extends EventEmitter {
26
- /**
27
- * @param {!Puppeteer.CDPSession} client
28
- * @param {!Protocol.Page.FrameTree} frameTree
29
- * @param {!Puppeteer.Page} page
30
- */
31
- constructor(client, frameTree, page) {
32
- super();
33
- this._client = client;
34
- this._page = page;
35
- /** @type {!Map<string, !Frame>} */
36
- this._frames = new Map();
37
- /** @type {!Map<number, !ExecutionContext>} */
38
- this._contextIdToContext = new Map();
39
-
40
- this._client.on('Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId));
41
- this._client.on('Page.frameNavigated', event => this._onFrameNavigated(event.frame));
42
- this._client.on('Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url));
43
- this._client.on('Page.frameDetached', event => this._onFrameDetached(event.frameId));
44
- this._client.on('Page.frameStoppedLoading', event => this._onFrameStoppedLoading(event.frameId));
45
- this._client.on('Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context));
46
- this._client.on('Runtime.executionContextDestroyed', event => this._onExecutionContextDestroyed(event.executionContextId));
47
- this._client.on('Runtime.executionContextsCleared', event => this._onExecutionContextsCleared());
48
- this._client.on('Page.lifecycleEvent', event => this._onLifecycleEvent(event));
49
-
50
- this._handleFrameTree(frameTree);
51
- }
52
-
53
- /**
54
- * @param {!Protocol.Page.lifecycleEventPayload} event
55
- */
56
- _onLifecycleEvent(event) {
57
- const frame = this._frames.get(event.frameId);
58
- if (!frame)
59
- return;
60
- frame._onLifecycleEvent(event.loaderId, event.name);
61
- this.emit(FrameManager.Events.LifecycleEvent, frame);
62
- }
63
-
64
- /**
65
- * @param {string} frameId
66
- */
67
- _onFrameStoppedLoading(frameId) {
68
- const frame = this._frames.get(frameId);
69
- if (!frame)
70
- return;
71
- frame._onLoadingStopped();
72
- this.emit(FrameManager.Events.LifecycleEvent, frame);
73
- }
74
-
75
- /**
76
- * @param {!Protocol.Page.FrameTree} frameTree
77
- */
78
- _handleFrameTree(frameTree) {
79
- if (frameTree.frame.parentId)
80
- this._onFrameAttached(frameTree.frame.id, frameTree.frame.parentId);
81
- this._onFrameNavigated(frameTree.frame);
82
- if (!frameTree.childFrames)
83
- return;
84
-
85
- for (const child of frameTree.childFrames)
86
- this._handleFrameTree(child);
87
- }
88
-
89
- /**
90
- * @return {!Frame}
91
- */
92
- mainFrame() {
93
- return this._mainFrame;
94
- }
95
-
96
- /**
97
- * @return {!Array<!Frame>}
98
- */
99
- frames() {
100
- return Array.from(this._frames.values());
101
- }
102
-
103
- /**
104
- * @param {!string} frameId
105
- * @return {?Frame}
106
- */
107
- frame(frameId) {
108
- return this._frames.get(frameId) || null;
109
- }
110
-
111
- /**
112
- * @param {string} frameId
113
- * @param {?string} parentFrameId
114
- * @return {?Frame}
115
- */
116
- _onFrameAttached(frameId, parentFrameId) {
117
- if (this._frames.has(frameId))
118
- return;
119
- console.assert(parentFrameId);
120
- const parentFrame = this._frames.get(parentFrameId);
121
- const frame = new Frame(this._client, this._page, parentFrame, frameId);
122
- this._frames.set(frame._id, frame);
123
- this.emit(FrameManager.Events.FrameAttached, frame);
124
- }
125
-
126
- /**
127
- * @param {!Protocol.Page.Frame} framePayload
128
- */
129
- _onFrameNavigated(framePayload) {
130
- const isMainFrame = !framePayload.parentId;
131
- let frame = isMainFrame ? this._mainFrame : this._frames.get(framePayload.id);
132
- console.assert(isMainFrame || frame, 'We either navigate top level or have old version of the navigated frame');
133
-
134
- // Detach all child frames first.
135
- if (frame) {
136
- for (const child of frame.childFrames())
137
- this._removeFramesRecursively(child);
138
- }
139
-
140
- // Update or create main frame.
141
- if (isMainFrame) {
142
- if (frame) {
143
- // Update frame id to retain frame identity on cross-process navigation.
144
- this._frames.delete(frame._id);
145
- frame._id = framePayload.id;
146
- } else {
147
- // Initial main frame navigation.
148
- frame = new Frame(this._client, this._page, null, framePayload.id);
149
- }
150
- this._frames.set(framePayload.id, frame);
151
- this._mainFrame = frame;
152
- }
153
-
154
- // Update frame payload.
155
- frame._navigated(framePayload);
156
-
157
- this.emit(FrameManager.Events.FrameNavigated, frame);
158
- }
159
-
160
- /**
161
- * @param {string} frameId
162
- * @param {string} url
163
- */
164
- _onFrameNavigatedWithinDocument(frameId, url) {
165
- const frame = this._frames.get(frameId);
166
- if (!frame)
167
- return;
168
- frame._navigatedWithinDocument(url);
169
- this.emit(FrameManager.Events.FrameNavigatedWithinDocument, frame);
170
- this.emit(FrameManager.Events.FrameNavigated, frame);
171
- }
172
-
173
- /**
174
- * @param {string} frameId
175
- */
176
- _onFrameDetached(frameId) {
177
- const frame = this._frames.get(frameId);
178
- if (frame)
179
- this._removeFramesRecursively(frame);
180
- }
181
-
182
- _onExecutionContextCreated(contextPayload) {
183
- const frameId = contextPayload.auxData && contextPayload.auxData.isDefault ? contextPayload.auxData.frameId : null;
184
- const frame = frameId ? this._frames.get(frameId) : null;
185
- const context = new ExecutionContext(this._client, contextPayload, this.createJSHandle.bind(this, contextPayload.id), frame);
186
- this._contextIdToContext.set(contextPayload.id, context);
187
- if (frame)
188
- frame._setDefaultContext(context);
189
- }
190
-
191
- /**
192
- * @param {!ExecutionContext} context
193
- */
194
- _removeContext(context) {
195
- if (context.frame())
196
- context.frame()._setDefaultContext(null);
197
- }
198
-
199
- /**
200
- * @param {number} executionContextId
201
- */
202
- _onExecutionContextDestroyed(executionContextId) {
203
- const context = this._contextIdToContext.get(executionContextId);
204
- if (!context)
205
- return;
206
- this._contextIdToContext.delete(executionContextId);
207
- this._removeContext(context);
208
- }
209
-
210
- _onExecutionContextsCleared() {
211
- for (const context of this._contextIdToContext.values())
212
- this._removeContext(context);
213
- this._contextIdToContext.clear();
214
- }
215
-
216
- /**
217
- * @param {number} contextId
218
- * @param {*} remoteObject
219
- * @return {!JSHandle}
220
- */
221
- createJSHandle(contextId, remoteObject) {
222
- const context = this._contextIdToContext.get(contextId);
223
- console.assert(context, 'INTERNAL ERROR: missing context with id = ' + contextId);
224
- if (remoteObject.subtype === 'node')
225
- return new ElementHandle(context, this._client, remoteObject, this._page, this);
226
- return new JSHandle(context, this._client, remoteObject);
227
- }
228
-
229
- /**
230
- * @param {!Frame} frame
231
- */
232
- _removeFramesRecursively(frame) {
233
- for (const child of frame.childFrames())
234
- this._removeFramesRecursively(child);
235
- frame._detach();
236
- this._frames.delete(frame._id);
237
- this.emit(FrameManager.Events.FrameDetached, frame);
238
- }
239
- }
240
-
241
- /** @enum {string} */
242
- FrameManager.Events = {
243
- FrameAttached: 'frameattached',
244
- FrameNavigated: 'framenavigated',
245
- FrameDetached: 'framedetached',
246
- LifecycleEvent: 'lifecycleevent',
247
- FrameNavigatedWithinDocument: 'framenavigatedwithindocument'
248
- };
249
-
250
- /**
251
- * @unrestricted
252
- */
253
- class Frame {
254
- /**
255
- * @param {!Puppeteer.CDPSession} client
256
- * @param {?Frame} parentFrame
257
- * @param {string} frameId
258
- */
259
- constructor(client, page, parentFrame, frameId) {
260
- this._client = client;
261
- this._page = page;
262
- this._parentFrame = parentFrame;
263
- this._url = '';
264
- this._id = frameId;
265
-
266
- /** @type {?Promise<!ElementHandle>} */
267
- this._documentPromise = null;
268
- /** @type {?Promise<!ExecutionContext>} */
269
- this._contextPromise = null;
270
- this._contextResolveCallback = null;
271
- this._setDefaultContext(null);
272
-
273
- /** @type {!Set<!WaitTask>} */
274
- this._waitTasks = new Set();
275
- this._loaderId = '';
276
- /** @type {!Set<string>} */
277
- this._lifecycleEvents = new Set();
278
-
279
- /** @type {!Set<!Frame>} */
280
- this._childFrames = new Set();
281
- if (this._parentFrame)
282
- this._parentFrame._childFrames.add(this);
283
- }
284
-
285
- /**
286
- * @param {?ExecutionContext} context
287
- */
288
- _setDefaultContext(context) {
289
- if (context) {
290
- this._contextResolveCallback.call(null, context);
291
- this._contextResolveCallback = null;
292
- for (const waitTask of this._waitTasks)
293
- waitTask.rerun();
294
- } else {
295
- this._documentPromise = null;
296
- this._contextPromise = new Promise(fulfill => {
297
- this._contextResolveCallback = fulfill;
298
- });
299
- }
300
- }
301
-
302
- /**
303
- * @return {!Promise<!ExecutionContext>}
304
- */
305
- executionContext() {
306
- return this._contextPromise;
307
- }
308
-
309
- /**
310
- * @param {function()|string} pageFunction
311
- * @param {!Array<*>} args
312
- * @return {!Promise<!Puppeteer.JSHandle>}
313
- */
314
- /* async */ evaluateHandle(pageFunction, ...args) {return (fn => {
315
- const gen = fn.call(this);
316
- return new Promise((resolve, reject) => {
317
- function step(key, arg) {
318
- let info, value;
319
- try {
320
- info = gen[key](arg);
321
- value = info.value;
322
- } catch (error) {
323
- reject(error);
324
- return;
325
- }
326
- if (info.done) {
327
- resolve(value);
328
- } else {
329
- return Promise.resolve(value).then(
330
- value => {
331
- step('next', value);
332
- },
333
- err => {
334
- step('throw', err);
335
- });
336
- }
337
- }
338
- return step('next');
339
- });
340
- })(function*(){
341
- const context = (yield this._contextPromise);
342
- return context.evaluateHandle(pageFunction, ...args);
343
- });}
344
-
345
- /**
346
- * @param {Function|string} pageFunction
347
- * @param {!Array<*>} args
348
- * @return {!Promise<*>}
349
- */
350
- /* async */ evaluate(pageFunction, ...args) {return (fn => {
351
- const gen = fn.call(this);
352
- return new Promise((resolve, reject) => {
353
- function step(key, arg) {
354
- let info, value;
355
- try {
356
- info = gen[key](arg);
357
- value = info.value;
358
- } catch (error) {
359
- reject(error);
360
- return;
361
- }
362
- if (info.done) {
363
- resolve(value);
364
- } else {
365
- return Promise.resolve(value).then(
366
- value => {
367
- step('next', value);
368
- },
369
- err => {
370
- step('throw', err);
371
- });
372
- }
373
- }
374
- return step('next');
375
- });
376
- })(function*(){
377
- const context = (yield this._contextPromise);
378
- return context.evaluate(pageFunction, ...args);
379
- });}
380
-
381
- /**
382
- * @param {string} selector
383
- * @return {!Promise<?ElementHandle>}
384
- */
385
- /* async */ $(selector) {return (fn => {
386
- const gen = fn.call(this);
387
- return new Promise((resolve, reject) => {
388
- function step(key, arg) {
389
- let info, value;
390
- try {
391
- info = gen[key](arg);
392
- value = info.value;
393
- } catch (error) {
394
- reject(error);
395
- return;
396
- }
397
- if (info.done) {
398
- resolve(value);
399
- } else {
400
- return Promise.resolve(value).then(
401
- value => {
402
- step('next', value);
403
- },
404
- err => {
405
- step('throw', err);
406
- });
407
- }
408
- }
409
- return step('next');
410
- });
411
- })(function*(){
412
- const document = (yield this._document());
413
- const value = (yield document.$(selector));
414
- return value;
415
- });}
416
-
417
- /**
418
- * @return {!Promise<!ElementHandle>}
419
- */
420
- /* async */ _document() {return (fn => {
421
- const gen = fn.call(this);
422
- return new Promise((resolve, reject) => {
423
- function step(key, arg) {
424
- let info, value;
425
- try {
426
- info = gen[key](arg);
427
- value = info.value;
428
- } catch (error) {
429
- reject(error);
430
- return;
431
- }
432
- if (info.done) {
433
- resolve(value);
434
- } else {
435
- return Promise.resolve(value).then(
436
- value => {
437
- step('next', value);
438
- },
439
- err => {
440
- step('throw', err);
441
- });
442
- }
443
- }
444
- return step('next');
445
- });
446
- })(function*(){
447
- if (this._documentPromise)
448
- return this._documentPromise;
449
- this._documentPromise = this._contextPromise.then(/* async */ context => {return (fn => {
450
- const gen = fn.call(this);
451
- return new Promise((resolve, reject) => {
452
- function step(key, arg) {
453
- let info, value;
454
- try {
455
- info = gen[key](arg);
456
- value = info.value;
457
- } catch (error) {
458
- reject(error);
459
- return;
460
- }
461
- if (info.done) {
462
- resolve(value);
463
- } else {
464
- return Promise.resolve(value).then(
465
- value => {
466
- step('next', value);
467
- },
468
- err => {
469
- step('throw', err);
470
- });
471
- }
472
- }
473
- return step('next');
474
- });
475
- })(function*(){
476
- const document = (yield context.evaluateHandle('document'));
477
- return document.asElement();
478
- });});
479
- return this._documentPromise;
480
- });}
481
-
482
- /**
483
- * @param {string} expression
484
- * @return {!Promise<!Array<!ElementHandle>>}
485
- */
486
- /* async */ $x(expression) {return (fn => {
487
- const gen = fn.call(this);
488
- return new Promise((resolve, reject) => {
489
- function step(key, arg) {
490
- let info, value;
491
- try {
492
- info = gen[key](arg);
493
- value = info.value;
494
- } catch (error) {
495
- reject(error);
496
- return;
497
- }
498
- if (info.done) {
499
- resolve(value);
500
- } else {
501
- return Promise.resolve(value).then(
502
- value => {
503
- step('next', value);
504
- },
505
- err => {
506
- step('throw', err);
507
- });
508
- }
509
- }
510
- return step('next');
511
- });
512
- })(function*(){
513
- const document = (yield this._document());
514
- const value = (yield document.$x(expression));
515
- return value;
516
- });}
517
-
518
- /**
519
- * @param {string} selector
520
- * @param {Function|string} pageFunction
521
- * @param {!Array<*>} args
522
- * @return {!Promise<(!Object|undefined)>}
523
- */
524
- /* async */ $eval(selector, pageFunction, ...args) {return (fn => {
525
- const gen = fn.call(this);
526
- return new Promise((resolve, reject) => {
527
- function step(key, arg) {
528
- let info, value;
529
- try {
530
- info = gen[key](arg);
531
- value = info.value;
532
- } catch (error) {
533
- reject(error);
534
- return;
535
- }
536
- if (info.done) {
537
- resolve(value);
538
- } else {
539
- return Promise.resolve(value).then(
540
- value => {
541
- step('next', value);
542
- },
543
- err => {
544
- step('throw', err);
545
- });
546
- }
547
- }
548
- return step('next');
549
- });
550
- })(function*(){
551
- const document = (yield this._document());
552
- const value = (yield document.$eval(selector, pageFunction, ...args));
553
- return value;
554
- });}
555
-
556
- /**
557
- * @param {string} selector
558
- * @param {Function|string} pageFunction
559
- * @param {!Array<*>} args
560
- * @return {!Promise<(!Object|undefined)>}
561
- */
562
- /* async */ $$eval(selector, pageFunction, ...args) {return (fn => {
563
- const gen = fn.call(this);
564
- return new Promise((resolve, reject) => {
565
- function step(key, arg) {
566
- let info, value;
567
- try {
568
- info = gen[key](arg);
569
- value = info.value;
570
- } catch (error) {
571
- reject(error);
572
- return;
573
- }
574
- if (info.done) {
575
- resolve(value);
576
- } else {
577
- return Promise.resolve(value).then(
578
- value => {
579
- step('next', value);
580
- },
581
- err => {
582
- step('throw', err);
583
- });
584
- }
585
- }
586
- return step('next');
587
- });
588
- })(function*(){
589
- const context = (yield this._contextPromise);
590
- const arrayHandle = (yield context.evaluateHandle(selector => Array.from(document.querySelectorAll(selector)), selector));
591
- const result = (yield this.evaluate(pageFunction, arrayHandle, ...args));
592
- (yield arrayHandle.dispose());
593
- return result;
594
- });}
595
-
596
- /**
597
- * @param {string} selector
598
- * @return {!Promise<!Array<!ElementHandle>>}
599
- */
600
- /* async */ $$(selector) {return (fn => {
601
- const gen = fn.call(this);
602
- return new Promise((resolve, reject) => {
603
- function step(key, arg) {
604
- let info, value;
605
- try {
606
- info = gen[key](arg);
607
- value = info.value;
608
- } catch (error) {
609
- reject(error);
610
- return;
611
- }
612
- if (info.done) {
613
- resolve(value);
614
- } else {
615
- return Promise.resolve(value).then(
616
- value => {
617
- step('next', value);
618
- },
619
- err => {
620
- step('throw', err);
621
- });
622
- }
623
- }
624
- return step('next');
625
- });
626
- })(function*(){
627
- const document = (yield this._document());
628
- const value = (yield document.$$(selector));
629
- return value;
630
- });}
631
-
632
- /**
633
- * @return {!Promise<String>}
634
- */
635
- /* async */ content() {return (fn => {
636
- const gen = fn.call(this);
637
- return new Promise((resolve, reject) => {
638
- function step(key, arg) {
639
- let info, value;
640
- try {
641
- info = gen[key](arg);
642
- value = info.value;
643
- } catch (error) {
644
- reject(error);
645
- return;
646
- }
647
- if (info.done) {
648
- resolve(value);
649
- } else {
650
- return Promise.resolve(value).then(
651
- value => {
652
- step('next', value);
653
- },
654
- err => {
655
- step('throw', err);
656
- });
657
- }
658
- }
659
- return step('next');
660
- });
661
- })(function*(){
662
- return (yield this.evaluate(() => {
663
- let retVal = '';
664
- if (document.doctype)
665
- retVal = new XMLSerializer().serializeToString(document.doctype);
666
- if (document.documentElement)
667
- retVal += document.documentElement.outerHTML;
668
- return retVal;
669
- }));
670
- });}
671
-
672
- /**
673
- * @param {string} html
674
- */
675
- /* async */ setContent(html) {return (fn => {
676
- const gen = fn.call(this);
677
- return new Promise((resolve, reject) => {
678
- function step(key, arg) {
679
- let info, value;
680
- try {
681
- info = gen[key](arg);
682
- value = info.value;
683
- } catch (error) {
684
- reject(error);
685
- return;
686
- }
687
- if (info.done) {
688
- resolve(value);
689
- } else {
690
- return Promise.resolve(value).then(
691
- value => {
692
- step('next', value);
693
- },
694
- err => {
695
- step('throw', err);
696
- });
697
- }
698
- }
699
- return step('next');
700
- });
701
- })(function*(){
702
- (yield this.evaluate(html => {
703
- document.open();
704
- document.write(html);
705
- document.close();
706
- }, html));
707
- });}
708
-
709
- /**
710
- * @return {string}
711
- */
712
- name() {
713
- return this._name || '';
714
- }
715
-
716
- /**
717
- * @return {string}
718
- */
719
- url() {
720
- return this._url;
721
- }
722
-
723
- /**
724
- * @return {?Frame}
725
- */
726
- parentFrame() {
727
- return this._parentFrame;
728
- }
729
-
730
- /**
731
- * @return {!Array.<!Frame>}
732
- */
733
- childFrames() {
734
- return Array.from(this._childFrames);
735
- }
736
-
737
- /**
738
- * @return {boolean}
739
- */
740
- isDetached() {
741
- return this._detached;
742
- }
743
-
744
- /**
745
- * @param {Object} options
746
- * @return {!Promise<!ElementHandle>}
747
- */
748
- /* async */ addScriptTag(options) {return (fn => {
749
- const gen = fn.call(this);
750
- return new Promise((resolve, reject) => {
751
- function step(key, arg) {
752
- let info, value;
753
- try {
754
- info = gen[key](arg);
755
- value = info.value;
756
- } catch (error) {
757
- reject(error);
758
- return;
759
- }
760
- if (info.done) {
761
- resolve(value);
762
- } else {
763
- return Promise.resolve(value).then(
764
- value => {
765
- step('next', value);
766
- },
767
- err => {
768
- step('throw', err);
769
- });
770
- }
771
- }
772
- return step('next');
773
- });
774
- })(function*(){
775
- if (typeof options.url === 'string') {
776
- const url = options.url;
777
- try {
778
- const context = (yield this._contextPromise);
779
- return ((yield context.evaluateHandle(addScriptUrl, url, options.type))).asElement();
780
- } catch (error) {
781
- throw new Error(`Loading script from ${url} failed`);
782
- }
783
- }
784
-
785
- if (typeof options.path === 'string') {
786
- let contents = (yield readFileAsync(options.path, 'utf8'));
787
- contents += '//# sourceURL=' + options.path.replace(/\n/g, '');
788
- const context = (yield this._contextPromise);
789
- return ((yield context.evaluateHandle(addScriptContent, contents, options.type))).asElement();
790
- }
791
-
792
- if (typeof options.content === 'string') {
793
- const context = (yield this._contextPromise);
794
- return ((yield context.evaluateHandle(addScriptContent, options.content, options.type))).asElement();
795
- }
796
-
797
- throw new Error('Provide an object with a `url`, `path` or `content` property');
798
-
799
- /**
800
- * @param {string} url
801
- * @param {string} type
802
- * @return {!Promise<!HTMLElement>}
803
- */
804
- /* async */ function addScriptUrl(url, type) {return (fn => {
805
- const gen = fn.call(this);
806
- return new Promise((resolve, reject) => {
807
- function step(key, arg) {
808
- let info, value;
809
- try {
810
- info = gen[key](arg);
811
- value = info.value;
812
- } catch (error) {
813
- reject(error);
814
- return;
815
- }
816
- if (info.done) {
817
- resolve(value);
818
- } else {
819
- return Promise.resolve(value).then(
820
- value => {
821
- step('next', value);
822
- },
823
- err => {
824
- step('throw', err);
825
- });
826
- }
827
- }
828
- return step('next');
829
- });
830
- })(function*(){
831
- const script = document.createElement('script');
832
- script.src = url;
833
- if (type)
834
- script.type = type;
835
- const promise = new Promise((res, rej) => {
836
- script.onload = res;
837
- script.onerror = rej;
838
- });
839
- document.head.appendChild(script);
840
- (yield promise);
841
- return script;
842
- });}
843
-
844
- /**
845
- * @param {string} content
846
- * @param {string} type
847
- * @return {!HTMLElement}
848
- */
849
- function addScriptContent(content, type = 'text/javascript') {
850
- const script = document.createElement('script');
851
- script.type = type;
852
- script.text = content;
853
- let error = null;
854
- script.onerror = e => error = e;
855
- document.head.appendChild(script);
856
- if (error)
857
- throw error;
858
- return script;
859
- }
860
- });}
861
-
862
- /**
863
- * @param {Object} options
864
- * @return {!Promise<!ElementHandle>}
865
- */
866
- /* async */ addStyleTag(options) {return (fn => {
867
- const gen = fn.call(this);
868
- return new Promise((resolve, reject) => {
869
- function step(key, arg) {
870
- let info, value;
871
- try {
872
- info = gen[key](arg);
873
- value = info.value;
874
- } catch (error) {
875
- reject(error);
876
- return;
877
- }
878
- if (info.done) {
879
- resolve(value);
880
- } else {
881
- return Promise.resolve(value).then(
882
- value => {
883
- step('next', value);
884
- },
885
- err => {
886
- step('throw', err);
887
- });
888
- }
889
- }
890
- return step('next');
891
- });
892
- })(function*(){
893
- if (typeof options.url === 'string') {
894
- const url = options.url;
895
- try {
896
- const context = (yield this._contextPromise);
897
- return ((yield context.evaluateHandle(addStyleUrl, url))).asElement();
898
- } catch (error) {
899
- throw new Error(`Loading style from ${url} failed`);
900
- }
901
- }
902
-
903
- if (typeof options.path === 'string') {
904
- let contents = (yield readFileAsync(options.path, 'utf8'));
905
- contents += '/*# sourceURL=' + options.path.replace(/\n/g, '') + '*/';
906
- const context = (yield this._contextPromise);
907
- return ((yield context.evaluateHandle(addStyleContent, contents))).asElement();
908
- }
909
-
910
- if (typeof options.content === 'string') {
911
- const context = (yield this._contextPromise);
912
- return ((yield context.evaluateHandle(addStyleContent, options.content))).asElement();
913
- }
914
-
915
- throw new Error('Provide an object with a `url`, `path` or `content` property');
916
-
917
- /**
918
- * @param {string} url
919
- * @return {!Promise<!HTMLElement>}
920
- */
921
- /* async */ function addStyleUrl(url) {return (fn => {
922
- const gen = fn.call(this);
923
- return new Promise((resolve, reject) => {
924
- function step(key, arg) {
925
- let info, value;
926
- try {
927
- info = gen[key](arg);
928
- value = info.value;
929
- } catch (error) {
930
- reject(error);
931
- return;
932
- }
933
- if (info.done) {
934
- resolve(value);
935
- } else {
936
- return Promise.resolve(value).then(
937
- value => {
938
- step('next', value);
939
- },
940
- err => {
941
- step('throw', err);
942
- });
943
- }
944
- }
945
- return step('next');
946
- });
947
- })(function*(){
948
- const link = document.createElement('link');
949
- link.rel = 'stylesheet';
950
- link.href = url;
951
- const promise = new Promise((res, rej) => {
952
- link.onload = res;
953
- link.onerror = rej;
954
- });
955
- document.head.appendChild(link);
956
- (yield promise);
957
- return link;
958
- });}
959
-
960
- /**
961
- * @param {string} content
962
- * @return {!Promise<!HTMLElement>}
963
- */
964
- /* async */ function addStyleContent(content) {return (fn => {
965
- const gen = fn.call(this);
966
- return new Promise((resolve, reject) => {
967
- function step(key, arg) {
968
- let info, value;
969
- try {
970
- info = gen[key](arg);
971
- value = info.value;
972
- } catch (error) {
973
- reject(error);
974
- return;
975
- }
976
- if (info.done) {
977
- resolve(value);
978
- } else {
979
- return Promise.resolve(value).then(
980
- value => {
981
- step('next', value);
982
- },
983
- err => {
984
- step('throw', err);
985
- });
986
- }
987
- }
988
- return step('next');
989
- });
990
- })(function*(){
991
- const style = document.createElement('style');
992
- style.type = 'text/css';
993
- style.appendChild(document.createTextNode(content));
994
- const promise = new Promise((res, rej) => {
995
- style.onload = res;
996
- style.onerror = rej;
997
- });
998
- document.head.appendChild(style);
999
- (yield promise);
1000
- return style;
1001
- });}
1002
- });}
1003
-
1004
- /**
1005
- * @param {string} selector
1006
- * @param {!Object=} options
1007
- */
1008
- /* async */ click(selector, options = {}) {return (fn => {
1009
- const gen = fn.call(this);
1010
- return new Promise((resolve, reject) => {
1011
- function step(key, arg) {
1012
- let info, value;
1013
- try {
1014
- info = gen[key](arg);
1015
- value = info.value;
1016
- } catch (error) {
1017
- reject(error);
1018
- return;
1019
- }
1020
- if (info.done) {
1021
- resolve(value);
1022
- } else {
1023
- return Promise.resolve(value).then(
1024
- value => {
1025
- step('next', value);
1026
- },
1027
- err => {
1028
- step('throw', err);
1029
- });
1030
- }
1031
- }
1032
- return step('next');
1033
- });
1034
- })(function*(){
1035
- const handle = (yield this.$(selector));
1036
- console.assert(handle, 'No node found for selector: ' + selector);
1037
- (yield handle.click(options));
1038
- (yield handle.dispose());
1039
- });}
1040
-
1041
- /**
1042
- * @param {string} selector
1043
- */
1044
- /* async */ focus(selector) {return (fn => {
1045
- const gen = fn.call(this);
1046
- return new Promise((resolve, reject) => {
1047
- function step(key, arg) {
1048
- let info, value;
1049
- try {
1050
- info = gen[key](arg);
1051
- value = info.value;
1052
- } catch (error) {
1053
- reject(error);
1054
- return;
1055
- }
1056
- if (info.done) {
1057
- resolve(value);
1058
- } else {
1059
- return Promise.resolve(value).then(
1060
- value => {
1061
- step('next', value);
1062
- },
1063
- err => {
1064
- step('throw', err);
1065
- });
1066
- }
1067
- }
1068
- return step('next');
1069
- });
1070
- })(function*(){
1071
- const handle = (yield this.$(selector));
1072
- console.assert(handle, 'No node found for selector: ' + selector);
1073
- (yield handle.focus());
1074
- (yield handle.dispose());
1075
- });}
1076
-
1077
- /**
1078
- * @param {string} selector
1079
- */
1080
- /* async */ hover(selector) {return (fn => {
1081
- const gen = fn.call(this);
1082
- return new Promise((resolve, reject) => {
1083
- function step(key, arg) {
1084
- let info, value;
1085
- try {
1086
- info = gen[key](arg);
1087
- value = info.value;
1088
- } catch (error) {
1089
- reject(error);
1090
- return;
1091
- }
1092
- if (info.done) {
1093
- resolve(value);
1094
- } else {
1095
- return Promise.resolve(value).then(
1096
- value => {
1097
- step('next', value);
1098
- },
1099
- err => {
1100
- step('throw', err);
1101
- });
1102
- }
1103
- }
1104
- return step('next');
1105
- });
1106
- })(function*(){
1107
- const handle = (yield this.$(selector));
1108
- console.assert(handle, 'No node found for selector: ' + selector);
1109
- (yield handle.hover());
1110
- (yield handle.dispose());
1111
- });}
1112
-
1113
- /**
1114
- * @param {string} selector
1115
- * @param {!Array<string>} values
1116
- * @return {!Promise<!Array<string>>}
1117
- */
1118
- select(selector, ...values){
1119
- for (const value of values)
1120
- console.assert(helper.isString(value), 'Values must be strings. Found value "' + value + '" of type "' + (typeof value) + '"');
1121
- return this.$eval(selector, (element, values) => {
1122
- if (element.nodeName.toLowerCase() !== 'select')
1123
- throw new Error('Element is not a <select> element.');
1124
-
1125
- const options = Array.from(element.options);
1126
- element.value = undefined;
1127
- for (const option of options) {
1128
- option.selected = values.includes(option.value);
1129
- if (option.selected && !element.multiple)
1130
- break;
1131
- }
1132
- element.dispatchEvent(new Event('input', { 'bubbles': true }));
1133
- element.dispatchEvent(new Event('change', { 'bubbles': true }));
1134
- return options.filter(option => option.selected).map(option => option.value);
1135
- }, values);
1136
- }
1137
-
1138
- /**
1139
- * @param {string} selector
1140
- */
1141
- /* async */ tap(selector) {return (fn => {
1142
- const gen = fn.call(this);
1143
- return new Promise((resolve, reject) => {
1144
- function step(key, arg) {
1145
- let info, value;
1146
- try {
1147
- info = gen[key](arg);
1148
- value = info.value;
1149
- } catch (error) {
1150
- reject(error);
1151
- return;
1152
- }
1153
- if (info.done) {
1154
- resolve(value);
1155
- } else {
1156
- return Promise.resolve(value).then(
1157
- value => {
1158
- step('next', value);
1159
- },
1160
- err => {
1161
- step('throw', err);
1162
- });
1163
- }
1164
- }
1165
- return step('next');
1166
- });
1167
- })(function*(){
1168
- const handle = (yield this.$(selector));
1169
- console.assert(handle, 'No node found for selector: ' + selector);
1170
- (yield handle.tap());
1171
- (yield handle.dispose());
1172
- });}
1173
-
1174
- /**
1175
- * @param {string} selector
1176
- * @param {string} text
1177
- * @param {{delay: (number|undefined)}=} options
1178
- */
1179
- /* async */ type(selector, text, options) {return (fn => {
1180
- const gen = fn.call(this);
1181
- return new Promise((resolve, reject) => {
1182
- function step(key, arg) {
1183
- let info, value;
1184
- try {
1185
- info = gen[key](arg);
1186
- value = info.value;
1187
- } catch (error) {
1188
- reject(error);
1189
- return;
1190
- }
1191
- if (info.done) {
1192
- resolve(value);
1193
- } else {
1194
- return Promise.resolve(value).then(
1195
- value => {
1196
- step('next', value);
1197
- },
1198
- err => {
1199
- step('throw', err);
1200
- });
1201
- }
1202
- }
1203
- return step('next');
1204
- });
1205
- })(function*(){
1206
- const handle = (yield this.$(selector));
1207
- console.assert(handle, 'No node found for selector: ' + selector);
1208
- (yield handle.type(text, options));
1209
- (yield handle.dispose());
1210
- });}
1211
-
1212
- /**
1213
- * @param {(string|number|Function)} selectorOrFunctionOrTimeout
1214
- * @param {!Object=} options
1215
- * @param {!Array<*>} args
1216
- * @return {!Promise}
1217
- */
1218
- waitFor(selectorOrFunctionOrTimeout, options = {}, ...args) {
1219
- const xPathPattern = '//';
1220
-
1221
- if (helper.isString(selectorOrFunctionOrTimeout)) {
1222
- const string = /** @type {string} */ (selectorOrFunctionOrTimeout);
1223
- if (string.startsWith(xPathPattern))
1224
- return this.waitForXPath(string, options);
1225
- return this.waitForSelector(string, options);
1226
- }
1227
- if (helper.isNumber(selectorOrFunctionOrTimeout))
1228
- return new Promise(fulfill => setTimeout(fulfill, selectorOrFunctionOrTimeout));
1229
- if (typeof selectorOrFunctionOrTimeout === 'function')
1230
- return this.waitForFunction(selectorOrFunctionOrTimeout, options, ...args);
1231
- return Promise.reject(new Error('Unsupported target type: ' + (typeof selectorOrFunctionOrTimeout)));
1232
- }
1233
-
1234
- /**
1235
- * @param {string} selector
1236
- * @param {!Object=} options
1237
- * @return {!Promise}
1238
- */
1239
- waitForSelector(selector, options = {}) {
1240
- return this._waitForSelectorOrXPath(selector, false, options);
1241
- }
1242
-
1243
- /**
1244
- * @param {string} xpath
1245
- * @param {!Object=} options
1246
- * @return {!Promise}
1247
- */
1248
- waitForXPath(xpath, options = {}) {
1249
- return this._waitForSelectorOrXPath(xpath, true, options);
1250
- }
1251
-
1252
- /**
1253
- * @param {Function|string} pageFunction
1254
- * @param {!Object=} options
1255
- * @return {!Promise}
1256
- */
1257
- waitForFunction(pageFunction, options = {}, ...args) {
1258
- const timeout = helper.isNumber(options.timeout) ? options.timeout : 30000;
1259
- const polling = options.polling || 'raf';
1260
- return new WaitTask(this, pageFunction, 'function', polling, timeout, ...args).promise;
1261
- }
1262
-
1263
- /**
1264
- * @return {!Promise<string>}
1265
- */
1266
- /* async */ title() {return (fn => {
1267
- const gen = fn.call(this);
1268
- return new Promise((resolve, reject) => {
1269
- function step(key, arg) {
1270
- let info, value;
1271
- try {
1272
- info = gen[key](arg);
1273
- value = info.value;
1274
- } catch (error) {
1275
- reject(error);
1276
- return;
1277
- }
1278
- if (info.done) {
1279
- resolve(value);
1280
- } else {
1281
- return Promise.resolve(value).then(
1282
- value => {
1283
- step('next', value);
1284
- },
1285
- err => {
1286
- step('throw', err);
1287
- });
1288
- }
1289
- }
1290
- return step('next');
1291
- });
1292
- })(function*(){
1293
- return this.evaluate(() => document.title);
1294
- });}
1295
-
1296
- /**
1297
- * @param {string} selectorOrXPath
1298
- * @param {boolean} isXPath
1299
- * @param {!Object=} options
1300
- * @return {!Promise}
1301
- */
1302
- _waitForSelectorOrXPath(selectorOrXPath, isXPath, options = {}) {
1303
- const waitForVisible = !!options.visible;
1304
- const waitForHidden = !!options.hidden;
1305
- const polling = waitForVisible || waitForHidden ? 'raf' : 'mutation';
1306
- const timeout = helper.isNumber(options.timeout) ? options.timeout : 30000;
1307
- return new WaitTask(this, predicate, `${isXPath ? 'XPath' : 'selector'} "${selectorOrXPath}"`, polling, timeout, selectorOrXPath, isXPath, waitForVisible, waitForHidden).promise;
1308
-
1309
- /**
1310
- * @param {string} selectorOrXPath
1311
- * @param {boolean} isXPath
1312
- * @param {boolean} waitForVisible
1313
- * @param {boolean} waitForHidden
1314
- * @return {?Node|boolean}
1315
- */
1316
- function predicate(selectorOrXPath, isXPath, waitForVisible, waitForHidden) {
1317
- const node = isXPath
1318
- ? document.evaluate(selectorOrXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
1319
- : document.querySelector(selectorOrXPath);
1320
- if (!node)
1321
- return waitForHidden;
1322
- if (!waitForVisible && !waitForHidden)
1323
- return node;
1324
- const element = /** @type {Element} */ (node.nodeType === Node.TEXT_NODE ? node.parentElement : node);
1325
-
1326
- const style = window.getComputedStyle(element);
1327
- const isVisible = style && style.visibility !== 'hidden' && hasVisibleBoundingBox();
1328
- const success = (waitForVisible === isVisible || waitForHidden === !isVisible);
1329
- return success ? node : null;
1330
-
1331
- /**
1332
- * @return {boolean}
1333
- */
1334
- function hasVisibleBoundingBox() {
1335
- const rect = element.getBoundingClientRect();
1336
- return !!(rect.top || rect.bottom || rect.width || rect.height);
1337
- }
1338
- }
1339
- }
1340
-
1341
- /**
1342
- * @param {!Protocol.Page.Frame} framePayload
1343
- */
1344
- _navigated(framePayload) {
1345
- this._name = framePayload.name;
1346
- // TODO(lushnikov): remove this once requestInterception has loaderId exposed.
1347
- this._navigationURL = framePayload.url;
1348
- this._url = framePayload.url;
1349
- }
1350
-
1351
- /**
1352
- * @param {string} url
1353
- */
1354
- _navigatedWithinDocument(url) {
1355
- this._url = url;
1356
- }
1357
-
1358
- /**
1359
- * @param {string} loaderId
1360
- * @param {string} name
1361
- */
1362
- _onLifecycleEvent(loaderId, name) {
1363
- if (name === 'init') {
1364
- this._loaderId = loaderId;
1365
- this._lifecycleEvents.clear();
1366
- }
1367
- this._lifecycleEvents.add(name);
1368
- }
1369
-
1370
- _onLoadingStopped() {
1371
- this._lifecycleEvents.add('DOMContentLoaded');
1372
- this._lifecycleEvents.add('load');
1373
- }
1374
-
1375
- _detach() {
1376
- for (const waitTask of this._waitTasks)
1377
- waitTask.terminate(new Error('waitForFunction failed: frame got detached.'));
1378
- this._detached = true;
1379
- if (this._parentFrame)
1380
- this._parentFrame._childFrames.delete(this);
1381
- this._parentFrame = null;
1382
- }
1383
- }
1384
- helper.tracePublicAPI(Frame);
1385
-
1386
- class WaitTask {
1387
- /**
1388
- * @param {!Frame} frame
1389
- * @param {Function|string} predicateBody
1390
- * @param {string|number} polling
1391
- * @param {number} timeout
1392
- * @param {!Array<*>} args
1393
- */
1394
- constructor(frame, predicateBody, title, polling, timeout, ...args) {
1395
- if (helper.isString(polling))
1396
- console.assert(polling === 'raf' || polling === 'mutation', 'Unknown polling option: ' + polling);
1397
- else if (helper.isNumber(polling))
1398
- console.assert(polling > 0, 'Cannot poll with non-positive interval: ' + polling);
1399
- else
1400
- throw new Error('Unknown polling options: ' + polling);
1401
-
1402
- this._frame = frame;
1403
- this._polling = polling;
1404
- this._timeout = timeout;
1405
- this._predicateBody = helper.isString(predicateBody) ? 'return ' + predicateBody : 'return (' + predicateBody + ')(...args)';
1406
- this._args = args;
1407
- this._runCount = 0;
1408
- frame._waitTasks.add(this);
1409
- this.promise = new Promise((resolve, reject) => {
1410
- this._resolve = resolve;
1411
- this._reject = reject;
1412
- });
1413
- // Since page navigation requires us to re-install the pageScript, we should track
1414
- // timeout on our end.
1415
- if (timeout)
1416
- this._timeoutTimer = setTimeout(() => this.terminate(new Error(`waiting for ${title} failed: timeout ${timeout}ms exceeded`)), timeout);
1417
- this.rerun();
1418
- }
1419
-
1420
- /**
1421
- * @param {!Error} error
1422
- */
1423
- terminate(error) {
1424
- this._terminated = true;
1425
- this._reject(error);
1426
- this._cleanup();
1427
- }
1428
-
1429
- /* async */ rerun() {return (fn => {
1430
- const gen = fn.call(this);
1431
- return new Promise((resolve, reject) => {
1432
- function step(key, arg) {
1433
- let info, value;
1434
- try {
1435
- info = gen[key](arg);
1436
- value = info.value;
1437
- } catch (error) {
1438
- reject(error);
1439
- return;
1440
- }
1441
- if (info.done) {
1442
- resolve(value);
1443
- } else {
1444
- return Promise.resolve(value).then(
1445
- value => {
1446
- step('next', value);
1447
- },
1448
- err => {
1449
- step('throw', err);
1450
- });
1451
- }
1452
- }
1453
- return step('next');
1454
- });
1455
- })(function*(){
1456
- const runCount = ++this._runCount;
1457
- /** @type {?JSHandle} */
1458
- let success = null;
1459
- let error = null;
1460
- try {
1461
- success = (yield ((yield this._frame.executionContext())).evaluateHandle(waitForPredicatePageFunction, this._predicateBody, this._polling, this._timeout, ...this._args));
1462
- } catch (e) {
1463
- error = e;
1464
- }
1465
-
1466
- if (this._terminated || runCount !== this._runCount) {
1467
- if (success)
1468
- (yield success.dispose());
1469
- return;
1470
- }
1471
-
1472
- // Ignore timeouts in pageScript - we track timeouts ourselves.
1473
- if (!error && (yield this._frame.evaluate(s => !s, success))) {
1474
- (yield success.dispose());
1475
- return;
1476
- }
1477
-
1478
- // When the page is navigated, the promise is rejected.
1479
- // We will try again in the new execution context.
1480
- if (error && error.message.includes('Execution context was destroyed'))
1481
- return;
1482
-
1483
- // We could have tried to evaluate in a context which was already
1484
- // destroyed.
1485
- if (error && error.message.includes('Cannot find context with specified id'))
1486
- return;
1487
-
1488
- if (error)
1489
- this._reject(error);
1490
- else
1491
- this._resolve(success);
1492
-
1493
- this._cleanup();
1494
- });}
1495
-
1496
- _cleanup() {
1497
- clearTimeout(this._timeoutTimer);
1498
- this._frame._waitTasks.delete(this);
1499
- this._runningTask = null;
1500
- }
1501
- }
1502
-
1503
- /**
1504
- * @param {string} predicateBody
1505
- * @param {string} polling
1506
- * @param {number} timeout
1507
- * @return {!Promise<*>}
1508
- */
1509
- /* async */ function waitForPredicatePageFunction(predicateBody, polling, timeout, ...args) {return (fn => {
1510
- const gen = fn.call(this);
1511
- return new Promise((resolve, reject) => {
1512
- function step(key, arg) {
1513
- let info, value;
1514
- try {
1515
- info = gen[key](arg);
1516
- value = info.value;
1517
- } catch (error) {
1518
- reject(error);
1519
- return;
1520
- }
1521
- if (info.done) {
1522
- resolve(value);
1523
- } else {
1524
- return Promise.resolve(value).then(
1525
- value => {
1526
- step('next', value);
1527
- },
1528
- err => {
1529
- step('throw', err);
1530
- });
1531
- }
1532
- }
1533
- return step('next');
1534
- });
1535
- })(function*(){
1536
- const predicate = new Function('...args', predicateBody);
1537
- let timedOut = false;
1538
- setTimeout(() => timedOut = true, timeout);
1539
- if (polling === 'raf')
1540
- return (yield pollRaf());
1541
- if (polling === 'mutation')
1542
- return (yield pollMutation());
1543
- if (typeof polling === 'number')
1544
- return (yield pollInterval(polling));
1545
-
1546
- /**
1547
- * @return {!Promise<*>}
1548
- */
1549
- function pollMutation() {
1550
- const success = predicate.apply(null, args);
1551
- if (success)
1552
- return Promise.resolve(success);
1553
-
1554
- let fulfill;
1555
- const result = new Promise(x => fulfill = x);
1556
- const observer = new MutationObserver(mutations => {
1557
- if (timedOut) {
1558
- observer.disconnect();
1559
- fulfill();
1560
- }
1561
- const success = predicate.apply(null, args);
1562
- if (success) {
1563
- observer.disconnect();
1564
- fulfill(success);
1565
- }
1566
- });
1567
- observer.observe(document, {
1568
- childList: true,
1569
- subtree: true,
1570
- attributes: true
1571
- });
1572
- return result;
1573
- }
1574
-
1575
- /**
1576
- * @return {!Promise<*>}
1577
- */
1578
- function pollRaf() {
1579
- let fulfill;
1580
- const result = new Promise(x => fulfill = x);
1581
- onRaf();
1582
- return result;
1583
-
1584
- function onRaf() {
1585
- if (timedOut) {
1586
- fulfill();
1587
- return;
1588
- }
1589
- const success = predicate.apply(null, args);
1590
- if (success)
1591
- fulfill(success);
1592
- else
1593
- requestAnimationFrame(onRaf);
1594
- }
1595
- }
1596
-
1597
- /**
1598
- * @param {number} pollInterval
1599
- * @return {!Promise<*>}
1600
- */
1601
- function pollInterval(pollInterval) {
1602
- let fulfill;
1603
- const result = new Promise(x => fulfill = x);
1604
- onTimeout();
1605
- return result;
1606
-
1607
- function onTimeout() {
1608
- if (timedOut) {
1609
- fulfill();
1610
- return;
1611
- }
1612
- const success = predicate.apply(null, args);
1613
- if (success)
1614
- fulfill(success);
1615
- else
1616
- setTimeout(onTimeout, pollInterval);
1617
- }
1618
- }
1619
- });}
1620
-
1621
- module.exports = {FrameManager, Frame};