lib/condenser/transformers/sass_transformer/importer.rb in condenser-0.0.5 vs lib/condenser/transformers/sass_transformer/importer.rb in condenser-0.0.7

- old
+ new

@@ -1,65 +1,36 @@ -require 'sass/importers' - class Condenser::SassTransformer - class Importer < Sass::Importers::Base - - GLOB = /(\A|\/)(\*|\*\*\/\*)\z/ - - def key(name, options) - [self.class.name + ':' + File.dirname(expand_path(name)), File.basename(name)] - end - - def public_url(name, sourcemap_directory) - Sass::Util.file_uri_from_path(name) - end - - def find_relative(name, base, options) + class Importer < SassC::Importer + + def imports(name, base) name = expand_path(name, base) env = options[:condenser][:environment] accept = extensions.keys.map { |x| options[:condenser][:environment].extensions[x] } options[:asset][:dependencies] << [name, accept.map{ |i| [i] }] - if name.match(GLOB) - contents = "" - env.resolve(name, accept: accept).sort_by(&:filename).each do |asset| - next if asset.filename == options[:filename] - contents << "@import \"#{asset.filename}\";\n" - end - - return nil if contents == "" - Sass::Engine.new(contents, options.merge( - filename: name, - importer: self, - syntax: :scss - )) - else - asset = options[:condenser][:environment].find(name, accept: accept) - if asset - asset.process - Sass::Engine.new(asset.source, options.merge( - filename: asset.filename, - importer: self, - syntax: extensions[asset.ext] - )) - else - nil - end + imports = [] + env.resolve(name, accept: accept).sort_by(&:filename).each do |asset| + next if asset.filename == options[:filename] + imports << Import.new(asset.filename, source: asset.source, source_map_path: nil) end - end - def find(name, options) - if options[:condenser] - # globs must be relative - return if name =~ GLOB - super - else - super + if imports.empty? && env.npm_path + package = File.join(env.npm_path, name, 'package.json') + if File.exists?(package) + package = JSON.parse(File.read(package)) + if package['style'] + imports << Import.new(name, source: File.read(File.join(env.npm_path, name, package['style'])), source_map_path: nil) + end + end end - end - # Allow .css files to be @import'd + raise Condenser::FileNotFound, "couldn't find file '#{name}'" if imports.empty? + + imports + end + + # Allow .css files to be @imported def extensions { '.sass' => :sass, '.scss' => :scss, '.css' => :scss } end private \ No newline at end of file