You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
| #! /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);
 | |
|     }
 | |
|   });
 | |
| }
 |