@@ -32,8 +32,9 @@ def build(path, options = {})
32
32
end
33
33
34
34
def build_str source , filename , options = { }
35
- asset = processor_for ( source , filename , options )
36
- requires = preload + asset . requires
35
+ path = path_reader . expand ( filename ) . to_s unless stub? ( filename )
36
+ asset = processor_for ( source , filename , path , options )
37
+ requires = preload + asset . requires + tree_requires ( asset , path )
37
38
requires . map { |r | process_require ( r , options ) }
38
39
processed << asset
39
40
self
@@ -48,7 +49,7 @@ def to_s
48
49
end
49
50
50
51
def source_map
51
- processed . map ( &:source_map ) . reduce ( :+ ) . to_s
52
+ processed . map ( &:source_map ) . reduce ( :+ ) . as_json . to_json
52
53
end
53
54
54
55
attr_reader :processed
@@ -61,11 +62,18 @@ def source_map
61
62
62
63
private
63
64
64
- def processor_for ( source , filename , options )
65
- unless stub? ( filename )
66
- full_filename = path_reader . expand ( filename ) . to_s
67
- processor = processors . find { |p | p . match? full_filename }
65
+ def tree_requires ( asset , path )
66
+ asset . required_trees . flat_map do |tree |
67
+ base = File . expand_path ( File . dirname ( path ) )
68
+ expanded = File . expand_path File . join ( base , tree , '*.rb' )
69
+ Dir [ expanded ] . map do |file |
70
+ file . gsub ( /(\. js)?(\. (?:rb|opal))/ , '' ) [ ( base . size +1 ) ..-1 ]
71
+ end
68
72
end
73
+ end
74
+
75
+ def processor_for ( source , filename , path , options )
76
+ processor = processors . find { |p | p . match? path }
69
77
processor ||= default_processor
70
78
return processor . new ( source , filename , compiler_options . merge ( options ) )
71
79
end
@@ -77,7 +85,9 @@ def process_require(filename, options)
77
85
78
86
source = stub? ( filename ) ? '' : path_reader . read ( filename )
79
87
raise ArgumentError , "can't find file: #{ filename . inspect } " if source . nil?
80
- asset = processor_for ( source , filename , options . merge ( requirable : true ) )
88
+
89
+ path = path_reader . expand ( filename ) . to_s unless stub? ( filename )
90
+ asset = processor_for ( source , filename , path , options . merge ( requirable : true ) )
81
91
process_requires ( asset , options )
82
92
processed << asset
83
93
end
0 commit comments