diff --git a/index.js b/index.js index f0c798994..93cad2074 100644 --- a/index.js +++ b/index.js @@ -42,8 +42,14 @@ var _engine = { return this.render(tpl, ctx); }, renderFile: function(filepath, ctx) { - var tpl = this.handleCache(filepath); - return this.render(tpl, ctx); + try{ + var tpl = this.handleCache(filepath); + return this.render(tpl, ctx); + } + catch(e){ + e.file = filepath; + throw e; + } }, evalOutput: function(str, scope) { var tpl = this.parser.parseOutput(str.trim()); diff --git a/package.json b/package.json index 05aa1d6f2..0c5c018b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "shopify-liquid", - "version": "1.1.5", + "version": "1.1.6", "description": "A Shopify Liquid Implementation in Node.js", "main": "index.js", "scripts": { diff --git a/test/error.js b/test/error.js index 98e6ff854..5bb3f65a6 100644 --- a/test/error.js +++ b/test/error.js @@ -1,6 +1,7 @@ var chai = require("chai"); var expect = chai.expect; var engine = require('..')(), ctx; +const mock = require('mock-fs'); function test(func, cb){ try{ @@ -34,6 +35,19 @@ describe('error', function() { }); }); + it('should throw correct error info for files', function() { + mock({ + "/foo.html": '\n\n\n{% raw %}\n\n' + }); + test(function(){ + engine.renderFile('/foo.html', {}); + }, function(err){ + expect(err.input).to.equal('{% raw %}'); + expect(err.line).to.equal(4); + expect(err.file).to.equal('/foo.html'); + }); + }); + it('should throw ParseError when filter not exist', function() { test(function(){ engine.parseAndRender('{{ a | xz }}', {});