@makeomatic/combine-source-map

    0.9.0 • Public • Published

    combine-source-map build status

    Add source maps of multiple files, offset them and then combine them into one source map.

    const convert = require('convert-source-map');
    const combine = require('combine-source-map');
    
    const fooComment = '//# sourceMappingURL=data:application/json;base64,eyJ2Z [..] pzJylcbiJdfQ==';
    const barComment = '//# sourceMappingURL=data:application/json;base64,eyJ2Z [..] VjaycpXG4iXX0=';
    
    const fooFile = {
        source: '(function() {\n\n  console.log(require(\'./bar.js\'));\n\n}).call(this);\n' + '\n' + fooComment
      , sourceFile: 'foo.js'
    };
    const barFile = {
        source: '(function() {\n\n  console.log(alert(\'alerts suck\'));\n\n}).call(this);\n' + '\n' + barComment
      , sourceFile: 'bar.js'
    };
    
    const offset = { line: 2 };
    const map = combine.create('bundle.js');
    await map.addFile(fooFile, offset)
    await map.addFile(barFile, { line: offset.line + 8 })
    const base64 = map.base64();
    
    const 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 combine-source-map
    

    API

    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)

    /**
     * Adds map to underlying source map.
     * 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
     *
     * @name addMap
     * @function
     * @param opts {Object} { sourceFile: {String}, source: {String} }
     * @param offset {Object} { line: {Number}, column: {Number} }
     */
    

    Combiner.prototype.base64()

    /**
    * @name base64
    * @function
    * @return {String} base64 encoded combined source map
    */
    

    Combiner.prototype.comment()

    /**
     * @name comment
     * @function
     * @return {String} 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.

    Install

    npm i @makeomatic/combine-source-map

    DownloadsWeekly Downloads

    4

    Version

    0.9.0

    License

    MIT

    Unpacked Size

    13.1 kB

    Total Files

    9

    Last publish

    Collaborators

    • avvs
    • freele