|
|
- #! /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);
- }
- });
- }
|