File: print-script

package info (click to toggle)
libjs-handlebars 3%3A4.0.5-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,072 kB
  • ctags: 292
  • sloc: yacc: 136; lex: 125; ruby: 10; makefile: 2
file content (95 lines) | stat: -rwxr-xr-x 2,775 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#! /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);
    }
  });
}