@@ -4,7 +4,7 @@ const HandlebarsV4 = require('@bigcommerce/handlebars-v4');
44const helpers = require ( './helpers' ) ;
55
66const AppError = require ( './lib/appError' ) ;
7- const { CompileError, FormatError, RenderError, DecoratorError, TemplateNotFoundError, ValidationError } = require ( './lib/errors' ) ;
7+ const { CompileError, FormatError, RenderError, DecoratorError, TemplateNotFoundError, ValidationError, PrecompileError } = require ( './lib/errors' ) ;
88
99const handlebarsOptions = {
1010 preventIndent : true
@@ -23,6 +23,7 @@ class HandlebarsRenderer {
2323 DecoratorError,
2424 TemplateNotFoundError,
2525 ValidationError,
26+ PrecompileError,
2627 } ;
2728 }
2829
@@ -335,17 +336,21 @@ class HandlebarsRenderer {
335336 */
336337 renderString ( template , context ) {
337338 return new Promise ( ( resolve , reject ) => {
338- let precompiledTemplate ;
339+ let precompiled , precompiledTemplate ;
339340 context = context || { } ;
340341
341342 if ( typeof template !== 'string' ) {
342343 return reject ( new CompileError ( 'Template must be a string' ) ) ;
343344 }
344345
345- // Compile the template
346346 try {
347347 delete this . handlebars . compile ;
348- const precompiled = this . handlebars . precompile ( template , handlebarsOptions ) ;
348+ precompiled = this . handlebars . precompile ( template , handlebarsOptions ) ;
349+ } catch ( e ) {
350+ return reject ( new PrecompileError ( e . message ) ) ;
351+ }
352+
353+ try {
349354 eval ( `precompiledTemplate = ${ precompiled } ` ) ;
350355 template = this . handlebars . template ( precompiledTemplate ) ;
351356 } catch ( e ) {
0 commit comments