UNPKG

1.28 kBJavaScriptView Raw
1/*!
2 * align-text <https://github.com/jonschlinkert/align-text>
3 *
4 * Copyright (c) 2015-2017, Jon Schlinkert.
5 * Released 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 originalType = typeOf(val);
16 var lines = val;
17
18 if (originalType === 'string') {
19 lines = val.split(/(?:\r\n|\n)/);
20 } else if (originalType !== 'array') {
21 throw new TypeError('align-text expects a string or array.');
22 }
23
24 var fnType = typeOf(fn);
25 var max = longest(lines);
26 var len = lines.length;
27 var idx = -1;
28 var res = [];
29
30 while (++idx < len) {
31 var line = String(lines[idx]);
32 var diff;
33
34 if (fnType === 'function') {
35 diff = fn(line.length, max.length, line, lines, idx);
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 (originalType === 'array') return res;
51 return res.join('\n');
52};