module.exports = TagList; function TagList (tagList, latest) { this.latest = latest; this.all = tagList } TagList.parse = function (data, customSort) { var number = function (input) { if (typeof input === 'string') { return parseInt(input.replace(/^\D+/g, ''), 10) || 0; } return 0; }; var tags = data .trim() .split('\n') .map(function (item) { return item.trim(); }) .filter(Boolean); if (!customSort) { tags.sort(function (tagA, tagB) { var partsA = tagA.split('.'); var partsB = tagB.split('.'); if (partsA.length === 1 || partsB.length === 1) { return tagA - tagB > 0 ? 1 : -1; } for (var i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) { var a = number(partsA[i]); var b = number(partsB[i]); var diff = a - b; if (diff) { return diff > 0 ? 1 : -1; } } return 0; }); } var latest = customSort ? tags[0] : tags.filter(function (tag) { return tag.indexOf('.') >= 0; }).pop(); return new TagList(tags, latest); };