Throw exception if id tracking args are passed

Fixes #1151
This commit is contained in:
kpdecker
2015-12-24 09:43:36 -06:00
parent ee6fadffb4
commit 118836f390
2 changed files with 37 additions and 28 deletions
+26 -26
View File
@@ -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);
}
export function precompile(input, options = {}, env) {
validateInput(input, options);
options = options || {};
if (!('data' in options)) {
options.data = true;
}
if (options.compat) {
options.useDepths = true;
}
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;
+11 -2
View File
@@ -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() {