import { Exception } from '@handlebars/parser'; import { isEmpty, isFunction } from '../utils'; export default function (instance) { instance.registerHelper('if', function (conditional, options) { if (arguments.length != 2) { throw new Exception('#if requires exactly one argument'); } if (isFunction(conditional)) { conditional = conditional.call(this); } // Default behavior is to render the positive path if the value is truthy and not empty. // The `includeZero` option may be set to treat the conditional as purely not empty based on the // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) { return options.inverse(this); } else { return options.fn(this); } }); instance.registerHelper('unless', function (conditional, options) { if (arguments.length != 2) { throw new Exception('#unless requires exactly one argument'); } return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash, }); }); }