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
JavaScript
;
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