condenser 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/condenser/asset.rb +6 -3
- data/lib/condenser/build_cache.rb +22 -4
- data/lib/condenser/errors.rb +2 -1
- data/lib/condenser/processors/babel_processor.rb +5 -4
- data/lib/condenser/processors/node_processor.rb +9 -0
- data/lib/condenser/resolve.rb +2 -1
- data/lib/condenser/version.rb +1 -1
- data/test/cache_test.rb +8 -0
- data/test/preprocessor/babel_test.rb +21 -0
- data/test/test_helper.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bce2f9e63c85791fe398be271a8384c0c1ee1bebda8b6cb4576d797c73fd2095
|
4
|
+
data.tar.gz: ac1375ba4585e172d2fa8eca13e381773e5c76651ec871b23306fd435f5c026d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10b483f5a68484ec0841c6fde493100f1a13a1037b02b9f3ad4ebc38112711ad9deef64335f51dd1afdd15bf043d6db308171424daad54a3b58f34b5f3d2feed
|
7
|
+
data.tar.gz: a7e759c7f7e887560d21f497155d4eb57bbdc1dc2e76902f159abc20b6d1c4244576473b080b8906080bc0f2f17a30d1cda4f6d036f65c468d5bb9cfb533bf70
|
data/lib/condenser/asset.rb
CHANGED
@@ -71,7 +71,7 @@ class Condenser
|
|
71
71
|
process
|
72
72
|
@process_dependencies
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
d = []
|
76
76
|
deps.each do |i|
|
77
77
|
i = [i, nil] if i.is_a?(String)
|
@@ -147,6 +147,9 @@ class Condenser
|
|
147
147
|
Digest::SHA1.base64digest(JSON.generate([
|
148
148
|
Condenser::VERSION,
|
149
149
|
@source_file,
|
150
|
+
stat.ino,
|
151
|
+
stat.mtime.to_f,
|
152
|
+
stat.size,
|
150
153
|
@content_types_digest
|
151
154
|
]))
|
152
155
|
end
|
@@ -154,7 +157,7 @@ class Condenser
|
|
154
157
|
def process_cache_version
|
155
158
|
return @pcv if @pcv
|
156
159
|
|
157
|
-
f = [
|
160
|
+
f = []
|
158
161
|
all_dependenies(process_dependencies, [], :process_dependencies) do |dep|
|
159
162
|
f << [dep.source_file, dep.stat.ino, dep.stat.mtime.to_f, dep.stat.size]
|
160
163
|
end
|
@@ -165,7 +168,7 @@ class Condenser
|
|
165
168
|
def export_cache_version
|
166
169
|
return @ecv if @ecv
|
167
170
|
|
168
|
-
f = [
|
171
|
+
f = []
|
169
172
|
all_dependenies(export_dependencies, [], :export_dependencies) do |dep|
|
170
173
|
f << [dep.source_file, dep.stat.ino, dep.stat.mtime.to_f, dep.stat.size]
|
171
174
|
end
|
@@ -37,29 +37,47 @@ class Condenser
|
|
37
37
|
globs << file.match(/([^\.]+)(\.|$)/).to_a[1]
|
38
38
|
if path_match = @path.find { |p| file.start_with?(p) }
|
39
39
|
a = file.delete_prefix(path_match).match(/([^\.]+)(\.|$)/).to_a[1]
|
40
|
-
b = (File.dirname(a)
|
40
|
+
b = File.join(File.dirname(a), "*")
|
41
41
|
|
42
42
|
globs << a << a.delete_prefix('/')
|
43
|
-
globs <<
|
43
|
+
globs << b << b.delete_prefix('/')
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
|
+
others = []
|
47
48
|
@map_cache&.delete_if do |k,v|
|
48
49
|
if globs.any?{ |a| k.starts_with?(a) }
|
50
|
+
@export_dependencies[v.source_file]&.each do |a|
|
51
|
+
others << "/#{a.filename}".delete_suffix(File.extname(a.filename))
|
52
|
+
end
|
49
53
|
true
|
50
54
|
else
|
51
55
|
false
|
52
56
|
end
|
53
57
|
end
|
54
|
-
|
58
|
+
@map_cache&.delete_if do |k,v|
|
59
|
+
others.any?{ |a| k.starts_with?(a) || k.starts_with?("/" + a) }
|
60
|
+
end
|
61
|
+
|
62
|
+
others = []
|
55
63
|
@lookup_cache.delete_if do |key, value|
|
56
64
|
if globs.any?{ |a| key.starts_with?(a) }
|
65
|
+
value.each do |v|
|
66
|
+
@export_dependencies[v.source_file]&.each do |a|
|
67
|
+
others << "/#{a.filename}".delete_suffix(File.extname(a.filename))
|
68
|
+
end
|
69
|
+
end
|
57
70
|
value.each do |asset|
|
58
71
|
modified << asset.source_file
|
59
72
|
end
|
60
73
|
true
|
61
74
|
end
|
62
75
|
end
|
76
|
+
@lookup_cache&.delete_if do |k,v|
|
77
|
+
others.any?{ |a| k.starts_with?(a) || k.starts_with?("/" + a) }
|
78
|
+
end
|
79
|
+
|
80
|
+
|
63
81
|
|
64
82
|
removed.each do |file|
|
65
83
|
@process_dependencies[file]&.delete_if do |asset|
|
data/lib/condenser/errors.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Basic Condenser error classes
|
2
2
|
class Condenser
|
3
|
-
class Error
|
3
|
+
class Error < StandardError; end
|
4
|
+
class SyntaxError < ::SyntaxError; end
|
4
5
|
class CommandNotFoundError < Error; end
|
5
6
|
# class ArgumentError < Error; end
|
6
7
|
class ContentTypeMismatch < Error; end
|
@@ -3,9 +3,6 @@ require File.expand_path('../node_processor', __FILE__)
|
|
3
3
|
|
4
4
|
class Condenser::BabelProcessor < Condenser::NodeProcessor
|
5
5
|
|
6
|
-
class Error < StandardError
|
7
|
-
end
|
8
|
-
|
9
6
|
# npm install @babel/core @babel/runtime-corejs3 @babel/plugin-transform-runtime @babel/preset-env rollup rollup-plugin-commonjs rollup-plugin-node-resolve @babel/plugin-proposal-class-properties babel-plugin-transform-class-extended-hook
|
10
7
|
|
11
8
|
def self.call(environment, input)
|
@@ -90,7 +87,11 @@ class Condenser::BabelProcessor < Condenser::NodeProcessor
|
|
90
87
|
JS
|
91
88
|
|
92
89
|
if result['error']
|
93
|
-
|
90
|
+
if result['error'][0] == 'SyntaxError'
|
91
|
+
raise exec_syntax_error(result['error'][1], "/assets/#{input[:filename]}")
|
92
|
+
else
|
93
|
+
raise exec_runtime_error(result['error'][0] + ': ' + result['error'][1])
|
94
|
+
end
|
94
95
|
else
|
95
96
|
input[:source] = result['code']
|
96
97
|
input[:map] = result['map']
|
@@ -38,6 +38,15 @@ class Condenser
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
def exec_syntax_error(output, source_file)
|
42
|
+
error = Condenser::SyntaxError.new(output)
|
43
|
+
lines = output.split("\n")
|
44
|
+
lineno = lines[0][/\((\d+):\d+\)$/, 1] if lines[0]
|
45
|
+
lineno ||= 1
|
46
|
+
error.set_backtrace(["#{source_file}:#{lineno}"] + caller)
|
47
|
+
error
|
48
|
+
end
|
49
|
+
|
41
50
|
def exec_runtime_error(output)
|
42
51
|
error = RuntimeError.new(output)
|
43
52
|
lines = output.split("\n")
|
data/lib/condenser/resolve.rb
CHANGED
@@ -19,6 +19,7 @@ class Condenser
|
|
19
19
|
accept = Array(accept)
|
20
20
|
|
21
21
|
cache_key = [dirname, basename].flatten.join('/')
|
22
|
+
cache_key = "/#{cache_key}" if !cache_key.starts_with?('/')
|
22
23
|
cache_key << "@#{accept.join(',')}" if accept
|
23
24
|
build_cache.fetch(cache_key) do
|
24
25
|
build do
|
@@ -86,7 +87,7 @@ class Condenser
|
|
86
87
|
end
|
87
88
|
|
88
89
|
results = results.keys.sort.reduce([]) do |c, key|
|
89
|
-
c += results[key].sort_by(&:filename)
|
90
|
+
c += results[key].sort_by(&:filename).uniq { |f| f.filename }
|
90
91
|
end
|
91
92
|
|
92
93
|
results.sort_by!(&:filename)
|
data/lib/condenser/version.rb
CHANGED
data/test/cache_test.rb
CHANGED
@@ -171,6 +171,14 @@ class CacheTest < ActiveSupport::TestCase
|
|
171
171
|
assert_exported_file 'a.js', 'application/javascript', <<~JS
|
172
172
|
!function(){"use strict";console.log(10)}();
|
173
173
|
JS
|
174
|
+
|
175
|
+
file 'a/deps/dep.js', <<-JS
|
176
|
+
console.log( 20 );
|
177
|
+
JS
|
178
|
+
|
179
|
+
assert_exported_file 'a.js', 'application/javascript', <<~JS
|
180
|
+
!function(){"use strict";console.log(20)}();
|
181
|
+
JS
|
174
182
|
end
|
175
183
|
|
176
184
|
test 'a new dependency for a glob call is reflected in the next call' do
|
@@ -24,6 +24,27 @@ class CondenserBabelTest < ActiveSupport::TestCase
|
|
24
24
|
JS
|
25
25
|
end
|
26
26
|
|
27
|
+
test "error" do
|
28
|
+
file 'error.js', <<~JS
|
29
|
+
console.log('this file has an error');
|
30
|
+
|
31
|
+
var error = {;
|
32
|
+
JS
|
33
|
+
|
34
|
+
e = assert_raises Condenser::SyntaxError do
|
35
|
+
assert_file 'error.js', 'application/javascript'
|
36
|
+
end
|
37
|
+
assert_equal <<~ERROR.rstrip, e.message.rstrip
|
38
|
+
/assets/error.js: Unexpected token (3:13)
|
39
|
+
|
40
|
+
1 | console.log('this file has an error');
|
41
|
+
2 |
|
42
|
+
> 3 | var error = {;
|
43
|
+
| ^
|
44
|
+
4 |
|
45
|
+
ERROR
|
46
|
+
end
|
47
|
+
|
27
48
|
test 'not duplicating babel-helpers' do
|
28
49
|
file 'a.js', <<-JS
|
29
50
|
export default class {
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: condenser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Bracy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erubi
|