@@ -103,21 +103,14 @@ def evaluate(context, locals, &block)
103
103
result = builder . build_str ( data , path , :prerequired => prerequired )
104
104
105
105
if self . class . source_map_enabled
106
- $OPAL_SOURCE_MAPS[ context . pathname ] = result . source_map . to_s
107
- "#{ result . to_s } \n //# sourceMappingURL=#{ context . logical_path } .map\n "
106
+ logical_path = context . logical_path . to_s
107
+ $OPAL_SOURCE_MAPS[ logical_path ] = result . source_map . as_json . to_json
108
+ "#{ result . to_s } \n //# sourceMappingURL=./#{ context . logical_path } .map\n "
108
109
else
109
110
result . to_s
110
111
end
111
112
end
112
113
113
- def source_file_url ( context )
114
- "#{ prefix } /#{ context . logical_path . to_s } "
115
- end
116
-
117
- def prefix
118
- "/__opal_source_maps__"
119
- end
120
-
121
114
def stubbed_file? ( name )
122
115
stubbed_files . include? name
123
116
end
@@ -134,10 +127,42 @@ def find_opal_require(environment, r)
134
127
path ? File . join ( path , "#{ r } .rb" ) : r
135
128
end
136
129
end
130
+
131
+ module MapsMiddleware
132
+ def call ( env )
133
+ if env [ 'PATH_INFO' ] . end_with? ( '.map' )
134
+ path = unescape ( env [ 'PATH_INFO' ] . to_s . sub ( /^\/ / , '' ) )
135
+ path = path . sub ( /\. (map|js)/ , '' )
136
+
137
+ if fingerprint = path_fingerprint ( path )
138
+ path = path . sub ( "-#{ fingerprint } " , '' )
139
+ end
140
+
141
+ asset = find_asset ( path )
142
+ logical_path = asset . logical_path . to_s . gsub ( /\. (map|js)$/ , '' )
143
+ body = $OPAL_SOURCE_MAPS[ logical_path ] || %Q{
144
+ {
145
+ "keys": #{ $OPAL_SOURCE_MAPS. keys . inspect } ,
146
+ "path": #{ logical_path }
147
+ }
148
+ }
149
+ [ 200 , { "Content-Type" => "application/json" , "Content-Length" => Rack ::Utils . bytesize ( body ) . to_s } , [ body ] ]
150
+ else
151
+ super
152
+ end
153
+ end
154
+ end
155
+
137
156
end
138
157
139
158
Tilt . register 'rb' , Opal ::Processor
140
159
Sprockets . register_engine '.rb' , Opal ::Processor
141
160
142
161
Tilt . register 'opal' , Opal ::Processor
143
162
Sprockets . register_engine '.opal' , Opal ::Processor
163
+
164
+
165
+ require 'sprockets/server'
166
+ Sprockets ::Server . class_eval do
167
+ prepend Opal ::MapsMiddleware
168
+ end
0 commit comments