UNPKG

handlebars-helpers-v2

Version:

Essential Handlebars helpers in TypeScript. A modernized collection of 8 core helper categories with TypeScript support and ESM compatibility.

290 lines 7.38 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); // Remove import as we use our own isNumber function from utils const utils = __importStar(require("./utils")); const helpers = {}; /** * Return the magnitude of `a`. * * @param {Number} `a` * @return {Number} * @api public */ helpers.abs = function (num) { if (!utils.isNumber(num)) { throw new TypeError('expected a number'); } return Math.abs(num); }; /** * Return the sum of `a` plus `b`. * * @param {Number} `a` * @param {Number} `b` * @return {Number} * @api public */ helpers.add = function (a, b) { if (utils.isNumber(a) && utils.isNumber(b)) { return Number(a) + Number(b); } if (typeof a === 'string' && typeof b === 'string') { return a + b; } return ''; }; /** * Returns the average of all numbers in the given array. * * ```handlebars * {{avg "[1, 2, 3, 4, 5]"}} * <!-- results in: '3' --> * ``` * * @param {Array} `array` Array of numbers to add up. * @return {Number} * @api public */ helpers.avg = function () { var args = [].concat.apply([], arguments); // remove handlebars options object args.pop(); return helpers.sum(args) / args.length; }; /** * Get the `Math.ceil()` of the given value. * * @param {Number} `value` * @return {Number} * @api public */ helpers.ceil = function (num) { if (!utils.isNumber(num)) { throw new TypeError('expected a number'); } return Math.ceil(num); }; /** * Divide `a` by `b` * * @param {Number} `a` numerator * @param {Number} `b` denominator * @api public */ helpers.divide = function (a, b) { if (!utils.isNumber(a)) { throw new TypeError('expected the first argument to be a number'); } if (!utils.isNumber(b)) { throw new TypeError('expected the second argument to be a number'); } return Number(a) / Number(b); }; /** * Get the `Math.floor()` of the given value. * * @param {Number} `value` * @return {Number} * @api public */ helpers.floor = function (num) { if (!utils.isNumber(num)) { throw new TypeError('expected a number'); } return Math.floor(num); }; /** * Return the difference of `a` minus `b`. * * @param {Number} `a` * @param {Number} `b` * @alias subtract * @api public */ helpers.minus = function (a, b) { if (!utils.isNumber(a)) { throw new TypeError('expected the first argument to be a number'); } if (!utils.isNumber(b)) { throw new TypeError('expected the second argument to be a number'); } return Number(a) - Number(b); }; /** * Get the remainder of a division operation. * * @param {Number} `a` * @param {Number} `b` * @return {Number} * @api public */ helpers.modulo = function (a, b) { if (!utils.isNumber(a)) { throw new TypeError('expected the first argument to be a number'); } if (!utils.isNumber(b)) { throw new TypeError('expected the second argument to be a number'); } return Number(a) % Number(b); }; /** * Return the product of `a` times `b`. * * @param {Number} `a` factor * @param {Number} `b` multiplier * @return {Number} * @alias times * @api public */ helpers.multiply = function (a, b) { if (!utils.isNumber(a)) { throw new TypeError('expected the first argument to be a number'); } if (!utils.isNumber(b)) { throw new TypeError('expected the second argument to be a number'); } return Number(a) * Number(b); }; /** * Add `a` by `b`. * * @param {Number} `a` factor * @param {Number} `b` multiplier * @api public */ helpers.plus = function (a, b) { if (!utils.isNumber(a)) { throw new TypeError('expected the first argument to be a number'); } if (!utils.isNumber(b)) { throw new TypeError('expected the second argument to be a number'); } return Number(a) + Number(b); }; /** * Generate a random number between two values * * @param {Number} `min` * @param {Number} `max` * @return {String} * @api public */ helpers.random = function (min, max) { if (!utils.isNumber(min)) { throw new TypeError('expected minimum to be a number'); } if (!utils.isNumber(max)) { throw new TypeError('expected maximum to be a number'); } return utils.random(min, max); }; /** * Get the remainder when `a` is divided by `b`. * * @param {Number} `a` a * @param {Number} `b` b * @api public */ helpers.remainder = function (a, b) { return a % b; }; /** * Round the given number. * * @param {Number} `number` * @return {Number} * @api public */ helpers.round = function (num) { if (!utils.isNumber(num)) { throw new TypeError('expected a number'); } return Math.round(num); }; /** * Return the product of `a` minus `b`. * * @param {Number} `a` * @param {Number} `b` * @return {Number} * @alias minus * @api public */ helpers.subtract = function (a, b) { if (!utils.isNumber(a)) { throw new TypeError('expected the first argument to be a number'); } if (!utils.isNumber(b)) { throw new TypeError('expected the second argument to be a number'); } return Number(a) - Number(b); }; /** * Returns the sum of all numbers in the given array. * * ```handlebars * {{sum "[1, 2, 3, 4, 5]"}} * <!-- results in: '15' --> * ``` * @param {Array} `array` Array of numbers to add up. * @return {Number} * @api public */ helpers.sum = function () { var args = [].concat.apply([], arguments); var len = args.length; var sum = 0; while (len--) { if (utils.isNumber(args[len])) { sum += Number(args[len]); } } return sum; }; /** * Multiply number `a` by number `b`. * * @param {Number} `a` factor * @param {Number} `b` multiplier * @return {Number} * @alias multiply * @api public */ helpers.times = function () { return helpers.multiply.apply(this, arguments); }; exports.default = helpers; //# sourceMappingURL=math.js.map