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);
							 | 
						|
								    }
							 | 
						|
								  });
							 | 
						|
								}
							 | 
						|
								
							 |