condenser 1.2 → 1.3
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 +4 -4
- data/lib/condenser/asset.rb +19 -16
- data/lib/condenser/build_cache.rb +1 -1
- data/lib/condenser/context.rb +9 -25
- data/lib/condenser/helpers/parse_helpers.rb +1 -1
- data/lib/condenser/manifest.rb +3 -1
- data/lib/condenser/pipeline.rb +8 -3
- data/lib/condenser/processors/babel_processor.rb +1 -1
- data/lib/condenser/processors/css_media_combiner_processor.rb +81 -0
- data/lib/condenser/processors/js_analyzer.rb +0 -2
- data/lib/condenser/processors/purgecss_processor.rb +6 -4
- data/lib/condenser/processors/rollup_processor.rb +37 -35
- data/lib/condenser/resolve.rb +1 -3
- data/lib/condenser/templating_engine/ejs.rb +1 -1
- data/lib/condenser/transformers/dart_sass_transformer.rb +285 -0
- data/lib/condenser/transformers/jst_transformer.rb +67 -17
- data/lib/condenser/transformers/sass/functions.rb +133 -0
- data/lib/condenser/transformers/sass/importer.rb +48 -0
- data/lib/condenser/transformers/sass.rb +4 -0
- data/lib/condenser/transformers/sass_transformer.rb +124 -281
- data/lib/condenser/transformers/svg_transformer/base.rb +26 -0
- data/lib/condenser/transformers/svg_transformer/tag.rb +54 -0
- data/lib/condenser/transformers/svg_transformer/template.rb +151 -0
- data/lib/condenser/transformers/svg_transformer/template_error.rb +2 -0
- data/lib/condenser/transformers/svg_transformer/value.rb +13 -0
- data/lib/condenser/transformers/svg_transformer/var_generator.rb +10 -0
- data/lib/condenser/transformers/svg_transformer.rb +19 -0
- data/lib/condenser/version.rb +1 -1
- data/lib/condenser.rb +17 -5
- data/test/cache_test.rb +46 -2
- data/test/dependency_test.rb +2 -2
- data/test/manifest_test.rb +34 -0
- data/test/minifiers/terser_minifier_test.rb +0 -1
- data/test/minifiers/uglify_minifier_test.rb +0 -1
- data/test/postprocessors/css_media_combiner_test.rb +107 -0
- data/test/postprocessors/purgecss_test.rb +62 -0
- data/test/preprocessor/babel_test.rb +693 -299
- data/test/preprocessor/js_analyzer_test.rb +0 -2
- data/test/processors/rollup_test.rb +50 -20
- data/test/resolve_test.rb +8 -9
- data/test/server_test.rb +6 -1
- data/test/templates/ejs_test.rb +2 -11
- data/test/templates/erb_test.rb +0 -5
- data/test/test_helper.rb +3 -1
- data/test/transformers/dart_scss_test.rb +139 -0
- data/test/transformers/jst_test.rb +165 -21
- data/test/transformers/scss_test.rb +14 -0
- data/test/transformers/svg_test.rb +40 -0
- metadata +23 -6
- data/lib/condenser/transformers/sass_transformer/importer.rb +0 -50
@@ -4,8 +4,6 @@ class JSAnalyzerTest < ActiveSupport::TestCase
|
|
4
4
|
|
5
5
|
def setup
|
6
6
|
super
|
7
|
-
@env.unregister_preprocessor 'application/javascript', Condenser::BabelProcessor
|
8
|
-
@env.register_preprocessor 'application/javascript', Condenser::JSAnalyzer
|
9
7
|
@env.unregister_minifier('application/javascript')
|
10
8
|
end
|
11
9
|
|
@@ -31,15 +31,14 @@ class RollupTest < ActiveSupport::TestCase
|
|
31
31
|
(function () {
|
32
32
|
'use strict';
|
33
33
|
|
34
|
-
// This function
|
35
|
-
|
36
|
-
function cube(x) {
|
34
|
+
// This function gets included
|
35
|
+
function cube ( x ) {
|
37
36
|
return x * x * x;
|
38
37
|
}
|
39
38
|
|
40
|
-
console.log(cube(5)); // 125
|
39
|
+
console.log( cube( 5 ) ); // 125
|
41
40
|
|
42
|
-
}()
|
41
|
+
})();
|
43
42
|
FILE
|
44
43
|
end
|
45
44
|
|
@@ -59,13 +58,13 @@ class RollupTest < ActiveSupport::TestCase
|
|
59
58
|
(function () {
|
60
59
|
'use strict';
|
61
60
|
|
62
|
-
function cube(x) {
|
61
|
+
function cube ( x ) {
|
63
62
|
return 2 * x * x;
|
64
63
|
}
|
65
64
|
|
66
|
-
console.log(cube(5)); // 125
|
65
|
+
console.log( cube( 5 ) ); // 125
|
67
66
|
|
68
|
-
}()
|
67
|
+
})();
|
69
68
|
FILE
|
70
69
|
end
|
71
70
|
|
@@ -93,13 +92,13 @@ class RollupTest < ActiveSupport::TestCase
|
|
93
92
|
(function () {
|
94
93
|
'use strict';
|
95
94
|
|
96
|
-
function cube(x) {
|
95
|
+
function cube ( x ) {
|
97
96
|
return x * x * x;
|
98
97
|
}
|
99
98
|
|
100
|
-
console.log(cube(5)); // 125
|
99
|
+
console.log( cube( 5 ) ); // 125
|
101
100
|
|
102
|
-
}()
|
101
|
+
})();
|
103
102
|
FILE
|
104
103
|
end
|
105
104
|
|
@@ -126,17 +125,17 @@ class RollupTest < ActiveSupport::TestCase
|
|
126
125
|
(function () {
|
127
126
|
'use strict';
|
128
127
|
|
129
|
-
window.cube = function (x) {
|
128
|
+
window.cube = function ( x ) {
|
130
129
|
return x * x * x;
|
131
130
|
};
|
132
131
|
|
133
|
-
window.square = function (x) {
|
132
|
+
window.square = function ( x ) {
|
134
133
|
return x * x;
|
135
134
|
};
|
136
135
|
|
137
|
-
console.log(square(cube(5)));
|
136
|
+
console.log( square(cube( 5 )) );
|
138
137
|
|
139
|
-
}()
|
138
|
+
})();
|
140
139
|
FILE
|
141
140
|
end
|
142
141
|
|
@@ -168,27 +167,58 @@ class RollupTest < ActiveSupport::TestCase
|
|
168
167
|
(function () {
|
169
168
|
'use strict';
|
170
169
|
|
171
|
-
function cube(x) {
|
170
|
+
function cube ( x ) {
|
172
171
|
return x * x * x;
|
173
172
|
}
|
174
173
|
|
175
|
-
function square(x) {
|
174
|
+
function square ( x ) {
|
176
175
|
return x * x;
|
177
176
|
}
|
178
177
|
|
179
178
|
var maths = [cube, square];
|
180
179
|
|
181
180
|
var x = 1;
|
182
|
-
|
183
181
|
for (var i = 0; i < maths.length; i++) {
|
184
182
|
x = maths[i](x);
|
185
183
|
}
|
186
|
-
|
187
184
|
console.log(x);
|
188
185
|
|
189
|
-
}()
|
186
|
+
})();
|
190
187
|
FILE
|
191
188
|
$d = false
|
192
189
|
end
|
193
190
|
|
191
|
+
test 'import the same file via relative require and full path' do
|
192
|
+
file "#{@npm_path}/module/base.js", <<~JS
|
193
|
+
export default class Base { };
|
194
|
+
JS
|
195
|
+
|
196
|
+
file "#{@npm_path}/module/base/other.js", <<~JS
|
197
|
+
import Base from '../base';
|
198
|
+
|
199
|
+
export default class Lower extends Base { };
|
200
|
+
JS
|
201
|
+
|
202
|
+
file 'main.js', <<~JS
|
203
|
+
import Other from 'module/base/other';
|
204
|
+
import Base from 'module/base';
|
205
|
+
|
206
|
+
console.log( Base, Other );
|
207
|
+
JS
|
208
|
+
|
209
|
+
|
210
|
+
assert_exported_file 'main.js', 'application/javascript', <<~FILE
|
211
|
+
(function () {
|
212
|
+
'use strict';
|
213
|
+
|
214
|
+
class Base { }
|
215
|
+
|
216
|
+
class Lower extends Base { }
|
217
|
+
|
218
|
+
console.log( Base, Lower );
|
219
|
+
|
220
|
+
})();
|
221
|
+
FILE
|
222
|
+
end
|
223
|
+
|
194
224
|
end
|
data/test/resolve_test.rb
CHANGED
@@ -83,7 +83,6 @@ class ResolveTest < ActiveSupport::TestCase
|
|
83
83
|
@env.append_path File.join(@path, 'b')
|
84
84
|
@env.append_path File.join(@path, 'a')
|
85
85
|
|
86
|
-
|
87
86
|
assert_exported_file('main.js', 'application/javascript', <<~JS)
|
88
87
|
(function () {
|
89
88
|
'use strict';
|
@@ -94,7 +93,7 @@ class ResolveTest < ActiveSupport::TestCase
|
|
94
93
|
|
95
94
|
console.log( cube( 5 ) ); // 125
|
96
95
|
|
97
|
-
}()
|
96
|
+
})();
|
98
97
|
JS
|
99
98
|
end
|
100
99
|
|
@@ -111,15 +110,15 @@ class ResolveTest < ActiveSupport::TestCase
|
|
111
110
|
end
|
112
111
|
|
113
112
|
test 'resolve a file.*' do
|
114
|
-
file '
|
115
|
-
file '
|
116
|
-
file 'test/
|
113
|
+
file 'foo.js', 'console.log(1);'
|
114
|
+
file 'foo.scss', 'body { background: red; }'
|
115
|
+
file 'test/foo.scss', 'body { background: green; }'
|
117
116
|
|
118
|
-
assert_equal %w(
|
119
|
-
assert_equal %w(
|
117
|
+
assert_equal %w(foo.js foo.scss), @env.resolve('foo.*').map(&:filename)
|
118
|
+
assert_equal %w(foo.css foo.js), @env.resolve('foo.*', accept: ['text/css', 'application/javascript']).map(&:filename)
|
120
119
|
|
121
|
-
assert_equal %w(
|
122
|
-
assert_equal %w(
|
120
|
+
assert_equal %w(foo.js foo.scss test/foo.scss), @env.resolve('**/foo.*').map(&:filename)
|
121
|
+
assert_equal %w(foo.css foo.js test/foo.css), @env.resolve('**/foo.*', accept: ['text/css', 'application/javascript']).map(&:filename)
|
123
122
|
end
|
124
123
|
|
125
124
|
end
|
data/test/server_test.rb
CHANGED
@@ -224,7 +224,12 @@ class ServerTest < ActiveSupport::TestCase
|
|
224
224
|
assert_equal "pass", last_response.headers['X-Cascade']
|
225
225
|
end
|
226
226
|
|
227
|
-
test "re-throw JS exceptions in the browser" do
|
227
|
+
test "re-throw JS exceptions in the browser when using babel" do
|
228
|
+
@env.unregister_preprocessor('application/javascript', Condenser::JSAnalyzer)
|
229
|
+
@env.register_preprocessor 'application/javascript', Condenser::BabelProcessor.new(@path,
|
230
|
+
presets: [ ['@babel/preset-env', { modules: false, targets: { browsers: 'firefox > 41' } }] ]
|
231
|
+
)
|
232
|
+
|
228
233
|
file 'error.js', "var error = {;"
|
229
234
|
|
230
235
|
get "/assets/error.js"
|
data/test/templates/ejs_test.rb
CHANGED
@@ -4,7 +4,6 @@ class CondenserEJSTest < ActiveSupport::TestCase
|
|
4
4
|
|
5
5
|
def setup
|
6
6
|
super
|
7
|
-
@env.unregister_preprocessor('application/javascript', Condenser::BabelProcessor)
|
8
7
|
@env.unregister_exporter('application/javascript', Condenser::RollupProcessor)
|
9
8
|
end
|
10
9
|
|
@@ -15,14 +14,10 @@ class CondenserEJSTest < ActiveSupport::TestCase
|
|
15
14
|
import { escape } from 'ejs';
|
16
15
|
export default function (locals) {
|
17
16
|
var __output = [],
|
18
|
-
|
19
|
-
|
17
|
+
__append = __output.push.bind(__output);
|
20
18
|
__append("1");
|
21
|
-
|
22
19
|
__append(escape(1 + 1));
|
23
|
-
|
24
20
|
__append("3\\n");
|
25
|
-
|
26
21
|
return __output.join("");
|
27
22
|
}
|
28
23
|
JS
|
@@ -35,14 +30,10 @@ class CondenserEJSTest < ActiveSupport::TestCase
|
|
35
30
|
import { escape } from 'ejs';
|
36
31
|
export default function (locals) {
|
37
32
|
var __output = [],
|
38
|
-
|
39
|
-
|
33
|
+
__append = __output.push.bind(__output);
|
40
34
|
__append("1");
|
41
|
-
|
42
35
|
__append(escape(locals.input));
|
43
|
-
|
44
36
|
__append("3\\n");
|
45
|
-
|
46
37
|
return __output.join("");
|
47
38
|
}
|
48
39
|
JS
|
data/test/templates/erb_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -39,6 +39,7 @@ class ActiveSupport::TestCase
|
|
39
39
|
@env.unregister_writer(Condenser::BrotliWriter)
|
40
40
|
@env.context_class.class_eval do
|
41
41
|
def asset_path(path, options = {})
|
42
|
+
path = environment.find!(path, options).path
|
42
43
|
"/assets/#{path}"
|
43
44
|
end
|
44
45
|
end
|
@@ -53,7 +54,7 @@ class ActiveSupport::TestCase
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def file(name, source)
|
56
|
-
dir = File.join(@path, File.dirname(name))
|
57
|
+
dir = name.include?('/') ? File.join(@path, File.dirname(name)) : @path
|
57
58
|
path = File.join(@path, name)
|
58
59
|
|
59
60
|
FileUtils.mkdir_p(dir)
|
@@ -62,6 +63,7 @@ class ActiveSupport::TestCase
|
|
62
63
|
sleep(1 - stat) if stat < 1
|
63
64
|
end
|
64
65
|
File.write(path, source)
|
66
|
+
sleep 0.25 if @env.build_cache.listening
|
65
67
|
end
|
66
68
|
|
67
69
|
def rm(name)
|
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CondenserDartSCSSTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
@env.clear_pipeline
|
8
|
+
@env.register_transformer 'text/scss', 'text/css', Condenser::DartScssTransformer
|
9
|
+
end
|
10
|
+
|
11
|
+
test 'find' do
|
12
|
+
file 'test.scss', <<~SCSS
|
13
|
+
body {
|
14
|
+
background-color: green;
|
15
|
+
|
16
|
+
&:hover {
|
17
|
+
background-color: blue;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
SCSS
|
21
|
+
|
22
|
+
assert_file 'test.css', 'text/css', <<~CSS
|
23
|
+
body {
|
24
|
+
background-color: green;
|
25
|
+
}
|
26
|
+
body:hover {
|
27
|
+
background-color: blue;
|
28
|
+
}
|
29
|
+
CSS
|
30
|
+
end
|
31
|
+
|
32
|
+
test 'scss import globing' do
|
33
|
+
file "c/dir/a.scss", "body { color: blue; }"
|
34
|
+
file "c/dir/b.scss", "body { color: green; }"
|
35
|
+
|
36
|
+
file 'c/test.scss', '@import "./dir/*"'
|
37
|
+
|
38
|
+
assert_file 'c/test.css', 'text/css', <<~CSS
|
39
|
+
body {
|
40
|
+
color: blue;
|
41
|
+
}
|
42
|
+
|
43
|
+
body {
|
44
|
+
color: green;
|
45
|
+
}
|
46
|
+
CSS
|
47
|
+
|
48
|
+
file 'c/test2.scss', '@import "c/dir/*"'
|
49
|
+
|
50
|
+
assert_file 'c/test2.css', 'text/css', <<~CSS
|
51
|
+
body {
|
52
|
+
color: blue;
|
53
|
+
}
|
54
|
+
|
55
|
+
body {
|
56
|
+
color: green;
|
57
|
+
}
|
58
|
+
CSS
|
59
|
+
end
|
60
|
+
|
61
|
+
test "url functions" do
|
62
|
+
file 'a.scss', <<~SCSS
|
63
|
+
body {
|
64
|
+
color: green; }
|
65
|
+
SCSS
|
66
|
+
|
67
|
+
file 'test.scss', <<~SCSS
|
68
|
+
@import 'a';
|
69
|
+
|
70
|
+
div {
|
71
|
+
url: asset-url("foo.svg");
|
72
|
+
url: image-url("foo.png");
|
73
|
+
url: video-url("foo.mov");
|
74
|
+
url: audio-url("foo.mp3");
|
75
|
+
url: font-url("foo.woff2");
|
76
|
+
url: font-url("foo.woff");
|
77
|
+
url: javascript-url("foo.js");
|
78
|
+
url: stylesheet-url("foo.css");
|
79
|
+
}
|
80
|
+
SCSS
|
81
|
+
|
82
|
+
file 'foo.svg', ''
|
83
|
+
file 'foo.png', ''
|
84
|
+
file 'foo.mov', ''
|
85
|
+
file 'foo.mp3', ''
|
86
|
+
file 'foo.woff2', ''
|
87
|
+
file 'foo.woff', ''
|
88
|
+
file 'foo.js', ''
|
89
|
+
file 'foo.css', ''
|
90
|
+
|
91
|
+
assert_file 'test.css', 'text/css', <<~CSS
|
92
|
+
body {
|
93
|
+
color: green;
|
94
|
+
}
|
95
|
+
|
96
|
+
div {
|
97
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.svg);
|
98
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.png);
|
99
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.mov);
|
100
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.mp3);
|
101
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.woff2);
|
102
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.woff);
|
103
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.js);
|
104
|
+
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css);
|
105
|
+
}
|
106
|
+
CSS
|
107
|
+
|
108
|
+
asset = @env.find('test.css')
|
109
|
+
assert_equal ["a.scss", "foo.svg", "foo.png", "foo.mov", "foo.mp3", "foo.woff2", "foo.woff", "foo.js", "foo.css"], asset.process_dependencies.map(&:filename)
|
110
|
+
assert_equal ["a.scss", "foo.svg", "foo.png", "foo.mov", "foo.mp3", "foo.woff2", "foo.woff", "foo.js", "foo.css"], asset.export_dependencies.map(&:filename)
|
111
|
+
end
|
112
|
+
|
113
|
+
test "sass dependencies" do
|
114
|
+
file 'd.scss', <<~SCSS
|
115
|
+
$secondary-color: #444;
|
116
|
+
SCSS
|
117
|
+
|
118
|
+
file 'a.scss', <<~SCSS
|
119
|
+
@import 'd';
|
120
|
+
$primary-color: #333;
|
121
|
+
SCSS
|
122
|
+
|
123
|
+
file 'b.scss', <<~SCSS
|
124
|
+
body {
|
125
|
+
color: $primary-color;
|
126
|
+
}
|
127
|
+
SCSS
|
128
|
+
|
129
|
+
file 'c.scss', <<~SCSS
|
130
|
+
@import 'a';
|
131
|
+
@import 'b';
|
132
|
+
SCSS
|
133
|
+
|
134
|
+
asset = @env.find('c.css')
|
135
|
+
assert_equal ["a.scss", "d.scss", "b.scss"], asset.process_dependencies.map(&:filename)
|
136
|
+
assert_equal ["a.scss", "d.scss", "b.scss"], asset.export_dependencies.map(&:filename)
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
@@ -2,23 +2,23 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class JSTTransformerTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
-
test 'jst
|
5
|
+
test 'jst transformation' do
|
6
6
|
file 'test.jst', <<~SCSS
|
7
7
|
import {escape} from 'ejs';
|
8
8
|
export default function (locals) {
|
9
9
|
var __output = [], __append = __output.push.bind(__output);
|
10
10
|
__append("<div class=\\"uniformLoader\\n");
|
11
|
-
if(typeof transparent != "undefined") {
|
11
|
+
if(typeof transparent != "undefined") {
|
12
12
|
__append(" -transparent");
|
13
|
-
}
|
13
|
+
}
|
14
14
|
__append("\\n");
|
15
|
-
if(typeof cover != "undefined") {
|
15
|
+
if(typeof cover != "undefined") {
|
16
16
|
__append(" -cover");
|
17
|
-
}
|
17
|
+
}
|
18
18
|
__append("\\n");
|
19
|
-
if(typeof light != "undefined") {
|
19
|
+
if(typeof light != "undefined") {
|
20
20
|
__append(" -light");
|
21
|
-
}
|
21
|
+
}
|
22
22
|
__append(" ");
|
23
23
|
__append( klass );
|
24
24
|
__append("\\">\\n <div class=\\"uniformLoader-container\\">\\n <span></span>\\n <span></span>\\n <span></span>\\n </div>\\n</div>");
|
@@ -27,41 +27,185 @@ class JSTTransformerTest < ActiveSupport::TestCase
|
|
27
27
|
SCSS
|
28
28
|
|
29
29
|
assert_file 'test.js', 'application/javascript', <<~JS
|
30
|
-
import _bindInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/bind";
|
31
30
|
import { escape } from 'ejs';
|
32
31
|
export default function (locals) {
|
33
|
-
var _context;
|
34
|
-
|
35
32
|
var __output = [],
|
36
|
-
|
37
|
-
|
33
|
+
__append = __output.push.bind(__output);
|
38
34
|
__append("<div class=\\"uniformLoader\\n");
|
39
|
-
|
40
35
|
if (typeof locals.transparent != "undefined") {
|
41
36
|
__append(" -transparent");
|
42
37
|
}
|
43
|
-
|
44
38
|
__append("\\n");
|
45
|
-
|
46
39
|
if (typeof locals.cover != "undefined") {
|
47
40
|
__append(" -cover");
|
48
41
|
}
|
49
|
-
|
50
42
|
__append("\\n");
|
51
|
-
|
52
43
|
if (typeof locals.light != "undefined") {
|
53
44
|
__append(" -light");
|
54
45
|
}
|
55
|
-
|
56
46
|
__append(" ");
|
57
|
-
|
58
47
|
__append(locals.klass);
|
59
|
-
|
60
48
|
__append("\\">\\n <div class=\\"uniformLoader-container\\">\\n <span></span>\\n <span></span>\\n <span></span>\\n </div>\\n</div>");
|
61
|
-
|
62
49
|
return __output.join("");
|
63
50
|
}
|
64
51
|
JS
|
65
52
|
end
|
66
53
|
|
54
|
+
test 'jst transformation with object' do
|
55
|
+
file 'test.jst', <<~SCSS
|
56
|
+
import {append as __ejx_append} from 'ejx';
|
57
|
+
export default function (locals) {
|
58
|
+
var __output = [];
|
59
|
+
__ejx_append(avatarTemplate({ account: account }), __output);
|
60
|
+
return __output;
|
61
|
+
}
|
62
|
+
SCSS
|
63
|
+
|
64
|
+
assert_file 'test.js', 'application/javascript', <<~JS
|
65
|
+
import { append as __ejx_append } from 'ejx';
|
66
|
+
export default function (locals) {
|
67
|
+
var __output = [];
|
68
|
+
__ejx_append(locals.avatarTemplate({
|
69
|
+
account: locals.account
|
70
|
+
}), __output);
|
71
|
+
return __output;
|
72
|
+
}
|
73
|
+
JS
|
74
|
+
end
|
75
|
+
|
76
|
+
test 'jst with transformation scope test of a defined function' do
|
77
|
+
file 'test.jst', <<~SCSS
|
78
|
+
import {append as __ejx_append} from 'ejx';
|
79
|
+
export default function (locals) {
|
80
|
+
var __output = [];
|
81
|
+
|
82
|
+
function x(files) {
|
83
|
+
return files.test();
|
84
|
+
}
|
85
|
+
|
86
|
+
class B {
|
87
|
+
}
|
88
|
+
|
89
|
+
models.map(m => m.name)
|
90
|
+
|
91
|
+
__ejx_append(avatarTemplate({ account: x(files), klass: B }), __output);
|
92
|
+
return __output;
|
93
|
+
}
|
94
|
+
SCSS
|
95
|
+
|
96
|
+
assert_file 'test.js', 'application/javascript', <<~JS
|
97
|
+
import { append as __ejx_append } from 'ejx';
|
98
|
+
export default function (locals) {
|
99
|
+
var __output = [];
|
100
|
+
function x(files) {
|
101
|
+
return files.test();
|
102
|
+
}
|
103
|
+
class B {}
|
104
|
+
locals.models.map(m => m.name);
|
105
|
+
__ejx_append(locals.avatarTemplate({
|
106
|
+
account: x(locals.files),
|
107
|
+
klass: B
|
108
|
+
}), __output);
|
109
|
+
return __output;
|
110
|
+
}
|
111
|
+
JS
|
112
|
+
end
|
113
|
+
|
114
|
+
test 'jst with transformation shadow variable example' do
|
115
|
+
file 'test.jst', <<~JS
|
116
|
+
import {append as __ejx_append} from 'ejx';
|
117
|
+
export default async function (locals) {
|
118
|
+
function f (items, template) {
|
119
|
+
return items.map((file) => {
|
120
|
+
const row = template(file);
|
121
|
+
const bar = row.querySelector('.progress-bar');
|
122
|
+
file.onprogress = (n) => { row.style.width = "" + n + "%"; }
|
123
|
+
|
124
|
+
return row;
|
125
|
+
});
|
126
|
+
}
|
127
|
+
__ejx_append(f(items, (f) => { return __v; }));
|
128
|
+
return __output;
|
129
|
+
}
|
130
|
+
JS
|
131
|
+
|
132
|
+
assert_file 'test.js', 'application/javascript', <<~JS
|
133
|
+
import { append as __ejx_append } from 'ejx';
|
134
|
+
export default async function (locals) {
|
135
|
+
function f(items, template) {
|
136
|
+
return items.map(file => {
|
137
|
+
const row = template(file);
|
138
|
+
const bar = row.querySelector('.progress-bar');
|
139
|
+
file.onprogress = n => {
|
140
|
+
row.style.width = "" + n + "%";
|
141
|
+
};
|
142
|
+
return row;
|
143
|
+
});
|
144
|
+
}
|
145
|
+
__ejx_append(f(locals.items, f => {
|
146
|
+
return locals.__v;
|
147
|
+
}));
|
148
|
+
return locals.__output;
|
149
|
+
}
|
150
|
+
JS
|
151
|
+
end
|
152
|
+
|
153
|
+
test 'try/catch example' do
|
154
|
+
file 'test.jst', <<~JS
|
155
|
+
import {append as __ejx_append} from 'ejx';
|
156
|
+
export default function (locals) {
|
157
|
+
var __output = [];
|
158
|
+
try {
|
159
|
+
__ejx_append(avatarTemplate({ account: account }), __output);
|
160
|
+
} catch (e) {
|
161
|
+
console.error(e);
|
162
|
+
}
|
163
|
+
|
164
|
+
console.error(e);
|
165
|
+
|
166
|
+
return __output;
|
167
|
+
}
|
168
|
+
JS
|
169
|
+
|
170
|
+
assert_file 'test.js', 'application/javascript', <<~JS
|
171
|
+
import { append as __ejx_append } from 'ejx';
|
172
|
+
export default function (locals) {
|
173
|
+
var __output = [];
|
174
|
+
try {
|
175
|
+
__ejx_append(locals.avatarTemplate({
|
176
|
+
account: locals.account
|
177
|
+
}), __output);
|
178
|
+
} catch (e) {
|
179
|
+
console.error(e);
|
180
|
+
}
|
181
|
+
console.error(locals.e);
|
182
|
+
return __output;
|
183
|
+
}
|
184
|
+
JS
|
185
|
+
end
|
186
|
+
|
187
|
+
test 'splats' do
|
188
|
+
file 'test.jst', <<~JS
|
189
|
+
import {append as __ejx_append} from 'ejx';
|
190
|
+
export default function (locals) {
|
191
|
+
var __output = [];
|
192
|
+
|
193
|
+
var x = ((...args) => { return y(...args); })(z, y);
|
194
|
+
|
195
|
+
return __output;
|
196
|
+
}
|
197
|
+
JS
|
198
|
+
|
199
|
+
assert_file 'test.js', 'application/javascript', <<~JS
|
200
|
+
import { append as __ejx_append } from 'ejx';
|
201
|
+
export default function (locals) {
|
202
|
+
var __output = [];
|
203
|
+
var x = ((...args) => {
|
204
|
+
return locals.y(...args);
|
205
|
+
})(locals.z, locals.y);
|
206
|
+
return __output;
|
207
|
+
}
|
208
|
+
JS
|
209
|
+
end
|
210
|
+
|
67
211
|
end
|
@@ -47,7 +47,14 @@ class CondenserSCSSTest < ActiveSupport::TestCase
|
|
47
47
|
end
|
48
48
|
|
49
49
|
test "url functions" do
|
50
|
+
file 'a.scss', <<~SCSS
|
51
|
+
body {
|
52
|
+
color: green; }
|
53
|
+
SCSS
|
54
|
+
|
50
55
|
file 'test.scss', <<~SCSS
|
56
|
+
@import 'a';
|
57
|
+
|
51
58
|
div {
|
52
59
|
url: asset-url("foo.svg");
|
53
60
|
url: image-url("foo.png");
|
@@ -70,6 +77,9 @@ class CondenserSCSSTest < ActiveSupport::TestCase
|
|
70
77
|
file 'foo.css', ''
|
71
78
|
|
72
79
|
assert_file 'test.css', 'text/css', <<~CSS
|
80
|
+
body {
|
81
|
+
color: green; }
|
82
|
+
|
73
83
|
div {
|
74
84
|
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.svg);
|
75
85
|
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.png);
|
@@ -80,6 +90,10 @@ class CondenserSCSSTest < ActiveSupport::TestCase
|
|
80
90
|
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.js);
|
81
91
|
url: url(/assets/foo-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css); }
|
82
92
|
CSS
|
93
|
+
|
94
|
+
asset = @env.find('test.css')
|
95
|
+
assert_equal ["a.scss", "foo.svg", "foo.png", "foo.mov", "foo.mp3", "foo.woff2", "foo.woff", "foo.js", "foo.css"], asset.process_dependencies.map(&:filename)
|
96
|
+
assert_equal ["a.scss", "foo.svg", "foo.png", "foo.mov", "foo.mp3", "foo.woff2", "foo.woff", "foo.js", "foo.css"], asset.export_dependencies.map(&:filename)
|
83
97
|
end
|
84
98
|
|
85
99
|
test "sass dependencies" do
|