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: 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