Skip to content

Commit

Permalink
Add support for inline source maps
Browse files Browse the repository at this point in the history
  • Loading branch information
gpakosz committed Nov 7, 2018
1 parent d90d2f5 commit 87d6b7d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
14 changes: 13 additions & 1 deletion nanoc/lib/nanoc/filters/sass.rb
Expand Up @@ -27,10 +27,22 @@ def render(filter, rep, content, params = {})
)
css_path = options.delete(:css_path)
sourcemap_path = options.delete(:sourcemap_path)
if sourcemap_path == :inline
sourcemap_path = Nanoc::Int::TempFilenameFactory.instance.create('sass_sourcemap')
inline = true
end

engine = ::Sass::Engine.new(content, options)
css, sourcemap = sourcemap_path ? engine.render_with_sourcemap(sourcemap_path) : engine.render
[css, sourcemap&.to_json(css_uri: rep.path, type: rep.path.nil? ? :inline : :auto)]

if inline
require 'base64'
sourcemap = sourcemap&.to_json(css_uri: css_path)
encoded = "data:application/json;base64,#{Base64.urlsafe_encode64(sourcemap)}"
[css.gsub(%r{^/\*#\s+sourceMappingURL=\s*#{sourcemap_path}\s*\*/$}, "/*# sourceMappingURL=#{encoded} */")]
else
[css, sourcemap&.to_json(css_path: css_path, sourcemap_path: sourcemap_path)]
end
end
end

Expand Down
5 changes: 5 additions & 0 deletions nanoc/spec/nanoc/filters/sass_spec.rb
Expand Up @@ -270,6 +270,11 @@
expect(sass_sourcemap.setup_and_run(".foo #bar\n color: #f00", css_path: 'main.css', sourcemap_path: 'main.css.map'))
.to match(/{.*?"sources": \["#{item_main_default_rep.raw_path}"\].*?"file": "main.css".*?}/m)
end

it 'generates inlined sourcemaps' do
expect(sass.setup_and_run(".foo #bar\n color: #f00", css_path: 'main.css', sourcemap_path: :inline))
.to match(/.foo\s+#bar\s*\{\s*color:\s+(red|#f00);?\s*\}\s*\/\*# sourceMappingURL=data:application\/json;base64.*? \*\//)
end
end

context 'nanoc() sass function' do
Expand Down

0 comments on commit 87d6b7d

Please sign in to comment.