1/*! 2 * align-text <https://github.com/jonschlinkert/align-text> 3 * 4 * Copyright (c) 2015, Jon Schlinkert. 5 * Licensed under the MIT License. 6 */ 7 8'use strict'; 9 10var typeOf = require('kind-of'); 11var repeat = require('repeat-string'); 12var longest = require('longest'); 13 14module.exports = function alignText(val, fn) { 15 var lines, type = typeOf(val); 16 17 if (type === 'array') { 18 lines = val; 19 } else if (type === 'string') { 20 lines = val.split(/(?:\r\n|\n)/); 21 } else { 22 throw new TypeError('align-text expects a string or array.'); 23 } 24 25 var fnType = typeOf(fn); 26 var len = lines.length; 27 var max = longest(lines); 28 var res = [], i = 0; 29 30 while (len--) { 31 var line = String(lines[i++]); 32 var diff; 33 34 if (fnType === 'function') { 35 diff = fn(line.length, max.length, line, lines, i); 36 } else if (fnType === 'number') { 37 diff = fn; 38 } else { 39 diff = max.length - line.length; 40 } 41 42 if (typeOf(diff) === 'number') { 43 res.push(repeat(' ', diff) + line); 44 } else if (typeOf(diff) === 'object') { 45 var result = repeat(diff.character || ' ', diff.indent || 0); 46 res.push((diff.prefix || '') + result + line); 47 } 48 } 49 50 if (type === 'array') return res; 51 return res.join('\n'); 52}; 53