From 118836f390ffa882c720426db94e6b6748e69242 Mon Sep 17 00:00:00 2001 From: kpdecker Date: Thu, 24 Dec 2015 09:43:36 -0600 Subject: [PATCH] Throw exception if id tracking args are passed Fixes #1151 --- lib/handlebars/compiler/compiler.js | 52 ++++++++++++++--------------- spec/compiler.js | 13 ++++++-- 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/lib/handlebars/compiler/compiler.js b/lib/handlebars/compiler/compiler.js index 040e99a19..d120d285d 100644 --- a/lib/handlebars/compiler/compiler.js +++ b/lib/handlebars/compiler/compiler.js @@ -421,41 +421,20 @@ Compiler.prototype = { } }; -export function precompile(input, options, env) { - if (input == null || (typeof input !== 'string' && input.type !== 'Program')) { - throw new Exception('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); - } - - options = options || {}; - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } +export function precompile(input, options = {}, env) { + validateInput(input, options); - let ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options); + let environment = compileEnvironment(input, options, env); return new env.JavaScriptCompiler().compile(environment, options); } export function compile(input, options = {}, env) { - if (input == null || (typeof input !== 'string' && input.type !== 'Program')) { - throw new Exception('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); - } - - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } + validateInput(input, options); let compiled; function compileInput() { - let ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options), + let environment = compileEnvironment(input, options, env), templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); return env.template(templateSpec); } @@ -469,6 +448,27 @@ export function compile(input, options = {}, env) { }; } +function validateInput(input, options) { + if (input == null || (typeof input !== 'string' && input.type !== 'Program')) { + throw new Exception('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); + } + + if (options.trackIds || options.stringParams) { + throw new Exception('TrackIds and stringParams are no longer supported. See Github #1145'); + } + + if (!('data' in options)) { + options.data = true; + } + if (options.compat) { + options.useDepths = true; + } +} +function compileEnvironment(input, options, env) { + let ast = env.parse(input, options); + return new env.Compiler().compile(ast, options); +} + function argEquals(a, b) { if (a === b) { return true; diff --git a/spec/compiler.js b/spec/compiler.js index be1fb007d..9ae7099d6 100644 --- a/spec/compiler.js +++ b/spec/compiler.js @@ -48,16 +48,25 @@ describe('compiler', function() { it('can pass through an empty string', function() { equal(Handlebars.compile('')(), ''); }); + + it('throws on desupported options', function() { + shouldThrow(function() { + Handlebars.compile('Dudes', {trackIds: true}); + }, Error, 'TrackIds and stringParams are no longer supported. See Github #1145'); + shouldThrow(function() { + Handlebars.compile('Dudes', {stringParams: true}); + }, Error, 'TrackIds and stringParams are no longer supported. See Github #1145'); + }); }); describe('#precompile', function() { it('should fail with invalid input', function() { shouldThrow(function() { Handlebars.precompile(null); - }, Error, 'You must pass a string or Handlebars AST to Handlebars.precompile. You passed null'); + }, Error, 'You must pass a string or Handlebars AST to Handlebars.compile. You passed null'); shouldThrow(function() { Handlebars.precompile({}); - }, Error, 'You must pass a string or Handlebars AST to Handlebars.precompile. You passed [object Object]'); + }, Error, 'You must pass a string or Handlebars AST to Handlebars.compile. You passed [object Object]'); }); it('can utilize AST instance', function() {