Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign up| #! /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, | |
| 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); | |
| } | |
| }); | |
| } |