opal-webpack-loader 0.9.10 → 0.9.11
Sign up to get free protection for your applications and to get access to all the features.
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
|