opal-webpack-loader 0.9.10 → 0.9.11
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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: df7daa4166a459e2bbd8942eb051e176718b2f0f2b3e0a8eec03d4c3c7232607
|
|
4
|
+
data.tar.gz: e4ca6d4e0a2f3ccb8696d1d6d4cfa6f0812e9342511ca888d26a725a98370701
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: df26e49ff98da208b57f55e253b6c4c9f5a25ac3dba28b7d9485882f8e207069e24acbaf730368a2da543e2d57030e4c36c230350bfb025aed6c3b50f0ebfcc9
|
|
7
|
+
data.tar.gz: 2367ec570bc9ca4fcb28b1829c992ab3ee2365e3119b90040696b0bf2da55427ddafb0ff0ec128c645b4c1a7d701a5cc3bb87be03d841006f236a532dd91e1df
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
require 'digest'
|
|
2
3
|
require 'open3'
|
|
3
4
|
require 'oj'
|
|
4
5
|
require 'c_lexer'
|
|
@@ -44,6 +45,16 @@ OptionParser.new do |opts|
|
|
|
44
45
|
opts.on('-s', '--socket-path PATH', 'Path of the socket the compile server should create.') do |s|
|
|
45
46
|
compile_server_options[:socket_path] = s
|
|
46
47
|
end
|
|
48
|
+
|
|
49
|
+
opts.on('-m', '--memcached URL', 'URL of memcached server. Will enable use of memcached for caching compiler results.') do |m|
|
|
50
|
+
compile_server_options[:memcached] = m
|
|
51
|
+
require 'dalli'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
opts.on('-e', '--redis URL', 'URL of redis server. Will enable use of redis for caching compiler results.') do |e|
|
|
55
|
+
compile_server_options[:redis] = e
|
|
56
|
+
require 'redis'
|
|
57
|
+
end
|
|
47
58
|
end.parse!
|
|
48
59
|
|
|
49
60
|
modules_to_require.each do |mod|
|
|
@@ -66,13 +77,6 @@ else
|
|
|
66
77
|
number_of_workers = ARGV[1].to_i
|
|
67
78
|
number_of_workers == 4 if number_of_workers == 0
|
|
68
79
|
number_of_workers == 16 if number_of_workers > 16
|
|
69
|
-
if ARGV[2] && ARGV[2].start_with?('webpack')
|
|
70
|
-
raise <<~MSG
|
|
71
|
-
Please change the scripts in package.json to only start webpack:\n
|
|
72
|
-
eg. from: "debug": "bundle exec opal-webpack-compile-server start 8 webpack --config=config/webpack/test.js"
|
|
73
|
-
to just: "debug": "webpack --config=config/webpack/test.js"
|
|
74
|
-
MSG
|
|
75
|
-
end
|
|
76
80
|
else
|
|
77
81
|
raise 'arguments must be either "stop" or "start number_of_workers"'
|
|
78
82
|
exit(1)
|
|
@@ -83,7 +87,7 @@ else
|
|
|
83
87
|
Opal.append_paths(*load_paths)
|
|
84
88
|
end
|
|
85
89
|
|
|
86
|
-
pid = fork { OpalWebpackLoader::CompileServer.new.start(number_of_workers, compiler_options
|
|
90
|
+
pid = fork { OpalWebpackLoader::CompileServer.new(compile_server_options).start(number_of_workers, compiler_options) }
|
|
87
91
|
|
|
88
92
|
have_socket = false
|
|
89
93
|
start_time = Time.now
|
|
@@ -117,4 +121,4 @@ else
|
|
|
117
121
|
exit 0
|
|
118
122
|
end
|
|
119
123
|
Process.kill("TERM", pid)
|
|
120
|
-
end
|
|
124
|
+
end
|
data/lib/opal-webpack-loader.rb
CHANGED
|
@@ -33,18 +33,22 @@ module OpalWebpackLoader
|
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
attr_reader :cache
|
|
37
|
+
|
|
38
|
+
def initialize(options)
|
|
37
39
|
@read_pipe, @write_pipe = IO.pipe
|
|
38
40
|
@workers = {}
|
|
39
41
|
@signal_queue = []
|
|
42
|
+
@socket_path = options[:socket_path]
|
|
43
|
+
@options = options
|
|
40
44
|
end
|
|
41
45
|
|
|
42
|
-
def start(number_of_workers = 4, compiler_options
|
|
46
|
+
def start(number_of_workers = 4, compiler_options)
|
|
43
47
|
$PROGRAM_NAME = 'owl compile server'
|
|
44
48
|
@number_of_workers = number_of_workers
|
|
45
49
|
@server_pid = Process.pid
|
|
46
50
|
$stderr.sync = $stdout.sync = true
|
|
47
|
-
@socket = UNIXServer.new(socket_path)
|
|
51
|
+
@socket = UNIXServer.new(@socket_path)
|
|
48
52
|
spawn_workers(compiler_options)
|
|
49
53
|
SIGNALS.each { |sig| trap_deferred(sig) }
|
|
50
54
|
trap('CHLD') { @write_pipe.write_nonblock('.') }
|
|
@@ -118,7 +122,7 @@ module OpalWebpackLoader
|
|
|
118
122
|
tempfile = Tempfile.new('')
|
|
119
123
|
tempfile.unlink
|
|
120
124
|
tempfile.sync = true
|
|
121
|
-
worker = OpalWebpackLoader::CompileWorker.new(@server_pid, @socket, tempfile, worker_number, compiler_options)
|
|
125
|
+
worker = OpalWebpackLoader::CompileWorker.new(@server_pid, @socket, tempfile, worker_number, compiler_options, @options)
|
|
122
126
|
pid = fork { init_worker(worker) }
|
|
123
127
|
@workers[pid] = worker
|
|
124
128
|
end
|
|
@@ -131,4 +135,4 @@ module OpalWebpackLoader
|
|
|
131
135
|
end
|
|
132
136
|
end
|
|
133
137
|
end
|
|
134
|
-
end
|
|
138
|
+
end
|
|
@@ -4,14 +4,22 @@ module OpalWebpackLoader
|
|
|
4
4
|
class CompileWorker
|
|
5
5
|
SIGNALS = %w[QUIT]
|
|
6
6
|
|
|
7
|
-
attr_reader :number, :tempfile
|
|
7
|
+
attr_reader :cache, :number, :compiler_options_digest, :tempfile
|
|
8
8
|
|
|
9
|
-
def initialize(master_pid, socket, tempfile, number, compiler_options)
|
|
9
|
+
def initialize(master_pid, socket, tempfile, number, compiler_options, other_options)
|
|
10
10
|
@master_pid = master_pid
|
|
11
11
|
@socket = socket
|
|
12
12
|
@tempfile = tempfile
|
|
13
13
|
@number = number
|
|
14
14
|
@compiler_options = compiler_options.merge(es6_modules: true)
|
|
15
|
+
if other_options[:memcached]
|
|
16
|
+
@cache = Dalli::Client.new(other_options[:memchached])
|
|
17
|
+
elsif other_options[:redis]
|
|
18
|
+
@cache = Redis.new(url: other_options[:redis])
|
|
19
|
+
else
|
|
20
|
+
@cache = false
|
|
21
|
+
end
|
|
22
|
+
@compiler_options_digest = Digest::SHA1.hexdigest(Oj.dump(@compiler_options, mode: :strict)) if cache
|
|
15
23
|
end
|
|
16
24
|
|
|
17
25
|
def ==(other_number)
|
|
@@ -73,6 +81,12 @@ module OpalWebpackLoader
|
|
|
73
81
|
source = File.read(filename)
|
|
74
82
|
|
|
75
83
|
begin
|
|
84
|
+
if cache
|
|
85
|
+
source_digest = Digest::SHA1.hexdigest(source)
|
|
86
|
+
key = "owl_#{compiler_options_digest}_#{source_digest}_#{compile_source_map}"
|
|
87
|
+
result_json = cache.get(key)
|
|
88
|
+
return result_json if result_json
|
|
89
|
+
end
|
|
76
90
|
c = Opal::Compiler.new(source, @compiler_options.merge(file: filename))
|
|
77
91
|
result = { 'javascript' => c.compile }
|
|
78
92
|
if compile_source_map
|
|
@@ -80,7 +94,9 @@ module OpalWebpackLoader
|
|
|
80
94
|
result['source_map']['file'] = filename
|
|
81
95
|
end
|
|
82
96
|
result['required_trees'] = c.required_trees
|
|
83
|
-
Oj.dump(result, mode: :strict)
|
|
97
|
+
result_json = Oj.dump(result, mode: :strict)
|
|
98
|
+
cache.set(key, result_json) if cache
|
|
99
|
+
result_json
|
|
84
100
|
rescue Exception => e
|
|
85
101
|
Oj.dump({ 'error' => { 'name' => e.class.to_s, 'message' => e.message, 'backtrace' => e.backtrace.join("\n") } }, mode: :strict)
|
|
86
102
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: opal-webpack-loader
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jan Biedermann
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-03-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: opal
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: dalli
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 2.7.0
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 2.7.0
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: oj
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -52,6 +66,20 @@ dependencies:
|
|
|
52
66
|
- - ">="
|
|
53
67
|
- !ruby/object:Gem::Version
|
|
54
68
|
version: 3.7.0
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: redis
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 4.1.0
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 4.1.0
|
|
55
83
|
- !ruby/object:Gem::Dependency
|
|
56
84
|
name: thor
|
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|