UNPKG

@technobuddha/library

Version:
63 lines (62 loc) 2.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.compareStrings = void 0; var isNil_1 = __importDefault(require("lodash/isNil")); var compareNumbers_1 = __importDefault(require("../compareNumbers")); /** * Compare two strings * * @param a First string * @param b Second string * @param caseInsensitive True if strings are to be compared case insensitive (default false) * @returns 0 if a == b; -1 if a < b; 1 if a > b * * @default caseInsensitive false * @default natural false * @default version false */ function compareStrings(text1, text2, _a) { var _b, _c; var _d = _a === void 0 ? {} : _a, _e = _d.caseInsensitive, caseInsensitive = _e === void 0 ? false : _e, _f = _d.natural, natural = _f === void 0 ? false : _f, _g = _d.version, version = _g === void 0 ? false : _g; if (text1 === text2) return 0; if (isNil_1.default(text1)) return -1; if (isNil_1.default(text2)) return 1; if (caseInsensitive) { text1 = text1.toLowerCase(); text2 = text2.toLowerCase(); if (text1 === text2) return 0; } if (version) { var v1 = text1.trim().split(/[.-]/u); var v2 = text2.trim().split(/[.-]/u); var count = Math.max(v1.length, v2.length); var order = 0; for (var i = 0; order === 0 && i < count; ++i) order = compareStrings(v1[i], v2[i], { natural: true }); return order || compareNumbers_1.default(v1.length, v2.length); } else if (natural) { var t1 = (_b = text1.match(/(\.\d+|\d+|\D+)/ug)) !== null && _b !== void 0 ? _b : []; var t2 = (_c = text2.match(/(\.\d+|\d+|\D+)/ug)) !== null && _c !== void 0 ? _c : []; var count = Math.min(t1.length, t2.length); var order = 0; for (var i = 0; order === 0 && i < count; ++i) { if (t1[i] !== t2[i]) { var n1 = Number.parseFloat(t1[i]); var n2 = Number.parseFloat(t2[i]); order = Number.isNaN(n1) || Number.isNaN(n2) ? compareStrings(t1[i], t2[i]) : compareNumbers_1.default(n1, n2); } } return order || compareNumbers_1.default(t1.length, t2.length); } return text1 < text2 ? -1 : 1; } exports.compareStrings = compareStrings; exports.default = compareStrings;