import { createRequire } from 'module'; var SourceMap, SourceMapConsumer; try { SourceMap = createRequire(import.meta.url)('source-map'); SourceMapConsumer = SourceMap.SourceMapConsumer; } catch { /* NOP for in browser */ } describe('source-map', function () { if (!Handlebars.precompile || !SourceMap) { return; } it('should safely include source map info', function () { var template = Handlebars.precompile('{{hello}}', { destName: 'dest.js', srcName: 'src.hbs', }); expect(template.code).toBeTruthy(); if (CompilerContext.browser) { expect(template.map).toBeFalsy(); } else { expect(template.map).toBeTruthy(); } }); it('should map source properly', async function () { var templateSource = ' b{{hello}} \n {{bar}}a {{#block arg hash=(subex 1 subval)}}{{/block}}', template = Handlebars.precompile(templateSource, { destName: 'dest.js', srcName: 'src.hbs', }); if (template.map) { var consumer = await new SourceMapConsumer(template.map), lines = template.code.split('\n'), srcLines = templateSource.split('\n'), generated = grepLine('" b"', lines), source = grepLine(' b', srcLines); var mapped = consumer.originalPositionFor(generated); expect(mapped.line).toBe(source.line); expect(mapped.column).toBe(source.column); consumer.destroy(); } }); }); function grepLine(token, lines) { for (var i = 0; i < lines.length; i++) { var column = lines[i].indexOf(token); if (column >= 0) { return { line: i + 1, column: column, }; } } }