@unabandoned/combine-source-map
v1.0.5
Published
Add source maps of multiple files, offset them and then combine them into one source map
Maintainers
Readme
combine-source-map
Add source maps of multiple files, offset them and then combine them into one source map.
Breaking change (source-map 8): this fork uses
source-map8, whoseSourceMapConsumeris asynchronous (WebAssembly-backed). As a resultCombiner.prototype.base64()andCombiner.prototype.comment()now return aPromise.create()andaddFile()stay synchronous and chainable, so only the final call needs to be awaited.
var convert = require('convert-source-map');
var combine = require('@unabandoned/combine-source-map');
var fooComment = '//# sourceMappingURL=data:application/json;base64,eyJ2Z [..] pzJylcbiJdfQ==';
var barComment = '//# sourceMappingURL=data:application/json;base64,eyJ2Z [..] VjaycpXG4iXX0=';
var fooFile = {
source: '(function() {\n\n console.log(require(\'./bar.js\'));\n\n}).call(this);\n' + '\n' + fooComment
, sourceFile: 'foo.js'
};
var barFile = {
source: '(function() {\n\n console.log(alert(\'alerts suck\'));\n\n}).call(this);\n' + '\n' + barComment
, sourceFile: 'bar.js'
};
var offset = { line: 2 };
var base64 = await combine
.create('bundle.js')
.addFile(fooFile, offset)
.addFile(barFile, { line: offset.line + 8 })
.base64();
var sm = convert.fromBase64(base64).toObject();
console.log(sm);{ version: 3,
file: 'bundle.js',
sources: [ 'foo.coffee', 'bar.coffee' ],
names: [],
mappings: ';;;AAAA;CAAA;CAAA,CAAA,CAAA,IAAO,GAAK;CAAZ;;;;;ACAA;CAAA;CAAA,CAAA,CAAA,IAAO,GAAK;CAAZ',
sourcesContent:
[ 'console.log(require \'./bar.js\')\n',
'console.log(alert \'alerts suck\')\n' ] }Installation
npm install @unabandoned/combine-source-mapAPI
create()
/**
* @name create
* @function
* @param file {String} optional name of the generated file
* @param sourceRoot { String} optional sourceRoot of the map to be generated
* @return {Object} Combiner instance to which source maps can be added and later combined
*/Combiner.prototype.addFile(opts, offset)
/**
* Queues a map to be combined.
* If source contains a source map comment that has the source of the original file inlined it will offset these
* mappings and include them.
* If no source map comment is found or it has no source inlined, mappings for the file will be generated and included.
*
* Files are combined lazily when base64() or comment() is called, so this stays synchronous and chainable.
*
* @name addFile
* @function
* @param opts {Object} { sourceFile: {String}, source: {String} }
* @param offset {Object} { line: {Number}, column: {Number} }
* @return {Object} this Combiner instance, for chaining
*/Combiner.prototype.base64()
/**
* @name base64
* @function
* @return {Promise<String>} promise for the base64 encoded combined source map
*/Combiner.prototype.comment()
/**
* @name comment
* @function
* @return {Promise<String>} promise for the base64 encoded sourceMappingUrl comment of the combined source map
*/removeComments(src)
/**
* @name removeComments
* @function
* @param src
* @return {String} src with all sourceMappingUrl comments removed
*/Example
Read and run the more elaborate example in order to get a better idea how things work.
