You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							95 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							95 lines
						
					
					
						
							2.7 KiB
						
					
					
				#! /usr/bin/env node | 
						|
/* eslint-disable no-console, no-var */ | 
						|
// Util script for debugging source code generation issues | 
						|
 | 
						|
var script = process.argv[2].replace(/\\n/g, '\n'), | 
						|
    verbose = process.argv[3] === '-v'; | 
						|
 | 
						|
var Handlebars = require('./lib'), | 
						|
    SourceMap = require('source-map'), | 
						|
      SourceMapConsumer = SourceMap.SourceMapConsumer; | 
						|
 | 
						|
var template = Handlebars.precompile(script, { | 
						|
      srcName: 'input.hbs', | 
						|
      destName: 'output.js', | 
						|
 | 
						|
      assumeObjects: true, | 
						|
      compat: false, | 
						|
      strict: true, | 
						|
      trackIds: true, | 
						|
      knownHelpersOnly: false | 
						|
    }); | 
						|
 | 
						|
if (!verbose) { | 
						|
  console.log(template); | 
						|
} else { | 
						|
  var consumer = new SourceMapConsumer(template.map), | 
						|
      lines = template.code.split('\n'), | 
						|
      srcLines = script.split('\n'); | 
						|
 | 
						|
  console.log(); | 
						|
  console.log('Source:'); | 
						|
  srcLines.forEach(function(source, index) { | 
						|
    console.log(index + 1, source); | 
						|
  }); | 
						|
  console.log(); | 
						|
  console.log('Generated:'); | 
						|
  console.log(template.code); | 
						|
  lines.forEach(function(source, index) { | 
						|
    console.log(index + 1, source); | 
						|
  }); | 
						|
  console.log(); | 
						|
  console.log('Map:'); | 
						|
  console.log(template.map); | 
						|
  console.log(); | 
						|
 | 
						|
  function collectSource(lines, lineName, colName, order) { | 
						|
    var ret = {}, | 
						|
        ordered = [], | 
						|
        last; | 
						|
 | 
						|
    function collect(current) { | 
						|
      if (last) { | 
						|
        var mapLines = lines.slice(last[lineName] - 1, current && current[lineName]); | 
						|
        if (mapLines.length) { | 
						|
          if (current) { | 
						|
            mapLines[mapLines.length - 1] = mapLines[mapLines.length - 1].slice(0, current[colName]); | 
						|
          } | 
						|
          mapLines[0] = mapLines[0].slice(last[colName]); | 
						|
        } | 
						|
        ret[last[lineName] + ':' + last[colName]] = mapLines.join('\n'); | 
						|
        ordered.push({ | 
						|
          startLine: last[lineName], | 
						|
          startCol: last[colName], | 
						|
          endLine: current && current[lineName] | 
						|
        }); | 
						|
      } | 
						|
      last = current; | 
						|
    } | 
						|
 | 
						|
    consumer.eachMapping(collect, undefined, order); | 
						|
    collect(); | 
						|
 | 
						|
    return ret; | 
						|
  } | 
						|
 | 
						|
  srcLines = collectSource(srcLines, 'originalLine', 'originalColumn', SourceMapConsumer.ORIGINAL_ORDER); | 
						|
  lines = collectSource(lines, 'generatedLine', 'generatedColumn'); | 
						|
 | 
						|
  consumer.eachMapping(function(mapping) { | 
						|
    var originalSrc = srcLines[mapping.originalLine + ':' + mapping.originalColumn], | 
						|
        generatedSrc = lines[mapping.generatedLine + ':' + mapping.generatedColumn]; | 
						|
 | 
						|
    if (!mapping.originalLine) { | 
						|
      console.log('generated', mapping.generatedLine + ':' + mapping.generatedColumn, generatedSrc); | 
						|
    } else { | 
						|
      console.log('map', | 
						|
          mapping.source, | 
						|
          mapping.originalLine + ':' + mapping.originalColumn, | 
						|
          originalSrc, | 
						|
          '->', | 
						|
          mapping.generatedLine + ':' + mapping.generatedColumn, | 
						|
          generatedSrc); | 
						|
    } | 
						|
  }); | 
						|
}
 | 
						|
 |