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: a695e20b5241e7494291b694fc637e1e810cc997e53a235a77c6c9672e180ef0
4
- data.tar.gz: 5faf19c2255368bae26ccf0a36c14e14d5e4fbca50ddf38cb6c0a023bf214601
3
+ metadata.gz: df7daa4166a459e2bbd8942eb051e176718b2f0f2b3e0a8eec03d4c3c7232607
4
+ data.tar.gz: e4ca6d4e0a2f3ccb8696d1d6d4cfa6f0812e9342511ca888d26a725a98370701
5
5
  SHA512:
6
- metadata.gz: a3425769cc9802627bb418d84a615d89fcc4e42c04a8b344ed885ecb829b7f5f89e3cd0ea9538c95dd75fb6f4b22192834d7fe93f9922cd8e04c14fa58d48e5c
7
- data.tar.gz: 9f2283d3e18722c6d9095ced3bf3fa854045058037f2707848314996affc8a35845b807247fabdd80c321aab18fa5f174954e2f8623018f21d51232e389fdae4
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, compile_server_options[:socket_path]) }
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
@@ -58,4 +58,4 @@ if npm != ''
58
58
  end
59
59
  else
60
60
  STDERR.puts "opal-webpack-loader: Unable to check npm package version. Please check your npm installation."
61
- end
61
+ end
@@ -33,18 +33,22 @@ module OpalWebpackLoader
33
33
  end
34
34
  end
35
35
 
36
- def initialize
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, socket_path)
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
@@ -1,3 +1,3 @@
1
1
  module OpalWebpackLoader
2
- VERSION="0.9.10"
2
+ VERSION="0.9.11"
3
3
  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.10
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: 2019-12-20 00:00:00.000000000 Z
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