mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-11-03 07:19:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
#! /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);
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 |