Class: Sprockets::AddSourceMapCommentToAssetProcessor
- Inherits:
-
Object
- Object
- Sprockets::AddSourceMapCommentToAssetProcessor
- Defined in:
- lib/sprockets/add_source_map_comment_to_asset_processor.rb
Overview
This is a processor designed to add a source map “comment” to the bottom of a css or JS file that is serving a source map. An example of a comment might look like this
//# application.js-80af0efcc960fc2ac93eda2f7b12e3db40ab360bf6ea269ceed3bea3678326f9.map
As an asset is built it gets source map information added to the ‘asset.to_hash[:map]` key. This contains all the information that is needed to build a source map file.
To add this comment we must have an asset we can link to. To do this we ensure that the original asset is loaded, then we use a use a special mime type. For example ‘application/js-sourcemap+json` for a JS source map.
This will trigger a new asset to be loaded and generated by the ‘SourceMapProcessor` processor.
Finally once we have that file, we can generate a link to it with it’s full fingerprint. This is done and then added to the original asset as a comment at the bottom.
Class Method Summary collapse
Class Method Details
.call(input) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/sprockets/add_source_map_comment_to_asset_processor.rb', line 29 def self.call(input) case input[:content_type] when "application/javascript" comment = "\n//# sourceMappingURL=%s" map_type = "application/js-sourcemap+json" when "text/css" comment = "\n/*# sourceMappingURL=%s */" map_type = "application/css-sourcemap+json" else fail input[:content_type] end env = input[:environment] uri, _ = env.resolve!(input[:filename], accept: input[:content_type]) asset = env.load(uri) uri, _ = env.resolve!(input[:filename], accept: map_type) map = env.load(uri) uri, params = URIUtils.parse_asset_uri(input[:uri]) uri = env.(params[:index_alias]) if params[:index_alias] path = PathUtils.relative_path_from(PathUtils.split_subpath(input[:load_path], uri), map.digest_path) asset..merge( data: asset.source + (comment % path) + "\n", links: asset.links + [asset.uri, map.uri] ) end |