Files
portfolio2023/build/node_modules/listify/index.js
T
2023-11-24 22:35:41 +01:00

38 lines
1.1 KiB
JavaScript

'use strict';
var has = Function.call.bind(Object.prototype.hasOwnProperty);
var join = Function.call.bind(Array.prototype.join);
var trim = Function.call.bind(String.prototype.trim);
var isArray = Array.isArray;
var filter = Function.call.bind(Array.prototype.filter);
var slice = Function.call.bind(Array.prototype.slice);
var concat = Function.call.bind(Array.prototype.concat);
module.exports = function listify(list) {
if (!isArray(list)) {
throw new TypeError('requires an array');
}
var options = arguments.length > 1 ? arguments[1] : null;
if (!options) {
options = {};
}
var separator = has(options, 'separator') ? options.separator : ', ';
var finalWord = has(options, 'finalWord') ? options.finalWord : 'and';
if (finalWord.length > 0) {
finalWord += ' ';
}
var trimmed = filter(list, trim);
var str;
if (trimmed.length === 2 && finalWord.length > 0) {
str = join(trimmed, ' ' + finalWord);
} else if (trimmed.length < 3) {
str = join(trimmed, separator);
} else {
str = join(concat(slice(trimmed, 0, -1), finalWord + trimmed[trimmed.length - 1]), separator);
}
return str;
};