opal 1.2.0 → 1.3.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc.await.js +6 -0
- data/.eslintrc.js +34 -0
- data/.github/workflows/build.yml +8 -0
- data/.rubocop.yml +9 -0
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/Rakefile +1 -0
- data/UNRELEASED.md +64 -38
- data/docs/async.md +109 -0
- data/docs/roda-sprockets.md +0 -2
- data/exe/opal +2 -0
- data/exe/opal-repl +2 -2
- data/lib/opal/builder.rb +5 -1
- data/lib/opal/builder_processors.rb +7 -2
- data/lib/opal/cache/file_cache.rb +119 -0
- data/lib/opal/cache.rb +71 -0
- data/lib/opal/cli.rb +35 -1
- data/lib/opal/cli_options.rb +21 -0
- data/lib/opal/cli_runners/chrome.rb +21 -14
- data/lib/opal/cli_runners/chrome_cdp_interface.js +30285 -0
- data/lib/opal/cli_runners/{chrome.js → chrome_cdp_interface.rb} +27 -6
- data/lib/opal/cli_runners/compiler.rb +2 -1
- data/lib/opal/cli_runners/gjs.rb +27 -0
- data/lib/opal/cli_runners/mini_racer.rb +36 -0
- data/lib/opal/cli_runners/source-map-support-browser.js +276 -91
- data/lib/opal/cli_runners/source-map-support-node.js +276 -91
- data/lib/opal/cli_runners/source-map-support.js +60 -18
- data/lib/opal/cli_runners.rb +2 -0
- data/lib/opal/compiler.rb +99 -10
- data/lib/opal/fragment.rb +77 -14
- data/lib/opal/nodes/args/extract_kwrestarg.rb +6 -4
- data/lib/opal/nodes/args/extract_restarg.rb +10 -12
- data/lib/opal/nodes/args.rb +28 -0
- data/lib/opal/nodes/base.rb +29 -5
- data/lib/opal/nodes/call.rb +123 -2
- data/lib/opal/nodes/case.rb +7 -1
- data/lib/opal/nodes/class.rb +12 -2
- data/lib/opal/nodes/def.rb +3 -23
- data/lib/opal/nodes/definitions.rb +21 -4
- data/lib/opal/nodes/helpers.rb +2 -2
- data/lib/opal/nodes/if.rb +39 -9
- data/lib/opal/nodes/iter.rb +15 -3
- data/lib/opal/nodes/lambda.rb +3 -1
- data/lib/opal/nodes/literal.rb +13 -7
- data/lib/opal/nodes/logic.rb +2 -2
- data/lib/opal/nodes/module.rb +12 -2
- data/lib/opal/nodes/rescue.rb +59 -34
- data/lib/opal/nodes/scope.rb +88 -6
- data/lib/opal/nodes/super.rb +52 -25
- data/lib/opal/nodes/top.rb +13 -7
- data/lib/opal/nodes/while.rb +7 -1
- data/lib/opal/parser/patch.rb +2 -1
- data/lib/opal/repl.rb +137 -49
- data/lib/opal/rewriters/binary_operator_assignment.rb +10 -10
- data/lib/opal/rewriters/block_to_iter.rb +3 -3
- data/lib/opal/rewriters/for_rewriter.rb +7 -7
- data/lib/opal/rewriters/js_reserved_words.rb +5 -3
- data/lib/opal/source_map/file.rb +7 -4
- data/lib/opal/source_map/map.rb +17 -3
- data/lib/opal/version.rb +1 -1
- data/opal/corelib/array.rb +2 -2
- data/opal/corelib/binding.rb +46 -0
- data/opal/corelib/boolean.rb +54 -4
- data/opal/corelib/class.rb +2 -0
- data/opal/corelib/constants.rb +2 -2
- data/opal/corelib/error.rb +98 -12
- data/opal/corelib/io.rb +250 -38
- data/opal/corelib/kernel/format.rb +5 -2
- data/opal/corelib/kernel.rb +44 -23
- data/opal/corelib/main.rb +5 -0
- data/opal/corelib/method.rb +1 -0
- data/opal/corelib/module.rb +28 -0
- data/opal/corelib/number.rb +12 -1
- data/opal/corelib/random/seedrandom.js.rb +2 -2
- data/opal/corelib/regexp.rb +47 -3
- data/opal/corelib/runtime.js +152 -12
- data/opal/corelib/string/encoding.rb +17 -17
- data/opal/corelib/string.rb +2 -0
- data/opal/corelib/struct.rb +10 -3
- data/opal/corelib/trace_point.rb +57 -0
- data/opal/opal/full.rb +2 -0
- data/package.json +3 -2
- data/spec/filters/bugs/array.rb +0 -1
- data/spec/filters/bugs/basicobject.rb +0 -1
- data/spec/filters/bugs/binding.rb +27 -0
- data/spec/filters/bugs/enumerator.rb +132 -0
- data/spec/filters/bugs/exception.rb +70 -93
- data/spec/filters/bugs/float.rb +0 -1
- data/spec/filters/bugs/kernel.rb +3 -9
- data/spec/filters/bugs/language.rb +15 -58
- data/spec/filters/bugs/main.rb +16 -0
- data/spec/filters/bugs/matrix.rb +39 -0
- data/spec/filters/bugs/method.rb +0 -2
- data/spec/filters/bugs/module.rb +36 -79
- data/spec/filters/bugs/proc.rb +0 -1
- data/spec/filters/bugs/regexp.rb +0 -16
- data/spec/filters/bugs/trace_point.rb +12 -0
- data/spec/filters/bugs/warnings.rb +0 -4
- data/spec/filters/unsupported/freeze.rb +2 -0
- data/spec/filters/unsupported/privacy.rb +4 -0
- data/spec/lib/compiler_spec.rb +7 -1
- data/spec/lib/repl_spec.rb +4 -2
- data/spec/lib/source_map/file_spec.rb +1 -1
- data/spec/mspec-opal/formatters.rb +18 -4
- data/spec/mspec-opal/runner.rb +2 -2
- data/spec/opal/core/boolean_spec.rb +44 -0
- data/spec/opal/core/hash_spec.rb +8 -0
- data/spec/opal/core/number/to_s_spec.rb +11 -0
- data/spec/opal/stdlib/json/ext_spec.rb +3 -3
- data/spec/opal/stdlib/logger/logger_spec.rb +10 -1
- data/spec/ruby_specs +18 -0
- data/stdlib/await.rb +83 -0
- data/stdlib/base64.rb +4 -4
- data/stdlib/bigdecimal/bignumber.js.rb +4 -2
- data/stdlib/bigdecimal.rb +1 -0
- data/stdlib/gjs/io.rb +33 -0
- data/stdlib/gjs/kernel.rb +5 -0
- data/stdlib/gjs.rb +2 -0
- data/stdlib/js.rb +4 -0
- data/stdlib/json.rb +3 -3
- data/stdlib/logger.rb +1 -1
- data/stdlib/nashorn/file.rb +2 -0
- data/stdlib/nodejs/env.rb +7 -0
- data/stdlib/nodejs/file.rb +6 -41
- data/stdlib/nodejs/io.rb +21 -5
- data/stdlib/nodejs/js-yaml-3-6-1.js +2 -2
- data/stdlib/opal/miniracer.rb +6 -0
- data/stdlib/opal/platform.rb +4 -0
- data/stdlib/opal/repl_js.rb +5 -0
- data/stdlib/opal/replutils.rb +271 -0
- data/stdlib/opal-parser.rb +24 -11
- data/stdlib/opal-platform.rb +8 -0
- data/stdlib/promise/v2.rb +16 -4
- data/stdlib/promise.rb +14 -0
- data/stdlib/stringio.rb +13 -110
- data/stdlib/thread.rb +29 -0
- data/tasks/building.rake +10 -4
- data/tasks/linting-parse-eslint-results.js +39 -0
- data/tasks/linting.rake +38 -28
- data/tasks/performance/asciidoctor_test.rb.erb +6 -0
- data/tasks/performance/optimization_status.rb +77 -0
- data/tasks/performance.rake +149 -0
- data/tasks/testing.rake +9 -1
- data/test/nodejs/test_await.rb +169 -0
- data/test/opal/promisev2/test_error.rb +9 -3
- data/test/opal/unsupported_and_bugs.rb +5 -0
- data/vendored-minitest/minitest/benchmark.rb +9 -7
- data/vendored-minitest/minitest/test.rb +14 -12
- data/vendored-minitest/minitest.rb +19 -16
- data/yarn.lock +686 -117
- metadata +60 -23
- data/.jshintrc +0 -41
- data/spec/filters/unsupported/refinements.rb +0 -8
- data/vendored-minitest/minitest/hell.rb +0 -11
- data/vendored-minitest/minitest/parallel.rb +0 -65
- data/vendored-minitest/minitest/pride.rb +0 -4
- data/vendored-minitest/minitest/pride_plugin.rb +0 -142
- data/vendored-minitest/minitest/unit.rb +0 -45
@@ -1,13 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This script I converted into Opal, so that I don't have to write
|
4
|
+
# buffer handling again. We have gets, Node has nothing close to it,
|
5
|
+
# even async.
|
6
|
+
|
7
|
+
require 'opal/platform'
|
8
|
+
|
9
|
+
%x{
|
1
10
|
var CDP = require("chrome-remote-interface");
|
2
11
|
var fs = require("fs");
|
3
12
|
|
4
|
-
|
5
|
-
// and it doesn't support interactive stdin input (which is ok for our scenario)
|
6
|
-
var dir = fs.readFileSync("/dev/stdin").toString();
|
13
|
+
var dir = #{ARGV[0]}
|
7
14
|
|
8
15
|
var options = {
|
9
|
-
host:
|
10
|
-
port:
|
16
|
+
host: #{ENV['CHROME_HOST'] || 'localhost'},
|
17
|
+
port: #{ENV['CHROME_PORT'] || 9222}
|
11
18
|
};
|
12
19
|
|
13
20
|
CDP(options, function(client) {
|
@@ -88,7 +95,20 @@ CDP(options, function(client) {
|
|
88
95
|
console.log(stack);
|
89
96
|
|
90
97
|
process.exit(1);
|
91
|
-
})
|
98
|
+
});
|
99
|
+
|
100
|
+
Page.javascriptDialogOpening((dialog) => {
|
101
|
+
#{
|
102
|
+
if `dialog.type` == 'prompt'
|
103
|
+
message = gets&.chomp
|
104
|
+
if message
|
105
|
+
`Page.handleJavaScriptDialog({accept: true, promptText: #{message}})`
|
106
|
+
else
|
107
|
+
`Page.handleJavaScriptDialog({accept: false})`
|
108
|
+
end
|
109
|
+
end
|
110
|
+
}
|
111
|
+
});
|
92
112
|
|
93
113
|
Page.loadEventFired(() => {
|
94
114
|
Runtime.evaluate({ expression: "window.OPAL_EXIT_CODE" }).then(function(output) {
|
@@ -105,3 +125,4 @@ CDP(options, function(client) {
|
|
105
125
|
Page.navigate({ url: "file://"+dir+"/index.html" })
|
106
126
|
});
|
107
127
|
});
|
128
|
+
}
|
@@ -9,7 +9,8 @@ Opal::CliRunners::Compiler = ->(data) {
|
|
9
9
|
map_file = options[:map_file]
|
10
10
|
output = data.fetch(:output)
|
11
11
|
|
12
|
-
compiled_source = builder.to_s
|
12
|
+
compiled_source = builder.to_s
|
13
|
+
compiled_source += "\n" + builder.source_map.to_data_uri_comment unless options[:no_source_map]
|
13
14
|
output.puts compiled_source
|
14
15
|
File.write(map_file, builder.source_map.to_json) if map_file
|
15
16
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'opal/paths'
|
4
|
+
require 'opal/cli_runners/system_runner'
|
5
|
+
require 'shellwords'
|
6
|
+
|
7
|
+
module Opal
|
8
|
+
module CliRunners
|
9
|
+
# Gjs is GNOME's JavaScript runtime based on Mozilla SpiderMonkey
|
10
|
+
class Gjs
|
11
|
+
def self.call(data)
|
12
|
+
exe = ENV['GJS_PATH'] || 'gjs'
|
13
|
+
|
14
|
+
opts = Shellwords.shellwords(ENV['GJS_OPTS'] || '')
|
15
|
+
|
16
|
+
SystemRunner.call(data) do |tempfile|
|
17
|
+
[exe, *opts, tempfile.path, *data[:argv]]
|
18
|
+
end
|
19
|
+
rescue Errno::ENOENT
|
20
|
+
raise MissingGjs, 'Please install Gjs to be able to run Opal scripts.'
|
21
|
+
end
|
22
|
+
|
23
|
+
class MissingGjs < RunnerError
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mini_racer'
|
4
|
+
require 'opal/paths'
|
5
|
+
|
6
|
+
module Opal
|
7
|
+
module CliRunners
|
8
|
+
class MiniRacer
|
9
|
+
def self.call(data)
|
10
|
+
::MiniRacer::Platform.set_flags! :harmony
|
11
|
+
|
12
|
+
builder = data.fetch(:builder)
|
13
|
+
output = data.fetch(:output)
|
14
|
+
# TODO: pass it
|
15
|
+
argv = data.fetch(:argv)
|
16
|
+
|
17
|
+
v8 = ::MiniRacer::Context.new
|
18
|
+
v8.attach('prompt', ->(_msg = '') { $stdin.gets&.chomp })
|
19
|
+
v8.attach('console.log', ->(i) { output.print(i); output.flush })
|
20
|
+
v8.attach('console.warn', ->(i) { $stderr.print(i); $stderr.flush })
|
21
|
+
v8.attach('crypto.randomBytes', method(:random_bytes).to_proc)
|
22
|
+
v8.attach('opalminiracer.exit', ->(status) { Kernel.exit(status) })
|
23
|
+
v8.attach('opalminiracer.argv', argv)
|
24
|
+
|
25
|
+
code = builder.to_s + "\n" + builder.source_map.to_data_uri_comment
|
26
|
+
|
27
|
+
v8.eval(code)
|
28
|
+
end
|
29
|
+
|
30
|
+
# A polyfill so that SecureRandom works in repl correctly.
|
31
|
+
def self.random_bytes(bytes)
|
32
|
+
::SecureRandom.bytes(bytes).split('').map(&:ord)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|