opal 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (734) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +19 -0
  3. data/.gitmodules +1 -1
  4. data/.jshintrc +1 -2
  5. data/.rspec +1 -2
  6. data/.travis.yml +42 -20
  7. data/.yardopts +3 -1
  8. data/CHANGELOG.md +164 -1
  9. data/Gemfile +16 -9
  10. data/HACKING.md +4 -2
  11. data/README.md +11 -11
  12. data/Rakefile +1 -1
  13. data/appveyor.yml +29 -0
  14. data/benchmark/bm_constant_lookup_big.rb +799 -0
  15. data/benchmark/bm_constant_lookup_small.rb +59 -0
  16. data/benchmark/bm_module_definition_big.rb +400 -0
  17. data/benchmark/bm_module_definition_small.rb +30 -0
  18. data/benchmark-ips/bm_case.rb +33 -0
  19. data/benchmark-ips/bm_constants_lookup.rb +13 -0
  20. data/benchmark-ips/bm_is_number.rb +29 -0
  21. data/benchmark-ips/bm_symbol_to_proc.rb +19 -0
  22. data/bin +1 -0
  23. data/docs/compiled_ruby.md +16 -14
  24. data/docs/faq.md +3 -3
  25. data/docs/headless_chrome.md +105 -0
  26. data/docs/rspec.md +4 -20
  27. data/docs/unsupported_features.md +6 -4
  28. data/examples/rack/Gemfile +1 -0
  29. data/examples/rack/Gemfile.lock +11 -7
  30. data/examples/rack/app/application.rb +14 -3
  31. data/examples/rack/app/user.rb +2 -0
  32. data/examples/rack/config.ru +1 -1
  33. data/examples/rack/index.html.erb +1 -0
  34. data/examples/sinatra/Gemfile +1 -1
  35. data/examples/sinatra/Gemfile.lock +8 -11
  36. data/examples/sinatra/app/application.rb +2 -0
  37. data/{bin → exe}/opal +4 -2
  38. data/{bin → exe}/opal-repl +23 -1
  39. data/lib/opal/ast/builder.rb +13 -0
  40. data/lib/opal/ast/node.rb +30 -0
  41. data/lib/opal/builder.rb +82 -17
  42. data/lib/opal/builder_processors.rb +9 -7
  43. data/lib/opal/cli.rb +45 -59
  44. data/lib/opal/cli_options.rb +19 -12
  45. data/lib/opal/cli_runners/applescript.rb +3 -4
  46. data/lib/opal/cli_runners/chrome.js +135 -0
  47. data/lib/opal/cli_runners/chrome.rb +100 -0
  48. data/lib/opal/cli_runners/nashorn.rb +1 -1
  49. data/lib/opal/cli_runners/node_modules/.bin/chrome-remote-interface +1 -0
  50. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/LICENSE +18 -0
  51. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/README.md +843 -0
  52. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/bin/client.js +326 -0
  53. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/chrome-remote-interface.js +11 -0
  54. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/index.js +39 -0
  55. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/api.js +84 -0
  56. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/chrome.js +289 -0
  57. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/defaults.js +4 -0
  58. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/devtools.js +245 -0
  59. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/external-request.js +23 -0
  60. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/protocol.json +13303 -0
  61. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/lib/websocket-wrapper.js +32 -0
  62. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/package.json +128 -0
  63. data/lib/opal/cli_runners/node_modules/chrome-remote-interface/webpack.config.js +55 -0
  64. data/lib/opal/cli_runners/node_modules/commander/Readme.md +195 -0
  65. data/lib/opal/cli_runners/node_modules/commander/index.js +851 -0
  66. data/lib/opal/cli_runners/node_modules/commander/package.json +92 -0
  67. data/{stdlib/nodejs/node_modules/js-yaml/node_modules/argparse → lib/opal/cli_runners/node_modules/ultron}/LICENSE +7 -6
  68. data/lib/opal/cli_runners/node_modules/ultron/index.js +138 -0
  69. data/lib/opal/cli_runners/node_modules/ultron/package.json +112 -0
  70. data/{stdlib/nodejs/node_modules/js-yaml → lib/opal/cli_runners/node_modules/ws}/LICENSE +6 -6
  71. data/lib/opal/cli_runners/node_modules/ws/README.md +259 -0
  72. data/lib/opal/cli_runners/node_modules/ws/SECURITY.md +33 -0
  73. data/lib/opal/cli_runners/node_modules/ws/index.js +15 -0
  74. data/lib/opal/cli_runners/node_modules/ws/lib/BufferUtil.fallback.js +56 -0
  75. data/lib/opal/cli_runners/node_modules/ws/lib/BufferUtil.js +15 -0
  76. data/lib/opal/cli_runners/node_modules/ws/lib/ErrorCodes.js +28 -0
  77. data/lib/opal/cli_runners/node_modules/ws/lib/EventTarget.js +158 -0
  78. data/lib/opal/cli_runners/node_modules/ws/lib/Extensions.js +69 -0
  79. data/lib/opal/cli_runners/node_modules/ws/lib/PerMessageDeflate.js +339 -0
  80. data/lib/opal/cli_runners/node_modules/ws/lib/Receiver.js +520 -0
  81. data/lib/opal/cli_runners/node_modules/ws/lib/Sender.js +438 -0
  82. data/lib/opal/cli_runners/node_modules/ws/lib/Validation.fallback.js +9 -0
  83. data/lib/opal/cli_runners/node_modules/ws/lib/Validation.js +17 -0
  84. data/lib/opal/cli_runners/node_modules/ws/lib/WebSocket.js +705 -0
  85. data/lib/opal/cli_runners/node_modules/ws/lib/WebSocketServer.js +336 -0
  86. data/lib/opal/cli_runners/node_modules/ws/package.json +122 -0
  87. data/lib/opal/cli_runners/nodejs.rb +4 -2
  88. data/lib/opal/cli_runners/package.json +5 -0
  89. data/lib/opal/cli_runners/server.rb +1 -1
  90. data/lib/opal/cli_runners.rb +2 -1
  91. data/lib/opal/compiler.rb +136 -95
  92. data/lib/opal/config.rb +114 -36
  93. data/lib/opal/deprecations.rb +18 -0
  94. data/lib/opal/eof_content.rb +36 -0
  95. data/lib/opal/erb.rb +1 -0
  96. data/lib/opal/errors.rb +1 -0
  97. data/lib/opal/fragment.rb +1 -0
  98. data/lib/opal/nodes/arglist.rb +2 -1
  99. data/lib/opal/nodes/args/initialize_kwargs.rb +1 -0
  100. data/lib/opal/nodes/args/kwarg.rb +9 -7
  101. data/lib/opal/nodes/args/kwoptarg.rb +13 -8
  102. data/lib/opal/nodes/args/kwrestarg.rb +5 -5
  103. data/lib/opal/nodes/args/mlhsarg.rb +3 -2
  104. data/lib/opal/nodes/args/normarg.rb +6 -7
  105. data/lib/opal/nodes/args/optarg.rb +5 -7
  106. data/lib/opal/nodes/args/post_args.rb +6 -5
  107. data/lib/opal/nodes/args/post_kwargs.rb +1 -0
  108. data/lib/opal/nodes/args/restarg.rb +7 -7
  109. data/lib/opal/nodes/array.rb +1 -0
  110. data/lib/opal/nodes/base.rb +24 -3
  111. data/lib/opal/nodes/call.rb +168 -155
  112. data/lib/opal/nodes/call_special.rb +37 -214
  113. data/lib/opal/nodes/case.rb +36 -22
  114. data/lib/opal/nodes/class.rb +4 -3
  115. data/lib/opal/nodes/constants.rb +28 -48
  116. data/lib/opal/nodes/csend.rb +25 -0
  117. data/lib/opal/nodes/def.rb +57 -17
  118. data/lib/opal/nodes/defined.rb +170 -60
  119. data/lib/opal/nodes/definitions.rb +42 -133
  120. data/lib/opal/nodes/defs.rb +29 -0
  121. data/lib/opal/nodes/hash.rb +12 -35
  122. data/lib/opal/nodes/helpers.rb +31 -62
  123. data/lib/opal/nodes/if.rb +21 -32
  124. data/lib/opal/nodes/inline_args.rb +12 -13
  125. data/lib/opal/nodes/iter.rb +61 -36
  126. data/lib/opal/nodes/literal.rb +206 -114
  127. data/lib/opal/nodes/logic.rb +39 -57
  128. data/lib/opal/nodes/masgn.rb +20 -18
  129. data/lib/opal/nodes/module.rb +10 -11
  130. data/lib/opal/nodes/node_with_args.rb +15 -18
  131. data/lib/opal/nodes/rescue.rb +37 -70
  132. data/lib/opal/nodes/runtime_helpers.rb +8 -3
  133. data/lib/opal/nodes/scope.rb +10 -5
  134. data/lib/opal/nodes/singleton_class.rb +4 -3
  135. data/lib/opal/nodes/super.rb +112 -88
  136. data/lib/opal/nodes/top.rb +7 -2
  137. data/lib/opal/nodes/variables.rb +57 -35
  138. data/lib/opal/nodes/while.rb +11 -1
  139. data/lib/opal/nodes/yield.rb +1 -17
  140. data/lib/opal/nodes.rb +3 -1
  141. data/lib/opal/parser.rb +29 -766
  142. data/lib/opal/path_reader.rb +22 -5
  143. data/lib/opal/paths.rb +10 -4
  144. data/lib/opal/regexp_anchors.rb +1 -0
  145. data/lib/opal/rewriter.rb +64 -0
  146. data/lib/opal/rewriters/base.rb +63 -0
  147. data/lib/opal/rewriters/binary_operator_assignment.rb +141 -0
  148. data/lib/opal/rewriters/block_to_iter.rb +17 -0
  149. data/lib/opal/rewriters/break_finder.rb +34 -0
  150. data/lib/opal/rewriters/dot_js_syntax.rb +60 -0
  151. data/lib/opal/rewriters/explicit_writer_return.rb +58 -0
  152. data/lib/opal/rewriters/for_rewriter.rb +93 -0
  153. data/lib/opal/rewriters/hashes/key_duplicates_rewriter.rb +58 -0
  154. data/lib/opal/rewriters/js_reserved_words.rb +108 -0
  155. data/lib/opal/rewriters/logical_operator_assignment.rb +154 -0
  156. data/lib/opal/rewriters/opal_engine_check.rb +42 -0
  157. data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +67 -0
  158. data/lib/opal/server.rb +4 -0
  159. data/lib/opal/simple_server.rb +101 -0
  160. data/lib/opal/source_map.rb +1 -1
  161. data/lib/opal/util.rb +6 -6
  162. data/lib/opal/version.rb +2 -1
  163. data/lib/opal.rb +7 -1
  164. data/lib/tilt/opal.rb +1 -0
  165. data/opal/README.md +1 -1
  166. data/opal/corelib/array.rb +184 -107
  167. data/opal/corelib/basic_object.rb +6 -6
  168. data/opal/corelib/boolean.rb +11 -3
  169. data/opal/corelib/class.rb +14 -11
  170. data/opal/corelib/comparable.rb +16 -0
  171. data/opal/corelib/complex.rb +5 -1
  172. data/opal/corelib/constants.rb +3 -3
  173. data/opal/corelib/enumerable.rb +176 -11
  174. data/opal/corelib/error.rb +35 -17
  175. data/opal/corelib/file.rb +114 -176
  176. data/opal/corelib/hash.rb +226 -13
  177. data/opal/corelib/helpers.rb +12 -15
  178. data/opal/corelib/io.rb +3 -2
  179. data/opal/corelib/kernel.rb +68 -32
  180. data/opal/corelib/marshal/read_buffer.rb +288 -150
  181. data/opal/corelib/marshal/write_buffer.rb +27 -2
  182. data/opal/corelib/method.rb +33 -13
  183. data/opal/corelib/module.rb +134 -82
  184. data/opal/corelib/nil.rb +11 -3
  185. data/opal/corelib/number.rb +220 -34
  186. data/opal/corelib/numeric.rb +3 -11
  187. data/opal/corelib/process.rb +44 -4
  188. data/opal/corelib/random/seedrandom.js.rb +15 -0
  189. data/opal/corelib/random.rb +117 -0
  190. data/opal/corelib/range.rb +147 -24
  191. data/opal/corelib/regexp.rb +82 -13
  192. data/opal/corelib/runtime.js +623 -397
  193. data/opal/corelib/string/encoding.rb +67 -31
  194. data/opal/corelib/string/inheritance.rb +1 -1
  195. data/opal/corelib/string.rb +40 -9
  196. data/opal/corelib/struct.rb +18 -3
  197. data/opal/corelib/time.rb +3 -3
  198. data/opal/corelib/variables.rb +1 -1
  199. data/opal/opal.rb +1 -0
  200. data/opal.gemspec +32 -29
  201. data/stdlib/base64.rb +4 -2
  202. data/stdlib/bigdecimal/bignumber.js.rb +1 -1
  203. data/stdlib/buffer/array.rb +4 -2
  204. data/stdlib/date.rb +64 -31
  205. data/stdlib/headless_chrome.rb +11 -0
  206. data/stdlib/json.rb +16 -4
  207. data/stdlib/nashorn/file.rb +15 -0
  208. data/stdlib/native.rb +21 -12
  209. data/stdlib/nodejs/dir.rb +1 -1
  210. data/stdlib/nodejs/file.rb +77 -23
  211. data/stdlib/nodejs/io.rb +30 -1
  212. data/stdlib/nodejs/{node_modules/js-yaml/dist/js-yaml.js → js-yaml-3-6-1.js} +815 -626
  213. data/stdlib/nodejs/kernel.rb +3 -1
  214. data/stdlib/nodejs/package.json +0 -1
  215. data/stdlib/nodejs/stacktrace.rb +179 -0
  216. data/stdlib/nodejs/yaml.rb +2 -1
  217. data/stdlib/opal/platform.rb +6 -14
  218. data/stdlib/opal-builder.rb +1 -0
  219. data/stdlib/opal-platform.rb +15 -0
  220. data/stdlib/pathname.rb +1 -1
  221. data/stdlib/rbconfig.rb +1 -1
  222. data/stdlib/securerandom.rb +1 -1
  223. data/stdlib/strscan.rb +15 -1
  224. data/stdlib/yaml.rb +1 -1
  225. data/tasks/benchmarking.rake +9 -0
  226. data/tasks/building.rake +24 -20
  227. data/tasks/linting.rake +24 -13
  228. data/tasks/testing/mspec_special_calls.rb +44 -15
  229. data/tasks/testing/opal_rspec_smoketest.Gemfile +6 -0
  230. data/tasks/testing.rake +351 -202
  231. metadata +135 -915
  232. data/lib/opal/cli_runners/phantom.js +0 -70
  233. data/lib/opal/cli_runners/phantomjs.rb +0 -28
  234. data/lib/opal/hike_path_finder.rb +0 -18
  235. data/lib/opal/nodes/for.rb +0 -48
  236. data/lib/opal/parser/grammar.rb +0 -6157
  237. data/lib/opal/parser/grammar.y +0 -2011
  238. data/lib/opal/parser/keywords.rb +0 -66
  239. data/lib/opal/parser/lexer.rb +0 -1352
  240. data/lib/opal/parser/parser_scope.rb +0 -28
  241. data/lib/opal/parser/sexp.rb +0 -90
  242. data/lib/opal/sprockets/environment.rb +0 -23
  243. data/lib/opal/sprockets/erb.rb +0 -23
  244. data/lib/opal/sprockets/path_reader.rb +0 -36
  245. data/lib/opal/sprockets/processor.rb +0 -145
  246. data/lib/opal/sprockets/server.rb +0 -133
  247. data/lib/opal/sprockets/source_map_header_patch.rb +0 -41
  248. data/lib/opal/sprockets/source_map_server.rb +0 -115
  249. data/lib/opal/sprockets.rb +0 -91
  250. data/spec/README.md +0 -10
  251. data/spec/filters/bugs/array.rb +0 -12
  252. data/spec/filters/bugs/basicobject.rb +0 -16
  253. data/spec/filters/bugs/bigdecimal.rb +0 -160
  254. data/spec/filters/bugs/class.rb +0 -10
  255. data/spec/filters/bugs/compiler_opal.rb +0 -5
  256. data/spec/filters/bugs/complex.rb +0 -3
  257. data/spec/filters/bugs/date.rb +0 -94
  258. data/spec/filters/bugs/enumerable.rb +0 -50
  259. data/spec/filters/bugs/enumerator.rb +0 -42
  260. data/spec/filters/bugs/exception.rb +0 -58
  261. data/spec/filters/bugs/float.rb +0 -33
  262. data/spec/filters/bugs/hash.rb +0 -11
  263. data/spec/filters/bugs/inheritance.rb +0 -5
  264. data/spec/filters/bugs/integer.rb +0 -28
  265. data/spec/filters/bugs/kernel.rb +0 -297
  266. data/spec/filters/bugs/language.rb +0 -275
  267. data/spec/filters/bugs/language_opal.rb +0 -88
  268. data/spec/filters/bugs/marshal.rb +0 -43
  269. data/spec/filters/bugs/method.rb +0 -84
  270. data/spec/filters/bugs/module.rb +0 -196
  271. data/spec/filters/bugs/numeric.rb +0 -127
  272. data/spec/filters/bugs/pathname.rb +0 -5
  273. data/spec/filters/bugs/proc.rb +0 -36
  274. data/spec/filters/bugs/range.rb +0 -144
  275. data/spec/filters/bugs/rational.rb +0 -4
  276. data/spec/filters/bugs/regexp.rb +0 -196
  277. data/spec/filters/bugs/set.rb +0 -42
  278. data/spec/filters/bugs/singleton.rb +0 -6
  279. data/spec/filters/bugs/string.rb +0 -101
  280. data/spec/filters/bugs/stringscanner.rb +0 -79
  281. data/spec/filters/bugs/struct.rb +0 -4
  282. data/spec/filters/bugs/time.rb +0 -29
  283. data/spec/filters/bugs/unboundmethod.rb +0 -27
  284. data/spec/filters/unsupported/array.rb +0 -163
  285. data/spec/filters/unsupported/basicobject.rb +0 -14
  286. data/spec/filters/unsupported/bignum.rb +0 -52
  287. data/spec/filters/unsupported/class.rb +0 -4
  288. data/spec/filters/unsupported/delegator.rb +0 -5
  289. data/spec/filters/unsupported/enumerable.rb +0 -11
  290. data/spec/filters/unsupported/enumerator.rb +0 -13
  291. data/spec/filters/unsupported/fixnum.rb +0 -14
  292. data/spec/filters/unsupported/float.rb +0 -43
  293. data/spec/filters/unsupported/freeze.rb +0 -53
  294. data/spec/filters/unsupported/hash.rb +0 -51
  295. data/spec/filters/unsupported/integer.rb +0 -3
  296. data/spec/filters/unsupported/kernel.rb +0 -31
  297. data/spec/filters/unsupported/language.rb +0 -17
  298. data/spec/filters/unsupported/marshal.rb +0 -46
  299. data/spec/filters/unsupported/matchdata.rb +0 -30
  300. data/spec/filters/unsupported/math.rb +0 -3
  301. data/spec/filters/unsupported/module.rb +0 -8
  302. data/spec/filters/unsupported/pathname.rb +0 -3
  303. data/spec/filters/unsupported/privacy.rb +0 -147
  304. data/spec/filters/unsupported/proc.rb +0 -3
  305. data/spec/filters/unsupported/regexp.rb +0 -59
  306. data/spec/filters/unsupported/set.rb +0 -4
  307. data/spec/filters/unsupported/singleton.rb +0 -6
  308. data/spec/filters/unsupported/string.rb +0 -537
  309. data/spec/filters/unsupported/struct.rb +0 -6
  310. data/spec/filters/unsupported/symbol.rb +0 -19
  311. data/spec/filters/unsupported/taint.rb +0 -15
  312. data/spec/filters/unsupported/thread.rb +0 -7
  313. data/spec/filters/unsupported/time.rb +0 -202
  314. data/spec/lib/builder_processors_spec.rb +0 -27
  315. data/spec/lib/builder_spec.rb +0 -72
  316. data/spec/lib/cli_runners/phantomjs_spec.rb +0 -39
  317. data/spec/lib/cli_spec.rb +0 -211
  318. data/spec/lib/compiler/call_spec.rb +0 -700
  319. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +0 -87
  320. data/spec/lib/compiler_spec.rb +0 -285
  321. data/spec/lib/config_spec.rb +0 -13
  322. data/spec/lib/dependency_resolver_spec.rb +0 -40
  323. data/spec/lib/fixtures/complex_sprockets.js.rb.erb +0 -4
  324. data/spec/lib/fixtures/file_with_directives.js +0 -2
  325. data/spec/lib/fixtures/jst_file.js.jst +0 -1
  326. data/spec/lib/fixtures/no_requires.rb +0 -1
  327. data/spec/lib/fixtures/opal_file.rb +0 -2
  328. data/spec/lib/fixtures/require_tree_test.rb +0 -3
  329. data/spec/lib/fixtures/required_file.js +0 -1
  330. data/spec/lib/fixtures/required_tree_test/required_file1.rb +0 -1
  331. data/spec/lib/fixtures/required_tree_test/required_file2.rb +0 -1
  332. data/spec/lib/fixtures/requires.rb +0 -7
  333. data/spec/lib/fixtures/source_map/subfolder/other_file.rb +0 -1
  334. data/spec/lib/fixtures/source_map.rb +0 -1
  335. data/spec/lib/fixtures/sprockets_file.js.rb +0 -3
  336. data/spec/lib/fixtures/sprockets_require_tree_test.rb +0 -3
  337. data/spec/lib/hike_path_finder_spec.rb +0 -23
  338. data/spec/lib/lexer_spec.rb +0 -110
  339. data/spec/lib/parser/alias_spec.rb +0 -26
  340. data/spec/lib/parser/and_spec.rb +0 -13
  341. data/spec/lib/parser/aref_spec.rb +0 -10
  342. data/spec/lib/parser/attrasgn_spec.rb +0 -28
  343. data/spec/lib/parser/begin_spec.rb +0 -42
  344. data/spec/lib/parser/block_spec.rb +0 -12
  345. data/spec/lib/parser/break_spec.rb +0 -17
  346. data/spec/lib/parser/call_spec.rb +0 -201
  347. data/spec/lib/parser/class_spec.rb +0 -35
  348. data/spec/lib/parser/comments_spec.rb +0 -11
  349. data/spec/lib/parser/def_spec.rb +0 -109
  350. data/spec/lib/parser/if_spec.rb +0 -26
  351. data/spec/lib/parser/iter_spec.rb +0 -59
  352. data/spec/lib/parser/lambda_spec.rb +0 -219
  353. data/spec/lib/parser/literal_spec.rb +0 -118
  354. data/spec/lib/parser/masgn_spec.rb +0 -37
  355. data/spec/lib/parser/module_spec.rb +0 -27
  356. data/spec/lib/parser/not_spec.rb +0 -21
  357. data/spec/lib/parser/op_asgn1_spec.rb +0 -23
  358. data/spec/lib/parser/op_asgn2_spec.rb +0 -23
  359. data/spec/lib/parser/op_asgn_spec.rb +0 -17
  360. data/spec/lib/parser/or_spec.rb +0 -13
  361. data/spec/lib/parser/return_spec.rb +0 -22
  362. data/spec/lib/parser/sclass_spec.rb +0 -21
  363. data/spec/lib/parser/string_spec.rb +0 -286
  364. data/spec/lib/parser/super_spec.rb +0 -20
  365. data/spec/lib/parser/unary_spec.rb +0 -52
  366. data/spec/lib/parser/undef_spec.rb +0 -19
  367. data/spec/lib/parser/unless_spec.rb +0 -13
  368. data/spec/lib/parser/variables_spec.rb +0 -116
  369. data/spec/lib/parser/while_spec.rb +0 -15
  370. data/spec/lib/parser/yield_spec.rb +0 -20
  371. data/spec/lib/path_reader_spec.rb +0 -36
  372. data/spec/lib/paths_spec.rb +0 -18
  373. data/spec/lib/shared/path_finder_shared.rb +0 -19
  374. data/spec/lib/shared/path_reader_shared.rb +0 -31
  375. data/spec/lib/spec_helper.rb +0 -16
  376. data/spec/lib/sprockets/erb_spec.rb +0 -38
  377. data/spec/lib/sprockets/path_reader_spec.rb +0 -41
  378. data/spec/lib/sprockets/processor_spec.rb +0 -79
  379. data/spec/lib/sprockets/server_spec.rb +0 -102
  380. data/spec/lib/sprockets_spec.rb +0 -32
  381. data/spec/lib/tilt/opal_spec.rb +0 -37
  382. data/spec/mspec-opal/formatters.rb +0 -188
  383. data/spec/mspec-opal/runner.rb +0 -193
  384. data/spec/opal/compiler/irb_spec.rb +0 -44
  385. data/spec/opal/core/arity_spec.rb +0 -142
  386. data/spec/opal/core/array/intersection_spec.rb +0 -38
  387. data/spec/opal/core/array/minus_spec.rb +0 -38
  388. data/spec/opal/core/array/select_spec.rb +0 -14
  389. data/spec/opal/core/array/set_range_to_array_spec.rb +0 -7
  390. data/spec/opal/core/array/union_spec.rb +0 -38
  391. data/spec/opal/core/array/uniq_spec.rb +0 -49
  392. data/spec/opal/core/date_spec.rb +0 -177
  393. data/spec/opal/core/enumerable/all_break_spec.rb +0 -5
  394. data/spec/opal/core/enumerable/any_break_spec.rb +0 -5
  395. data/spec/opal/core/enumerable/collect_break_spec.rb +0 -13
  396. data/spec/opal/core/enumerable/count_break_spec.rb +0 -5
  397. data/spec/opal/core/enumerable/detect_break_spec.rb +0 -5
  398. data/spec/opal/core/enumerable/drop_while_break_spec.rb +0 -5
  399. data/spec/opal/core/enumerable/each_slice_break.rb +0 -6
  400. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +0 -5
  401. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +0 -5
  402. data/spec/opal/core/enumerable/find_all_break_spec.rb +0 -5
  403. data/spec/opal/core/enumerable/find_index_break_spec.rb +0 -5
  404. data/spec/opal/core/enumerable/grep_break_spec.rb +0 -5
  405. data/spec/opal/core/enumerable/max_break_spec.rb +0 -5
  406. data/spec/opal/core/enumerable/max_by_break_spec.rb +0 -5
  407. data/spec/opal/core/enumerable/min_break_spec.rb +0 -5
  408. data/spec/opal/core/enumerable/min_by_break_spec.rb +0 -5
  409. data/spec/opal/core/enumerable/none_break_spec.rb +0 -5
  410. data/spec/opal/core/enumerable/one_break_spec.rb +0 -5
  411. data/spec/opal/core/enumerable/reduce_break_spec.rb +0 -5
  412. data/spec/opal/core/enumerable/take_while_break_spec.rb +0 -5
  413. data/spec/opal/core/enumerator/with_index_spec.rb +0 -6
  414. data/spec/opal/core/exception_spec.rb +0 -20
  415. data/spec/opal/core/fixtures/class.rb +0 -124
  416. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  417. data/spec/opal/core/fixtures/constants.rb +0 -33
  418. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +0 -1
  419. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +0 -1
  420. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +0 -1
  421. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +0 -1
  422. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +0 -1
  423. data/spec/opal/core/fixtures/require_tree_files/nested/nested 1.rb +0 -1
  424. data/spec/opal/core/fixtures/require_tree_files/nested/nested 2.rb +0 -1
  425. data/spec/opal/core/fixtures/require_tree_files/other/other 1.rb +0 -1
  426. data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +0 -1
  427. data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +0 -1
  428. data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +0 -1
  429. data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +0 -3
  430. data/spec/opal/core/hash/has_value_spec.rb +0 -13
  431. data/spec/opal/core/hash/internals_spec.rb +0 -332
  432. data/spec/opal/core/helpers_spec.rb +0 -14
  433. data/spec/opal/core/kernel/Array_spec.rb +0 -10
  434. data/spec/opal/core/kernel/at_exit_spec.rb +0 -70
  435. data/spec/opal/core/kernel/block_given_spec.rb +0 -30
  436. data/spec/opal/core/kernel/class_spec.rb +0 -6
  437. data/spec/opal/core/kernel/define_singleton_method_spec.rb +0 -21
  438. data/spec/opal/core/kernel/equal_value_spec.rb +0 -12
  439. data/spec/opal/core/kernel/extend_spec.rb +0 -21
  440. data/spec/opal/core/kernel/format_spec.rb +0 -122
  441. data/spec/opal/core/kernel/freeze_spec.rb +0 -15
  442. data/spec/opal/core/kernel/instance_eval_spec.rb +0 -28
  443. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +0 -15
  444. data/spec/opal/core/kernel/instance_variable_get_spec.rb +0 -14
  445. data/spec/opal/core/kernel/instance_variable_set_spec.rb +0 -10
  446. data/spec/opal/core/kernel/instance_variables_spec.rb +0 -110
  447. data/spec/opal/core/kernel/loop_spec.rb +0 -23
  448. data/spec/opal/core/kernel/match_spec.rb +0 -5
  449. data/spec/opal/core/kernel/method_spec.rb +0 -31
  450. data/spec/opal/core/kernel/methods_spec.rb +0 -25
  451. data/spec/opal/core/kernel/nil_spec.rb +0 -7
  452. data/spec/opal/core/kernel/p_spec.rb +0 -15
  453. data/spec/opal/core/kernel/printf_spec.rb +0 -11
  454. data/spec/opal/core/kernel/proc_spec.rb +0 -13
  455. data/spec/opal/core/kernel/raise_spec.rb +0 -13
  456. data/spec/opal/core/kernel/rand_spec.rb +0 -23
  457. data/spec/opal/core/kernel/require_tree_spec.rb +0 -18
  458. data/spec/opal/core/kernel/respond_to_spec.rb +0 -41
  459. data/spec/opal/core/kernel/send_spec.rb +0 -56
  460. data/spec/opal/core/kernel/sprintf_spec.rb +0 -5
  461. data/spec/opal/core/language/arguments/mlhs_arg_spec.rb +0 -19
  462. data/spec/opal/core/language/block_spec.rb +0 -538
  463. data/spec/opal/core/language/class_spec.rb +0 -55
  464. data/spec/opal/core/language/equal_spec.rb +0 -8
  465. data/spec/opal/core/language/fixtures/array.rb +0 -11
  466. data/spec/opal/core/language/fixtures/block.rb +0 -57
  467. data/spec/opal/core/language/fixtures/break.rb +0 -240
  468. data/spec/opal/core/language/fixtures/ensure.rb +0 -72
  469. data/spec/opal/core/language/fixtures/literal_lambda.rb +0 -7
  470. data/spec/opal/core/language/fixtures/metaclass.rb +0 -33
  471. data/spec/opal/core/language/fixtures/module.rb +0 -24
  472. data/spec/opal/core/language/fixtures/next.rb +0 -128
  473. data/spec/opal/core/language/fixtures/return.rb +0 -118
  474. data/spec/opal/core/language/fixtures/send.rb +0 -111
  475. data/spec/opal/core/language/fixtures/send_1.9.rb +0 -22
  476. data/spec/opal/core/language/fixtures/super.rb +0 -308
  477. data/spec/opal/core/language/fixtures/variables.rb +0 -58
  478. data/spec/opal/core/language/fixtures/yield.rb +0 -28
  479. data/spec/opal/core/language/heredoc_spec.rb +0 -42
  480. data/spec/opal/core/language/keyword_arguments_spec.rb +0 -11
  481. data/spec/opal/core/language/predefined_spec.rb +0 -138
  482. data/spec/opal/core/language/proc_spec.rb +0 -263
  483. data/spec/opal/core/language/regexp_spec.rb +0 -20
  484. data/spec/opal/core/language/rescue_spec.rb +0 -18
  485. data/spec/opal/core/language/send_spec.rb +0 -230
  486. data/spec/opal/core/language/string_spec.rb +0 -44
  487. data/spec/opal/core/language/ternary_operator_spec.rb +0 -20
  488. data/spec/opal/core/language/variables_spec.rb +0 -1366
  489. data/spec/opal/core/language/versions/array_1.9.rb +0 -39
  490. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  491. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  492. data/spec/opal/core/language/versions/case_1.9.rb +0 -20
  493. data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -62
  494. data/spec/opal/core/language/versions/hash_1_9_spec.rb +0 -23
  495. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +0 -143
  496. data/spec/opal/core/language/versions/not_1.9.rb +0 -22
  497. data/spec/opal/core/language/versions/send_1.9.rb +0 -241
  498. data/spec/opal/core/language/versions/symbol_1.9.rb +0 -15
  499. data/spec/opal/core/language/versions/variables_1.9.rb +0 -8
  500. data/spec/opal/core/language_spec.rb +0 -45
  501. data/spec/opal/core/marshal/dump_spec.rb +0 -53
  502. data/spec/opal/core/marshal/load_spec.rb +0 -7
  503. data/spec/opal/core/method/to_proc_spec.rb +0 -28
  504. data/spec/opal/core/module/alias_method_spec.rb +0 -28
  505. data/spec/opal/core/module/ancestors_spec.rb +0 -11
  506. data/spec/opal/core/module/append_features_spec.rb +0 -14
  507. data/spec/opal/core/module/attr_accessor_spec.rb +0 -26
  508. data/spec/opal/core/module/const_defined_spec.rb +0 -84
  509. data/spec/opal/core/module/const_get_spec.rb +0 -85
  510. data/spec/opal/core/module/const_missing_spec.rb +0 -17
  511. data/spec/opal/core/module/const_set_spec.rb +0 -64
  512. data/spec/opal/core/module/constants_spec.rb +0 -49
  513. data/spec/opal/core/module/fixtures/classes.rb +0 -444
  514. data/spec/opal/core/module/method_defined_spec.rb +0 -48
  515. data/spec/opal/core/module/method_lookup_spec.rb +0 -13
  516. data/spec/opal/core/module/module_function_spec.rb +0 -25
  517. data/spec/opal/core/module/name_spec.rb +0 -41
  518. data/spec/opal/core/module/public_method_defined_spec.rb +0 -18
  519. data/spec/opal/core/module/remove_const_spec.rb +0 -22
  520. data/spec/opal/core/module/undef_method_spec.rb +0 -66
  521. data/spec/opal/core/numeric/bit_and_spec.rb +0 -7
  522. data/spec/opal/core/numeric/bit_or_spec.rb +0 -8
  523. data/spec/opal/core/numeric/bit_xor_spec.rb +0 -6
  524. data/spec/opal/core/numeric/ceil_spec.rb +0 -8
  525. data/spec/opal/core/numeric/chr_spec.rb +0 -8
  526. data/spec/opal/core/numeric/comparison_spec.rb +0 -24
  527. data/spec/opal/core/numeric/complement_spec.rb +0 -8
  528. data/spec/opal/core/numeric/divide_spec.rb +0 -10
  529. data/spec/opal/core/numeric/eql_spec.rb +0 -9
  530. data/spec/opal/core/numeric/exponent_spec.rb +0 -33
  531. data/spec/opal/core/numeric/floor_spec.rb +0 -8
  532. data/spec/opal/core/numeric/gt_spec.rb +0 -11
  533. data/spec/opal/core/numeric/gte_spec.rb +0 -12
  534. data/spec/opal/core/numeric/integer_spec.rb +0 -9
  535. data/spec/opal/core/numeric/left_shift_spec.rb +0 -21
  536. data/spec/opal/core/numeric/lt_spec.rb +0 -11
  537. data/spec/opal/core/numeric/lte_spec.rb +0 -12
  538. data/spec/opal/core/numeric/minus_spec.rb +0 -8
  539. data/spec/opal/core/numeric/modulo_spec.rb +0 -19
  540. data/spec/opal/core/numeric/multiply_spec.rb +0 -9
  541. data/spec/opal/core/numeric/next_spec.rb +0 -9
  542. data/spec/opal/core/numeric/ord_spec.rb +0 -9
  543. data/spec/opal/core/numeric/plus_spec.rb +0 -8
  544. data/spec/opal/core/numeric/pred_spec.rb +0 -7
  545. data/spec/opal/core/numeric/right_shift_spec.rb +0 -25
  546. data/spec/opal/core/numeric/step_spec.rb +0 -11
  547. data/spec/opal/core/numeric/succ_spec.rb +0 -9
  548. data/spec/opal/core/numeric/times_spec.rb +0 -36
  549. data/spec/opal/core/numeric/to_f_spec.rb +0 -7
  550. data/spec/opal/core/numeric/to_i_spec.rb +0 -7
  551. data/spec/opal/core/numeric/to_json_spec.rb +0 -8
  552. data/spec/opal/core/numeric/to_s_spec.rb +0 -26
  553. data/spec/opal/core/numeric/uminus_spec.rb +0 -9
  554. data/spec/opal/core/numeric/upto_spec.rb +0 -19
  555. data/spec/opal/core/numeric/zero_spec.rb +0 -7
  556. data/spec/opal/core/object_id_spec.rb +0 -56
  557. data/spec/opal/core/proc/call_spec.rb +0 -21
  558. data/spec/opal/core/proc/element_reference_spec.rb +0 -21
  559. data/spec/opal/core/proc/proc_tricks_spec.rb +0 -7
  560. data/spec/opal/core/runtime/begin_spec.rb +0 -39
  561. data/spec/opal/core/runtime/block_send_spec.rb +0 -28
  562. data/spec/opal/core/runtime/block_spec.rb +0 -23
  563. data/spec/opal/core/runtime/bridged_classes_spec.rb +0 -123
  564. data/spec/opal/core/runtime/constants_spec.rb +0 -13
  565. data/spec/opal/core/runtime/donate_spec.rb +0 -53
  566. data/spec/opal/core/runtime/eval_spec.rb +0 -5
  567. data/spec/opal/core/runtime/main_methods_spec.rb +0 -27
  568. data/spec/opal/core/runtime/method_missing_spec.rb +0 -68
  569. data/spec/opal/core/runtime/method_spec.rb +0 -31
  570. data/spec/opal/core/runtime/operator_call_spec.rb +0 -13
  571. data/spec/opal/core/runtime/paren_spec.rb +0 -14
  572. data/spec/opal/core/runtime/rescue_spec.rb +0 -71
  573. data/spec/opal/core/runtime/return_spec.rb +0 -38
  574. data/spec/opal/core/runtime/send_spec.rb +0 -34
  575. data/spec/opal/core/runtime/singleton_class_spec.rb +0 -13
  576. data/spec/opal/core/runtime/super_spec.rb +0 -223
  577. data/spec/opal/core/runtime/truthy_spec.rb +0 -63
  578. data/spec/opal/core/runtime/variables_spec.rb +0 -20
  579. data/spec/opal/core/runtime_spec.rb +0 -58
  580. data/spec/opal/core/source_map_spec.rb +0 -49
  581. data/spec/opal/core/string_spec.rb +0 -32
  582. data/spec/opal/javascript_api_spec.rb +0 -16
  583. data/spec/opal/stdlib/erb/erb_spec.rb +0 -30
  584. data/spec/opal/stdlib/erb/inline_block.opalerb +0 -3
  585. data/spec/opal/stdlib/erb/quoted.opalerb +0 -1
  586. data/spec/opal/stdlib/erb/simple.opalerb +0 -1
  587. data/spec/opal/stdlib/js_spec.rb +0 -66
  588. data/spec/opal/stdlib/json/ext_spec.rb +0 -48
  589. data/spec/opal/stdlib/json/parse_spec.rb +0 -33
  590. data/spec/opal/stdlib/native/alias_native_spec.rb +0 -27
  591. data/spec/opal/stdlib/native/array_spec.rb +0 -11
  592. data/spec/opal/stdlib/native/each_spec.rb +0 -13
  593. data/spec/opal/stdlib/native/element_reference_spec.rb +0 -16
  594. data/spec/opal/stdlib/native/exposure_spec.rb +0 -33
  595. data/spec/opal/stdlib/native/ext_spec.rb +0 -19
  596. data/spec/opal/stdlib/native/hash_spec.rb +0 -51
  597. data/spec/opal/stdlib/native/initialize_spec.rb +0 -17
  598. data/spec/opal/stdlib/native/method_missing_spec.rb +0 -51
  599. data/spec/opal/stdlib/native/native_alias_spec.rb +0 -19
  600. data/spec/opal/stdlib/native/native_class_spec.rb +0 -18
  601. data/spec/opal/stdlib/native/native_module_spec.rb +0 -13
  602. data/spec/opal/stdlib/native/native_reader_spec.rb +0 -22
  603. data/spec/opal/stdlib/native/native_writer_spec.rb +0 -30
  604. data/spec/opal/stdlib/native/new_spec.rb +0 -92
  605. data/spec/opal/stdlib/native/struct_spec.rb +0 -12
  606. data/spec/opal/stdlib/promise/always_spec.rb +0 -49
  607. data/spec/opal/stdlib/promise/error_spec.rb +0 -15
  608. data/spec/opal/stdlib/promise/rescue_spec.rb +0 -53
  609. data/spec/opal/stdlib/promise/then_spec.rb +0 -79
  610. data/spec/opal/stdlib/promise/trace_spec.rb +0 -51
  611. data/spec/opal/stdlib/promise/value_spec.rb +0 -15
  612. data/spec/opal/stdlib/promise/when_spec.rb +0 -34
  613. data/spec/opal/stdlib/source_map_spec.rb +0 -8
  614. data/spec/opal/stdlib/strscan/scan_spec.rb +0 -11
  615. data/spec/opal/stdlib/template/paths_spec.rb +0 -10
  616. data/spec/opal/stdlib/thread/mutex_spec.rb +0 -40
  617. data/spec/opal/stdlib/thread/thread_queue_spec.rb +0 -32
  618. data/spec/opal/stdlib/thread/thread_spec.rb +0 -60
  619. data/spec/ruby_specs +0 -121
  620. data/spec/spec_helper.rb +0 -26
  621. data/spec/support/match_helpers.rb +0 -57
  622. data/spec/support/mspec_rspec_adapter.rb +0 -33
  623. data/spec/support/parser_helpers.rb +0 -37
  624. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +0 -277
  625. data/stdlib/nodejs/node_modules/js-yaml/README.md +0 -288
  626. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +0 -140
  627. data/stdlib/nodejs/node_modules/js-yaml/bower.json +0 -23
  628. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +0 -3
  629. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +0 -102
  630. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +0 -18
  631. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +0 -31
  632. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +0 -22
  633. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +0 -18
  634. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +0 -197
  635. data/stdlib/nodejs/node_modules/js-yaml/index.js +0 -7
  636. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +0 -62
  637. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +0 -554
  638. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +0 -25
  639. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +0 -1581
  640. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +0 -78
  641. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +0 -18
  642. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
  643. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +0 -28
  644. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +0 -17
  645. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +0 -25
  646. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +0 -103
  647. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +0 -133
  648. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +0 -37
  649. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +0 -110
  650. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +0 -183
  651. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -85
  652. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -84
  653. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -27
  654. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +0 -8
  655. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +0 -12
  656. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +0 -36
  657. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +0 -56
  658. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +0 -61
  659. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +0 -8
  660. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +0 -33
  661. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +0 -8
  662. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +0 -98
  663. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +0 -61
  664. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +0 -39
  665. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +0 -115
  666. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +0 -239
  667. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +0 -36
  668. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +0 -22
  669. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +0 -59
  670. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +0 -13
  671. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +0 -33
  672. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +0 -28
  673. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +0 -23
  674. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +0 -49
  675. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +0 -35
  676. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +0 -270
  677. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +0 -1
  678. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +0 -47
  679. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +0 -55
  680. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +0 -40
  681. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +0 -48
  682. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +0 -43
  683. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +0 -27
  684. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +0 -26
  685. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +0 -50
  686. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +0 -148
  687. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +0 -50
  688. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +0 -146
  689. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +0 -481
  690. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +0 -14
  691. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +0 -50
  692. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +0 -54
  693. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +0 -75
  694. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +0 -1168
  695. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +0 -18
  696. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +0 -88
  697. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +0 -798
  698. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +0 -77
  699. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +0 -23
  700. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +0 -22
  701. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +0 -69
  702. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +0 -6
  703. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +0 -1415
  704. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +0 -2
  705. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +0 -8
  706. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +0 -825
  707. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +0 -33
  708. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +0 -11
  709. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +0 -10
  710. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +0 -26
  711. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +0 -673
  712. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  713. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +0 -107
  714. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +0 -62
  715. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +0 -73
  716. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +0 -117
  717. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +0 -177
  718. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +0 -3908
  719. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +0 -69
  720. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +0 -239
  721. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +0 -422
  722. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +0 -66
  723. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +0 -387
  724. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +0 -20238
  725. data/stdlib/nodejs/node_modules/js-yaml/package.json +0 -83
  726. data/stdlib/phantomjs.rb +0 -17
  727. data/tasks/testing/sprockets-phantomjs.js +0 -54
  728. data/test/nodejs/test_dir.rb +0 -17
  729. data/test/nodejs/test_file.rb +0 -30
  730. data/test/opal/test_keyword.rb +0 -590
  731. data/test/opal/unsupported_and_bugs.rb +0 -30
  732. /data/{CODE_OF_CONDUCT.md → CONDUCT.md} +0 -0
  733. /data/{bin → exe}/opal-build +0 -0
  734. /data/{bin → exe}/opal-mspec +0 -0
