UNPKG

luhn-generator

Version:

A generator of numbers that passes the validation of Luhn algorithm or Luhn formula, also known as the 'modulus 10' or 'mod 10' algorithm

108 lines (83 loc) 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _isNumber2 = _interopRequireDefault(require("lodash/isNumber")); var _isString2 = _interopRequireDefault(require("lodash/isString")); var _stringWidth = _interopRequireDefault(require("string-width")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const alignments = ['left', 'right', 'center']; /** * @param {string} subject * @param {number} width * @returns {string} */ const alignLeft = (subject, width) => { return subject + ' '.repeat(width); }; /** * @param {string} subject * @param {number} width * @returns {string} */ const alignRight = (subject, width) => { return ' '.repeat(width) + subject; }; /** * @param {string} subject * @param {number} width * @returns {string} */ const alignCenter = (subject, width) => { let halfWidth; halfWidth = width / 2; if (halfWidth % 2 === 0) { return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth); } else { halfWidth = Math.floor(halfWidth); return ' '.repeat(halfWidth) + subject + ' '.repeat(halfWidth + 1); } }; /** * Pads a string to the left and/or right to position the subject * text in a desired alignment within a container. * * @param {string} subject * @param {number} containerWidth * @param {string} alignment One of the valid options (left, right, center). * @returns {string} */ const alignString = (subject, containerWidth, alignment) => { if (!(0, _isString2.default)(subject)) { throw new TypeError('Subject parameter value must be a string.'); } if (!(0, _isNumber2.default)(containerWidth)) { throw new TypeError('Container width parameter value must be a number.'); } const subjectWidth = (0, _stringWidth.default)(subject); if (subjectWidth > containerWidth) { // console.log('subjectWidth', subjectWidth, 'containerWidth', containerWidth, 'subject', subject); throw new Error('Subject parameter value width cannot be greater than the container width.'); } if (!(0, _isString2.default)(alignment)) { throw new TypeError('Alignment parameter value must be a string.'); } if (!alignments.includes(alignment)) { throw new Error('Alignment parameter value must be a known alignment parameter value (left, right, center).'); } if (subjectWidth === 0) { return ' '.repeat(containerWidth); } const availableWidth = containerWidth - subjectWidth; if (alignment === 'left') { return alignLeft(subject, availableWidth); } if (alignment === 'right') { return alignRight(subject, availableWidth); } return alignCenter(subject, availableWidth); }; var _default = alignString; exports.default = _default; //# sourceMappingURL=alignString.js.map