class Opal::SourceMap

def as_json

def as_json
  map.as_json
end

def initialize(fragments, file)

def initialize(fragments, file)
  @fragments = fragments
  @file = file
end

def magic_comment map_path

def magic_comment map_path
  "\n//# sourceMappingURL=file://#{map_path}"
end

def map

def map
  @map ||= begin
    source_file = file+'.rb'
    generated_line, generated_column = 1, 0
    mappings = @fragments.map do |fragment|
      mapping = nil
      source_line   = fragment.line
      source_column = fragment.column
      source_code   = fragment.code
      if source_line and source_column
        source_offset    = ::SourceMap::Offset.new(source_line, source_column)
        generated_offset = ::SourceMap::Offset.new(generated_line, generated_column)
        mapping = ::SourceMap::Mapping.new(
          source_file,
          generated_offset,
          source_offset,
          fragment.source_map_name
        )
      end
      new_lines = source_code.count "\n"
      generated_line += new_lines
      if new_lines > 0
        generated_column = source_code.size - (source_code.rindex("\n") + 1)
      else
        generated_column += source_code.size
      end
      mapping
    end
    # Ensure mappings isn't empty: https://github.com/maccman/sourcemap/issues/11
    unless mappings.any?
      zero_offset = ::SourceMap::Offset.new(0,0)
      mappings = [::SourceMap::Mapping.new(source_file,zero_offset,zero_offset)]
    end
    ::SourceMap::Map.new(mappings.compact)
  end
end

def to_json

def to_json
  map.as_json
end

def to_s

def to_s
  map.to_s
end