@@ -0,0 +1,843 @@
1
+ chrome-remote-interface [![Build Status](https://travis-ci.org/cyrus-and/chrome-remote-interface.svg?branch=master)](https://travis-ci.org/cyrus-and/chrome-remote-interface)
2
+ =======================
3
+
4
+ [Chrome Debugging Protocol] interface that helps to instrument Chrome (or any
5
+ other suitable [implementation](#implementations)) by providing a simple
6
+ abstraction of commands and notifications using a straightforward JavaScript
7
+ API.
8
+
9
+ This module is one of the many [third-party protocol clients][3rd-party].
10
+
11
+ [3rd-party]: https://developer.chrome.com/devtools/docs/debugging-clients#chrome-remote-interface
12
+
13
+ Sample API usage
14
+ ----------------
15
+
16
+ The following snippet loads `https://github.com` and dumps every request made:
17
+
18
+ ```js
19
+ const CDP = require('chrome-remote-interface');
20
+
21
+ CDP((client) => {
22
+ // extract domains
23
+ const {Network, Page} = client;
24
+ // setup handlers
25
+ Network.requestWillBeSent((params) => {
26
+ console.log(params.request.url);
27
+ });
28
+ Page.loadEventFired(() => {
29
+ client.close();
30
+ });
31
+ // enable events then start!
32
+ Promise.all([
33
+ Network.enable(),
34
+ Page.enable()
35
+ ]).then(() => {
36
+ return Page.navigate({url: 'https://github.com'});
37
+ }).catch((err) => {
38
+ console.error(err);
39
+ client.close();
40
+ });
41
+ }).on('error', (err) => {
42
+ // cannot connect to the remote endpoint
43
+ console.error(err);
44
+ });
45
+ ```
46
+
47
+ Find more examples in the [wiki], in particular notice how the above can be
48
+ rewritten using the [`async`/`await`][async-await-example] primitives.
49
+
50
+ [wiki]: https://github.com/cyrus-and/chrome-remote-interface/wiki
51
+ [async-await-example]: https://github.com/cyrus-and/chrome-remote-interface/wiki/Async-await-example
52
+
53
+ Installation
54
+ ------------
55
+
56
+ npm install chrome-remote-interface
57
+
58
+ Install globally (`-g`) to just use the [bundled client](#bundled-client).
59
+
60
+ Implementations
61
+ ---------------
62
+
63
+ This module should work with every application implementing the
64
+ [Chrome Debugging Protocol]. In particular, it has been tested against the
65
+ following implementations:
66
+
67
+ Implementation | Protocol version | [Protocol] | [List] | [New] | [Activate] | [Close] | [Version]
68
+ ---------------------------|--------------------|------------|--------|-------|------------|---------|-----------
69
+ [Google Chrome][1.1] | [tip-of-tree][1.2] | yes | yes | yes | yes | yes | yes
70
+ [Microsoft Edge][2.1] | [*partial*][2.2] | yes | yes | no | no | no | yes
71
+ [Node.js][3.1] ([v6.3.0]+) | [node][3.2] | yes | no | no | no | no | yes
72
+ [Safari (iOS)][4.1] | [*partial*][4.2] | no | yes | no | no | no | no
73
+
74
+ [1.1]: #chromechromium
75
+ [1.2]: https://chromedevtools.github.io/devtools-protocol/tot/
76
+
77
+ [2.1]: #edge
78
+ [2.2]: https://github.com/Microsoft/edge-diagnostics-adapter/wiki/Supported-features-and-API
79
+
80
+ [3.1]: #nodejs
81
+ [3.2]: https://chromedevtools.github.io/devtools-protocol/v8/
82
+
83
+ [4.1]: #safari-ios
84
+ [4.2]: http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/inspector/protocol
85
+
86
+ [v6.3.0]: https://nodejs.org/en/blog/release/v6.3.0/
87
+
88
+ [Protocol]: #cdpprotocoloptions-callback
89
+ [List]: #cdplistoptions-callback
90
+ [New]: #cdpnewoptions-callback
91
+ [Activate]: #cdpactivateoptions-callback
92
+ [Close]: #cdpcloseoptions-callback
93
+ [Version]: #cdpversionoptions-callback
94
+
95
+ The meaning of *target* varies according to the implementation, for example,
96
+ each Chrome tab represents a target whereas for Node.js a target is the
97
+ currently inspected script.
98
+
99
+ Setup
100
+ -----
101
+
102
+ An instance of either Chrome itself or another implementation needs to be
103
+ running on a known port in order to use this module (defaults to
104
+ `localhost:9222`).
105
+
106
+ ### Chrome/Chromium
107
+
108
+ #### Desktop
109
+
110
+ Start Chrome with the `--remote-debugging-port` option, for example:
111
+
112
+ google-chrome --remote-debugging-port=9222
113
+
114
+ ##### Headless
115
+
116
+ Since version 59, additionally use the `--headless` option, for example:
117
+
118
+ google-chrome --headless --remote-debugging-port=9222
119
+
120
+ #### Android
121
+
122
+ Plug the device and enable the [port forwarding][adb], for example:
123
+
124
+ adb forward tcp:9222 localabstract:chrome_devtools_remote
125
+
126
+ [adb]: https://developer.chrome.com/devtools/docs/remote-debugging-legacy
127
+
128
+ ##### WebView
129
+
130
+ In order to be inspectable, a WebView must
131
+ be [configured for debugging][webview] and the corresponding process ID must be
132
+ known. There are several ways to obtain it, for example:
133
+
134
+ adb shell grep -a webview_devtools_remote /proc/net/unix
135
+
136
+ Finally, port forwarding can be enabled as follows:
137
+
138
+ adb forward tcp:9222 localabstract:webview_devtools_remote_<pid>
139
+
140
+ [webview]: https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews#configure_webviews_for_debugging
141
+
142
+ ### Edge
143
+
144
+ Install and run the [Edge Diagnostics Adapter][edge-adapter].
145
+
146
+ [edge-adapter]: https://github.com/Microsoft/edge-diagnostics-adapter
147
+
148
+ ### Node.js
149
+
150
+ Start Node.js with the `--inspect` option, for example:
151
+
152
+ node --inspect=9222 script.js
153
+
154
+ ### Safari (iOS)
155
+
156
+ Install and run the [iOS WebKit Debug Proxy][iwdp].
157
+
158
+ [iwdp]: https://github.com/google/ios-webkit-debug-proxy
159
+
160
+ Bundled client
161
+ --------------
162
+
163
+ This module comes with a bundled client application that can be used to
164
+ interactively control a remote instance.
165
+
166
+ ### Target management
167
+
168
+ The bundled client exposes subcommands to interact with the HTTP frontend
169
+ (e.g., [List](#cdplistoptions-callback), [New](#cdpnewoptions-callback), etc.),
170
+ run with `--help` to display the list of available options.
171
+
172
+ Here are some examples:
173
+
174
+ ```javascript
175
+ $ chrome-remote-interface new 'http://example.com'
176
+ {
177
+ "description": "",
178
+ "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/b049bb56-de7d-424c-a331-6ae44cf7ae01",
179
+ "id": "b049bb56-de7d-424c-a331-6ae44cf7ae01",
180
+ "thumbnailUrl": "/thumb/b049bb56-de7d-424c-a331-6ae44cf7ae01",
181
+ "title": "",
182
+ "type": "page",
183
+ "url": "http://example.com/",
184
+ "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/b049bb56-de7d-424c-a331-6ae44cf7ae01"
185
+ }
186
+ $ chrome-remote-interface close 'b049bb56-de7d-424c-a331-6ae44cf7ae01'
187
+ ```
188
+
189
+ ### Inspection
190
+
191
+ Using the `inspect` subcommand it is possible to
192
+ perform [command execution](#clientdomainmethodparams-callback)
193
+ and [event binding](#clientdomaineventcallback) in a REPL fashion. But unlike
194
+ the regular API the callbacks are overridden to conveniently display the result
195
+ of the commands and the message of the events. Also, the event binding is
196
+ simplified here, executing a shorthand method (e.g., `Page.loadEventFired()`)
197
+ toggles the event registration.
198
+
199
+ Remember that the REPL interface provides completion.
200
+
201
+ Here is a sample session:
202
+
203
+ ```javascript
204
+ $ chrome-remote-interface inspect
205
+ >>> Runtime.evaluate({expression: 'window.location.toString()'})
206
+ { result:
207
+ { result:
208
+ { type: 'string',
209
+ value: 'https://www.google.it/_/chrome/newtab?espv=2&ie=UTF-8' },
210
+ wasThrown: false } }
211
+ >>> Page.enable()
212
+ { result: {} }
213
+ >>> Page.loadEventFired() // registered
214
+ { 'Page.loadEventFired': true }
215
+ >>> Page.loadEventFired() // unregistered
216
+ { 'Page.loadEventFired': false }
217
+ >>> Page.loadEventFired() // registered
218
+ { 'Page.loadEventFired': true }
219
+ >>> Page.navigate({url: 'https://github.com'})
220
+ { result: { frameId: '28677.1' } }
221
+ { 'Page.loadEventFired': { timestamp: 21385.383076 } }
222
+ >>> Runtime.evaluate({expression: 'window.location.toString()'})
223
+ { result:
224
+ { result: { type: 'string', value: 'https://github.com/' },
225
+ wasThrown: false } }
226
+ ```
227
+
228
+ #### Event filtering
229
+
230
+ To reduce the amount of data displayed by the event listeners it is possible to
231
+ provide a filter function. In this example only the resource URL is shown:
232
+
233
+ ```javascript
234
+ $ chrome-remote-interface inspect
235
+ >>> Network.enable()
236
+ { result: {} }
237
+ >>> Network.requestWillBeSent(params => params.request.url)
238
+ { 'Network.requestWillBeSent': 'params => params.request.url' }
239
+ >>> Page.navigate({url: 'https://www.wikipedia.org'})
240
+ { 'Network.requestWillBeSent': 'https://www.wikipedia.org/' }
241
+ { result: { frameId: '5530.1' } }
242
+ { 'Network.requestWillBeSent': 'https://www.wikipedia.org/portal/wikipedia.org/assets/img/Wikipedia_wordmark.png' }
243
+ { 'Network.requestWillBeSent': 'https://www.wikipedia.org/portal/wikipedia.org/assets/img/Wikipedia-logo-v2.png' }
244
+ { 'Network.requestWillBeSent': 'https://www.wikipedia.org/portal/wikipedia.org/assets/js/index-3b68787aa6.js' }
245
+ { 'Network.requestWillBeSent': 'https://www.wikipedia.org/portal/wikipedia.org/assets/js/gt-ie9-c84bf66d33.js' }
246
+ { 'Network.requestWillBeSent': 'https://www.wikipedia.org/portal/wikipedia.org/assets/img/sprite-bookshelf_icons.png?16ed124e8ca7c5ce9d463e8f99b2064427366360' }
247
+ { 'Network.requestWillBeSent': 'https://www.wikipedia.org/portal/wikipedia.org/assets/img/sprite-project-logos.png?9afc01c5efe0a8fb6512c776955e2ad3eb48fbca' }
248
+ ```
249
+
250
+ Embedded documentation
251
+ ----------------------
252
+
253
+ In both the REPL and the regular API every object of the protocol is *decorated*
254
+ with the meta information found within the descriptor. In addition The
255
+ `category` field is added, which determines if the member is a `command`, an
256
+ `event` or a `type`.
257
+
258
+ For example to learn how to call `Page.navigate`:
259
+
260
+ ```javascript
261
+ >>> Page.navigate
262
+ { [Function]
263
+ category: 'command',
264
+ parameters: { url: { type: 'string', description: 'URL to navigate the page to.' } },
265
+ returns:
266
+ [ { name: 'frameId',
267
+ '$ref': 'FrameId',
268
+ hidden: true,
269
+ description: 'Frame id that will be navigated.' } ],
270
+ description: 'Navigates current page to the given URL.',
271
+ handlers: [ 'browser', 'renderer' ] }
272
+ ```
273
+
274
+ To learn about the parameters returned by the `Network.requestWillBeSent` event:
275
+
276
+ ```javascript
277
+ >>> Network.requestWillBeSent
278
+ { [Function]
279
+ category: 'event',
280
+ description: 'Fired when page is about to send HTTP request.',
281
+ parameters:
282
+ { requestId: { '$ref': 'RequestId', description: 'Request identifier.' },
283
+ frameId:
284
+ { '$ref': 'Page.FrameId',
285
+ description: 'Frame identifier.',
286
+ hidden: true },
287
+ loaderId: { '$ref': 'LoaderId', description: 'Loader identifier.' },
288
+ documentURL:
289
+ { type: 'string',
290
+ description: 'URL of the document this request is loaded for.' },
291
+ request: { '$ref': 'Request', description: 'Request data.' },
292
+ timestamp: { '$ref': 'Timestamp', description: 'Timestamp.' },
293
+ wallTime:
294
+ { '$ref': 'Timestamp',
295
+ hidden: true,
296
+ description: 'UTC Timestamp.' },
297
+ initiator: { '$ref': 'Initiator', description: 'Request initiator.' },
298
+ redirectResponse:
299
+ { optional: true,
300
+ '$ref': 'Response',
301
+ description: 'Redirect response data.' },
302
+ type:
303
+ { '$ref': 'Page.ResourceType',
304
+ optional: true,
305
+ hidden: true,
306
+ description: 'Type of this resource.' } } }
307
+ ```
308
+
309
+ To inspect the `Network.Request` (note that unlike commands and events, types
310
+ are named in upper camel case) type:
311
+
312
+ ```javascript
313
+ >>> Network.Request
314
+ { category: 'type',
315
+ id: 'Request',
316
+ type: 'object',
317
+ description: 'HTTP request data.',
318
+ properties:
319
+ { url: { type: 'string', description: 'Request URL.' },
320
+ method: { type: 'string', description: 'HTTP request method.' },
321
+ headers: { '$ref': 'Headers', description: 'HTTP request headers.' },
322
+ postData:
323
+ { type: 'string',
324
+ optional: true,
325
+ description: 'HTTP POST request data.' },
326
+ mixedContentType:
327
+ { optional: true,
328
+ type: 'string',
329
+ enum: [Object],
330
+ description: 'The mixed content status of the request, as defined in http://www.w3.org/TR/mixed-content/' },
331
+ initialPriority:
332
+ { '$ref': 'ResourcePriority',
333
+ description: 'Priority of the resource request at the time request is sent.' } } }
334
+ ```
335
+
336
+ Chrome Debugging Protocol versions
337
+ ----------------------------------
338
+
339
+ `chrome-remote-interface` uses the [local version] of the protocol descriptor by
340
+ default. This file is manually updated from time to time using
341
+ `scripts/update-protocol.sh` and pushed to this repository.
342
+
343
+ This behavior can be changed by setting the `remote` option to `true`
344
+ upon [connection](#cdpoptions-callback), in which case the remote instance is
345
+ *asked* to provide its own protocol descriptor.
346
+
347
+ Chrome < 60.0.3097.0 is not able to do that, so in that case the protocol
348
+ descriptor is fetched from the source repository.
349
+
350
+ To override the above behavior there are basically three options:
351
+
352
+ - pass a custom protocol descriptor upon [connection](#cdpoptions-callback)
353
+ (`protocol` option);
354
+
355
+ - use the *raw* version of the [commands](#clientsendmethod-params-callback)
356
+ and [events](#event-domainmethod) interface;
357
+
358
+ - update the local copy with `scripts/update-protocol.sh` (not present when
359
+ fetched with `npm install`).
360
+
361
+ [local version]: lib/protocol.json
362
+
363
+ Browser usage
364
+ -------------
365
+
366
+ This module is able to run within a web context, with obvious limitations
367
+ though, namely external HTTP requests
368
+ ([List](#cdplistoptions-callback), [New](#cdpnewoptions-callback), etc.) cannot
369
+ be performed directly, for this reason the user must provide a global
370
+ `criRequest` in order to use them:
371
+
372
+ ```js
373
+ function criRequest(options, callback) {}
374
+ ```
375
+
376
+ `options` is the same object used by the Node.js `http` module and `callback` is
377
+ a function taking two arguments: `err` (JavaScript `Error` object or `null`) and
378
+ `data` (string result).
379
+
380
+ ### Using [webpack](https://webpack.github.io/)
381
+
382
+ It just works, simply require this module:
383
+
384
+ ```js
385
+ const CDP = require('chrome-remote-interface');
386
+ ```
387
+
388
+ To use a non-minified version manually run webpack with:
389
+
390
+ DEBUG=true npm run webpack
391
+
392
+ ### Using *vanilla* JavaScript
393
+
394
+ To generate a JavaScript file that can be used with a `<script>` element:
395
+
396
+ 1. run `npm install` from the root directory;
397
+
398
+ 2. manually run webpack with:
399
+
400
+ TARGET=var npm run webpack
401
+ TARGET=var DEBUG=true npm run webpack
402
+
403
+ 3. use as:
404
+
405
+ ```html
406
+ <script>
407
+ function criRequest(options, callback) { /*...*/ }
408
+ </script>
409
+ <script src="chrome-remote-interface.js"></script>
410
+ ```
411
+
412
+ API
413
+ ---
414
+
415
+ The API consists of three parts:
416
+
417
+ - *DevTools* methods (for those [implementations](#implementations) that support
418
+ them, e.g., [List](#cdplistoptions-callback), [New](#cdpnewoptions-callback),
419
+ etc.);
420
+
421
+ - [connection](#cdpoptions-callback) establishment;
422
+
423
+ - the actual [protocol interaction](#class-cdp).
424
+
425
+ ### CDP([options], [callback])
426
+
427
+ Connects to a remote instance using the [Chrome Debugging Protocol].
428
+
429
+ `options` is an object with the following optional properties:
430
+
431
+ - `host`: HTTP frontend host. Defaults to `localhost`;
432
+ - `port`: HTTP frontend port. Defaults to `9222`;
433
+ - `secure`: HTTPS/WSS frontend. Defaults to `false`;
434
+ - `target`: determines which target this client should attach to. The behavior
435
+ changes according to the type:
436
+
437
+ - a `function` that takes the array returned by the `List` method and returns
438
+ a target or its numeric index relative to the array;
439
+ - a target `object` like those returned by the `New` and `List` methods;
440
+ - a `string` representing the raw WebSocket URL, in this case `host` and
441
+ `port` are not used to fetch the target list, yet they are used to complete
442
+ the URL if relative;
443
+ - a `string` representing the target id.
444
+
445
+ Defaults to a function which returns the first available target according to
446
+ the implementation (note that at most one connection can be established to the
447
+ same target);
448
+ - `protocol`: [Chrome Debugging Protocol] descriptor object. Defaults to use the
449
+ protocol chosen according to the `remote` option;
450
+ - `remote`: a boolean indicating whether the protocol must be fetched *remotely*
451
+ or if the local version must be used. It has no effect if the `protocol`
452
+ option is set. Defaults to `false`.
453
+
454
+ These options are also valid properties of all the instances of the `CDP` class.
455
+
456
+ `callback` is a listener automatically added to the `connect` event of the
457
+ returned `EventEmitter`. When `callback` is omitted a `Promise` object is
458
+ returned which becomes fulfilled if the `connect` event is triggered and
459
+ rejected if the `error` event is triggered.
460
+
461
+ The `EventEmitter` supports the following events:
462
+
463
+ #### Event: 'connect'
464
+
465
+ ```javascript
466
+ function (client) {}
467
+ ```
468
+
469
+ Emitted when the connection to the WebSocket is established.
470
+
471
+ `client` is an instance of the `CDP` class.
472
+
473
+ #### Event: 'error'
474
+
475
+ ```javascript
476
+ function (err) {}
477
+ ```
478
+
479
+ Emitted when `http://host:port/json` cannot be reached or if it is not possible
480
+ to connect to the WebSocket.
481
+
482
+ `err` is an instance of `Error`.
483
+
484
+ ### CDP.Protocol([options], [callback])
485
+
486
+ Fetch the [Chrome Debugging Protocol] descriptor.
487
+
488
+ `options` is an object with the following optional properties:
489
+
490
+ - `host`: HTTP frontend host. Defaults to `localhost`;
491
+ - `port`: HTTP frontend port. Defaults to `9222`;
492
+ - `secure`: HTTPS/WSS frontend. Defaults to `false`;
493
+ - `remote`: a boolean indicating whether the protocol must be fetched *remotely*
494
+ or if the local version must be returned. If it is not possible to fulfill the
495
+ request then the local version is used. Defaults to `false`.
496
+
497
+ `callback` is executed when the protocol is fetched, it gets the following
498
+ arguments:
499
+
500
+ - `err`: a `Error` object indicating the success status;
501
+ - `protocol`: an object with the following properties:
502
+ - `remote`: a boolean indicating whether the returned descriptor is the
503
+ remote version or not (due to user choice or error);
504
+ - `descriptor`: the [Chrome Debugging Protocol] descriptor.
505
+
506
+ When `callback` is omitted a `Promise` object is returned.
507
+
508
+ For example:
509
+
510
+ ```javascript
511
+ const CDP = require('chrome-remote-interface');
512
+ CDP.Protocol(function (err, protocol) {
513
+ if (!err) {
514
+ console.log(JSON.stringify(protocol.descriptor, null, 4));
515
+ }
516
+ });
517
+ ```
518
+
519
+ ### CDP.List([options], [callback])
520
+
521
+ Request the list of the available open targets/tabs of the remote instance.
522
+
523
+ `options` is an object with the following optional properties:
524
+
525
+ - `host`: HTTP frontend host. Defaults to `localhost`;
526
+ - `port`: HTTP frontend port. Defaults to `9222`;
527
+ - `secure`: HTTPS/WSS frontend. Defaults to `false`.
528
+
529
+ `callback` is executed when the list is correctly received, it gets the
530
+ following arguments:
531
+
532
+ - `err`: a `Error` object indicating the success status;
533
+ - `targets`: the array returned by `http://host:port/json/list` containing the
534
+ target list.
535
+
536
+ When `callback` is omitted a `Promise` object is returned.
537
+
538
+ For example:
539
+
540
+ ```javascript
541
+ const CDP = require('chrome-remote-interface');
542
+ CDP.List(function (err, targets) {
543
+ if (!err) {
544
+ console.log(targets);
545
+ }
546
+ });
547
+ ```
548
+
549
+ ### CDP.New([options], [callback])
550
+
551
+ Create a new target/tab in the remote instance.
552
+
553
+ `options` is an object with the following optional properties:
554
+
555
+ - `host`: HTTP frontend host. Defaults to `localhost`;
556
+ - `port`: HTTP frontend port. Defaults to `9222`;
557
+ - `secure`: HTTPS/WSS frontend. Defaults to `false`;
558
+ - `url`: URL to load in the new target/tab. Defaults to `about:blank`.
559
+
560
+ `callback` is executed when the target is created, it gets the following
561
+ arguments:
562
+
563
+ - `err`: a `Error` object indicating the success status;
564
+ - `target`: the object returned by `http://host:port/json/new` containing the
565
+ target.
566
+
567
+ When `callback` is omitted a `Promise` object is returned.
568
+
569
+ For example:
570
+
571
+ ```javascript
572
+ const CDP = require('chrome-remote-interface');
573
+ CDP.New(function (err, target) {
574
+ if (!err) {
575
+ console.log(target);
576
+ }
577
+ });
578
+ ```
579
+
580
+ ### CDP.Activate([options], [callback])
581
+
582
+ Activate an open target/tab of the remote instance.
583
+
584
+ `options` is an object with the following properties:
585
+
586
+ - `host`: HTTP frontend host. Defaults to `localhost`;
587
+ - `port`: HTTP frontend port. Defaults to `9222`;
588
+ - `secure`: HTTPS/WSS frontend. Defaults to `false`;
589
+ - `id`: Target id. Required, no default.
590
+
591
+ `callback` is executed when the response to the activation request is
592
+ received. It gets the following arguments:
593
+
594
+ - `err`: a `Error` object indicating the success status;
595
+
596
+ When `callback` is omitted a `Promise` object is returned.
597
+
598
+ For example:
599
+
600
+ ```javascript
601
+ const CDP = require('chrome-remote-interface');
602
+ CDP.Activate({'id': 'CC46FBFA-3BDA-493B-B2E4-2BE6EB0D97EC'}, function (err) {
603
+ if (!err) {
604
+ console.log('target is activated');
605
+ }
606
+ });
607
+ ```
608
+
609
+ ### CDP.Close([options], [callback])
610
+
611
+ Close an open target/tab of the remote instance.
612
+
613
+ `options` is an object with the following properties:
614
+
615
+ - `host`: HTTP frontend host. Defaults to `localhost`;
616
+ - `port`: HTTP frontend port. Defaults to `9222`;
617
+ - `secure`: HTTPS/WSS frontend. Defaults to `false`;
618
+ - `id`: Target id. Required, no default.
619
+
620
+ `callback` is executed when the response to the close request is received. It
621
+ gets the following arguments:
622
+
623
+ - `err`: a `Error` object indicating the success status;
624
+
625
+ When `callback` is omitted a `Promise` object is returned.
626
+
627
+ For example:
628
+
629
+ ```javascript
630
+ const CDP = require('chrome-remote-interface');
631
+ CDP.Close({'id': 'CC46FBFA-3BDA-493B-B2E4-2BE6EB0D97EC'}, function (err) {
632
+ if (!err) {
633
+ console.log('target is closing');
634
+ }
635
+ });
636
+ ```
637
+
638
+ Note that the callback is fired when the target is *queued* for removal, but the
639
+ actual removal will occur asynchronously.
640
+
641
+ ### CDP.Version([options], [callback])
642
+
643
+ Request version information from the remote instance.
644
+
645
+ `options` is an object with the following optional properties:
646
+
647
+ - `host`: HTTP frontend host. Defaults to `localhost`;
648
+ - `port`: HTTP frontend port. Defaults to `9222`;
649
+ - `secure`: HTTPS/WSS frontend. Defaults to `false`.
650
+
651
+ `callback` is executed when the version information is correctly received, it
652
+ gets the following arguments:
653
+
654
+ - `err`: a `Error` object indicating the success status;
655
+ - `info`: a JSON object returned by `http://host:port/json/version` containing
656
+ the version information.
657
+
658
+ When `callback` is omitted a `Promise` object is returned.
659
+
660
+ For example:
661
+
662
+ ```javascript
663
+ const CDP = require('chrome-remote-interface');
664
+ CDP.Version(function (err, info) {
665
+ if (!err) {
666
+ console.log(info);
667
+ }
668
+ });
669
+ ```
670
+
671
+ ### Class: CDP
672
+
673
+ #### Event: 'event'
674
+
675
+ ```javascript
676
+ function (message) {}
677
+ ```
678
+
679
+ Emitted when the remote instance sends any notification through the WebSocket.
680
+
681
+ `message` is the object received, it has the following properties:
682
+
683
+ - `method`: a string describing the notification (e.g.,
684
+ `'Network.requestWillBeSent'`);
685
+ - `params`: an object containing the payload.
686
+
687
+ Refer to the [Chrome Debugging Protocol] specification for more information.
688
+
689
+ For example:
690
+
691
+ ```javascript
692
+ client.on('event', function (message) {
693
+ if (message.method === 'Network.requestWillBeSent') {
694
+ console.log(message.params);
695
+ }
696
+ });
697
+ ```
698
+
699
+ #### Event: '`<domain>`.`<method>`'
700
+
701
+ ```javascript
702
+ function (params) {}
703
+ ```
704
+
705
+ Emitted when the remote instance sends a notification for `<domain>.<method>`
706
+ through the WebSocket.
707
+
708
+ `params` is an object containing the payload.
709
+
710
+ This is just a utility event which allows to easily listen for specific
711
+ notifications (see [`'event'`](#event-event)), for example:
712
+
713
+ ```javascript
714
+ client.on('Network.requestWillBeSent', console.log);
715
+ ```
716
+
717
+ #### Event: 'ready'
718
+
719
+ ```javascript
720
+ function () {}
721
+ ```
722
+
723
+ Emitted every time that there are no more pending commands waiting for a
724
+ response from the remote instance. The interaction is asynchronous so the only
725
+ way to serialize a sequence of commands is to use the callback provided by
726
+ the [`send`](#clientsendmethod-params-callback) method. This event acts as a
727
+ barrier and it is useful to avoid the *callback hell* in certain simple
728
+ situations.
729
+
730
+ Users are encouraged to extensively check the response of each method and should
731
+ prefer the promises API when dealing with complex asynchronous program flows.
732
+
733
+ For example to load a URL only after having enabled the notifications of both
734
+ `Network` and `Page` domains:
735
+
736
+ ```javascript
737
+ client.Network.enable();
738
+ client.Page.enable();
739
+ client.once('ready', function () {
740
+ client.Page.navigate({'url': 'https://github.com'});
741
+ });
742
+ ```
743
+
744
+ In this particular case, not enforcing this kind of serialization may cause that
745
+ the remote instance does not properly deliver the desired notifications the
746
+ client.
747
+
748
+
749
+ #### Event: 'disconnect'
750
+
751
+ ```javascript
752
+ function () {}
753
+ ```
754
+
755
+ Emitted when the instance closes the WebSocket connection.
756
+
757
+ This may happen for example when the user opens DevTools or when the tab is
758
+ closed.
759
+
760
+ #### client.send(method, [params], [callback])
761
+
762
+ Issue a command to the remote instance.
763
+
764
+ `method` is a string describing the command.
765
+
766
+ `params` is an object containing the payload.
767
+
768
+ `callback` is executed when the remote instance sends a response to this
769
+ command, it gets the following arguments:
770
+
771
+ - `error`: a boolean value indicating the success status, as reported by the
772
+ remote instance;
773
+ - `response`: an object containing either the response (`result` field, if
774
+ `error === false`) or the indication of the error (`error` field, if `error
775
+ === true`).
776
+
777
+ When `callback` is omitted a `Promise` object is returned instead, with the
778
+ fulfilled/rejected states implemented according to the `error` parameter.
779
+
780
+ Note that the field `id` mentioned in the [Chrome Debugging Protocol]
781
+ specification is managed internally and it is not exposed to the user.
782
+
783
+ For example:
784
+
785
+ ```javascript
786
+ client.send('Page.navigate', {'url': 'https://github.com'}, console.log);
787
+ ```
788
+
789
+ #### client.`<domain>`.`<method>`([params], [callback])
790
+
791
+ Just a shorthand for:
792
+
793
+ ```javascript
794
+ client.send('<domain>.<method>', params, callback);
795
+ ```
796
+
797
+ For example:
798
+
799
+ ```javascript
800
+ client.Page.navigate({'url': 'https://github.com'}, console.log);
801
+ ```
802
+
803
+ #### client.`<domain>`.`<event>`([callback])
804
+
805
+ Just a shorthand for:
806
+
807
+ ```javascript
808
+ client.on('<domain>.<event>', callback);
809
+ ```
810
+
811
+ The only difference is that when `callback` is omitted the event is registered
812
+ only once and a `Promise` object is returned.
813
+
814
+ For example:
815
+
816
+ ```javascript
817
+ client.Network.requestWillBeSent(console.log);
818
+ ```
819
+
820
+ #### client.close([callback])
821
+
822
+ Close the connection to the remote instance.
823
+
824
+ `callback` is executed when the WebSocket is successfully closed.
825
+
826
+ When `callback` is omitted a `Promise` object is returned.
827
+
828
+ Contributors
829
+ ------------
830
+
831
+ - [Andrey Sidorov](https://github.com/sidorares)
832
+ - [Greg Cochard](https://github.com/gcochard)
833
+
834
+ Resources
835
+ ---------
836
+
837
+ - [Chrome Debugging Protocol]
838
+ - [Chrome Debugging Protocol Google group](https://groups.google.com/forum/#!forum/chrome-debugging-protocol)
839
+ - [devtools-protocol official repo](https://github.com/ChromeDevTools/devtools-protocol)
840
+ - [Showcase Chrome Debugging Protocol Clients](https://developer.chrome.com/devtools/docs/debugging-clients)
841
+ - [Awesome chrome-devtools](https://github.com/ChromeDevTools/awesome-chrome-devtools)
842
+
843
+ [Chrome Debugging Protocol]: https://chromedevtools.github.io/devtools-protocol/