Skip to content

lydell/source-map-concat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Overview Build Status

Concatenate files with source maps.

var fs     = require("fs")
var path   = require("path")
var concat = require("source-map-concat")

var resolveSourceMapSync = require("source-map-resolve").resolveSourceMapSync
var createDummySourceMap = require("source-map-dummy")

var jsFiles = ["foo.js", "subdir/bar.js", "../baz.js"]

jsFiles = jsFiles.map(function(file) {
  return {
    source:  file,
    code: fs.readFileSync(file).toString()
  }
})
jsFiles.forEach(function(file) {
  var previousMap = resolveSourceMapSync(file.code, file.source, fs.readFileSync)
  if (previousMap) {
    file.map = previousMap.map
    file.sourcesRelativeTo = previousMap.sourcesRelativeTo
  } else {
    file.map = createDummySourceMap(file.code, {source: file.source, type: "js"})
  }
})

function wrap(node, file) {
  node.prepend("void function(){\n// File: " + file.source + "\n")
  node.add("}();")
}

var output = "subdir/bundle.js"

var concatenated = concat(jsFiles, {
  delimiter: "\n",
  process: wrap,
  mapPath: output + ".map"
})

concatenated.prepend("/* Bruce Banner */\n")
concatenated.add("\n/* Footer */")

var result = concatenated.toStringWithSourceMap({
  file: path.basename(output)
})

fs.writeFileSync(output, result.code)
fs.writeFileSync(output + ".map", result.map.toString())

Installation

npm install source-map-concat

var concat = require("source-map-concat")

Usage

concat(files, options)

files is an array of objects with the following properties:

  • code: The contents of the file, as a string.
  • map: The source map of the file, if any, as an object, a string or anything with a .toJSON() method (such as a SourceMapGenerator). It could be taken straight from a compiler, be resolved using source-map-resolve or created using source-map-dummy.
  • sourcesRelativeTo: A path that file.map.sources are relative to. Defaults to ..

options:

  • delimiter: A string to insert between each file.
  • process(node, file, index): A function to call on each file in files. node is a SourceNode. You could use this to wrap JavaScript files in IIFEs, for example.
  • mapPath: The path to where you intend to write the source map of the produced concatenated file. Defaults to ..

The files in files will be concatenated into a SourceNode which is returned. You may then modify this source node if you wish (node.add(...) for example). When you’re done, call node.toStringWithSourceMap(), which returns an object with a code property containing the concatenated code, and a map property containing the source map.

License

The X11 (“MIT”) License.

About

[DEPRECATED] Concatenate files with source maps.

Resources

License

Stars

Watchers

Forks

Packages

No packages published