New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

match-sorter

Package Overview
Dependencies
Maintainers
1
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

match-sorter - npm Package Compare versions

Comparing version 4.2.1 to 5.0.0

150

dist/match-sorter.cjs.js

@@ -14,8 +14,6 @@ 'use strict';

var rankings = {
CASE_SENSITIVE_EQUAL: 9,
EQUAL: 8,
STARTS_WITH: 7,
WORD_STARTS_WITH: 6,
STRING_CASE: 5,
STRING_CASE_ACRONYM: 4,
CASE_SENSITIVE_EQUAL: 7,
EQUAL: 6,
STARTS_WITH: 5,
WORD_STARTS_WITH: 4,
CONTAINS: 3,

@@ -26,11 +24,3 @@ ACRONYM: 2,

};
var caseRankings = {
CAMEL: 0.8,
PASCAL: 0.6,
KEBAB: 0.4,
SNAKE: 0.2,
NO_CASE: 0
};
matchSorter.rankings = rankings;
matchSorter.caseRankings = caseRankings;

@@ -170,7 +160,4 @@ var defaultBaseSortFn = function (a, b) {

return rankings.CASE_SENSITIVE_EQUAL;
}
} // Lower casing before further comparison
var caseRank = getCaseRanking(testString);
var isPartial = isPartialOfCase(testString, stringToRank, caseRank);
var isCasedAcronym = isCaseAcronym(testString, stringToRank, caseRank); // Lower casing before further comparison

@@ -181,3 +168,3 @@ testString = testString.toLowerCase();

if (testString === stringToRank) {
return rankings.EQUAL + caseRank;
return rankings.EQUAL;
} // starts with

@@ -187,3 +174,3 @@

if (testString.indexOf(stringToRank) === 0) {
return rankings.STARTS_WITH + caseRank;
return rankings.STARTS_WITH;
} // word starts with

@@ -193,13 +180,3 @@

if (testString.indexOf(" " + stringToRank) !== -1) {
return rankings.WORD_STARTS_WITH + caseRank;
} // is a part inside a cased string
if (isPartial) {
return rankings.STRING_CASE + caseRank;
} // is acronym for a cased string
if (caseRank > 0 && isCasedAcronym) {
return rankings.STRING_CASE_ACRONYM + caseRank;
return rankings.WORD_STARTS_WITH;
} // contains

@@ -209,3 +186,3 @@

if (testString.indexOf(stringToRank) !== -1) {
return rankings.CONTAINS + caseRank;
return rankings.CONTAINS;
} else if (stringToRank.length === 1) {

@@ -220,3 +197,3 @@ // If the only character in the given stringToRank

if (getAcronym(testString).indexOf(stringToRank) !== -1) {
return rankings.ACRONYM + caseRank;
return rankings.ACRONYM;
} // will return a number between rankings.MATCHES and

@@ -248,107 +225,2 @@ // rankings.MATCHES + 1 depending on how close of a match it is.

/**
* Returns a score base on the case of the testString
* @param {String} testString - the string to test against
* @returns {Number} the number of the ranking,
* based on the case between 0 and 1 for how the testString matches the case
*/
function getCaseRanking(testString) {
var containsUpperCase = testString.toLowerCase() !== testString;
var containsDash = testString.indexOf('-') >= 0;
var containsUnderscore = testString.indexOf('_') >= 0;
if (!containsUpperCase && !containsUnderscore && containsDash) {
return caseRankings.KEBAB;
}
if (!containsUpperCase && containsUnderscore && !containsDash) {
return caseRankings.SNAKE;
}
if (containsUpperCase && !containsDash && !containsUnderscore) {
var startsWithUpperCase = testString[0].toUpperCase() === testString[0];
if (startsWithUpperCase) {
return caseRankings.PASCAL;
}
return caseRankings.CAMEL;
}
return caseRankings.NO_CASE;
}
/**
* Returns whether the stringToRank is one of the case parts in the testString (works with any string case)
* @example
* // returns true
* isPartialOfCase('helloWorld', 'world', caseRankings.CAMEL)
* @example
* // returns false
* isPartialOfCase('helloWorld', 'oworl', caseRankings.CAMEL)
* @param {String} testString - the string to test against
* @param {String} stringToRank - the string to rank
* @param {Number} caseRanking - the ranking score based on case of testString
* @returns {Boolean} whether the stringToRank is one of the case parts in the testString
*/
function isPartialOfCase(testString, stringToRank, caseRanking) {
var testIndex = testString.toLowerCase().indexOf(stringToRank.toLowerCase());
switch (caseRanking) {
case caseRankings.SNAKE:
return testString[testIndex - 1] === '_';
case caseRankings.KEBAB:
return testString[testIndex - 1] === '-';
case caseRankings.PASCAL:
case caseRankings.CAMEL:
return testIndex !== -1 && testString[testIndex] === testString[testIndex].toUpperCase();
default:
return false;
}
}
/**
* Check if stringToRank is an acronym for a partial case
* @example
* // returns true
* isCaseAcronym('super_duper_file', 'sdf', caseRankings.SNAKE)
* @param {String} testString - the string to test against
* @param {String} stringToRank - the acronym to test
* @param {Number} caseRank - the ranking of the case
* @returns {Boolean} whether the stringToRank is an acronym for the testString
*/
function isCaseAcronym(testString, stringToRank, caseRank) {
var splitValue = null;
switch (caseRank) {
case caseRankings.SNAKE:
splitValue = '_';
break;
case caseRankings.KEBAB:
splitValue = '-';
break;
case caseRankings.PASCAL:
case caseRankings.CAMEL:
splitValue = /(?=[A-Z])/;
break;
default:
splitValue = null;
}
var splitTestString = testString.split(splitValue);
return stringToRank.toLowerCase().split('').reduce(function (correct, char, charIndex) {
var splitItem = splitTestString[charIndex];
return correct && splitItem && splitItem[0].toLowerCase() === char;
}, true);
}
/**
* Returns a score based on how spread apart the

@@ -528,3 +400,3 @@ * characters from the stringToRank are within the testString.

exports.default = matchSorter;
exports.matchSorter = matchSorter;
exports.rankings = rankings;

@@ -5,8 +5,6 @@ import _extends from '@babel/runtime/helpers/esm/extends';

var rankings = {
CASE_SENSITIVE_EQUAL: 9,
EQUAL: 8,
STARTS_WITH: 7,
WORD_STARTS_WITH: 6,
STRING_CASE: 5,
STRING_CASE_ACRONYM: 4,
CASE_SENSITIVE_EQUAL: 7,
EQUAL: 6,
STARTS_WITH: 5,
WORD_STARTS_WITH: 4,
CONTAINS: 3,

@@ -17,11 +15,3 @@ ACRONYM: 2,

};
var caseRankings = {
CAMEL: 0.8,
PASCAL: 0.6,
KEBAB: 0.4,
SNAKE: 0.2,
NO_CASE: 0
};
matchSorter.rankings = rankings;
matchSorter.caseRankings = caseRankings;

@@ -161,7 +151,4 @@ var defaultBaseSortFn = function (a, b) {

return rankings.CASE_SENSITIVE_EQUAL;
}
} // Lower casing before further comparison
var caseRank = getCaseRanking(testString);
var isPartial = isPartialOfCase(testString, stringToRank, caseRank);
var isCasedAcronym = isCaseAcronym(testString, stringToRank, caseRank); // Lower casing before further comparison

@@ -172,3 +159,3 @@ testString = testString.toLowerCase();

if (testString === stringToRank) {
return rankings.EQUAL + caseRank;
return rankings.EQUAL;
} // starts with

@@ -178,3 +165,3 @@

if (testString.indexOf(stringToRank) === 0) {
return rankings.STARTS_WITH + caseRank;
return rankings.STARTS_WITH;
} // word starts with

@@ -184,13 +171,3 @@

if (testString.indexOf(" " + stringToRank) !== -1) {
return rankings.WORD_STARTS_WITH + caseRank;
} // is a part inside a cased string
if (isPartial) {
return rankings.STRING_CASE + caseRank;
} // is acronym for a cased string
if (caseRank > 0 && isCasedAcronym) {
return rankings.STRING_CASE_ACRONYM + caseRank;
return rankings.WORD_STARTS_WITH;
} // contains

@@ -200,3 +177,3 @@

if (testString.indexOf(stringToRank) !== -1) {
return rankings.CONTAINS + caseRank;
return rankings.CONTAINS;
} else if (stringToRank.length === 1) {

@@ -211,3 +188,3 @@ // If the only character in the given stringToRank

if (getAcronym(testString).indexOf(stringToRank) !== -1) {
return rankings.ACRONYM + caseRank;
return rankings.ACRONYM;
} // will return a number between rankings.MATCHES and

@@ -239,107 +216,2 @@ // rankings.MATCHES + 1 depending on how close of a match it is.

/**
* Returns a score base on the case of the testString
* @param {String} testString - the string to test against
* @returns {Number} the number of the ranking,
* based on the case between 0 and 1 for how the testString matches the case
*/
function getCaseRanking(testString) {
var containsUpperCase = testString.toLowerCase() !== testString;
var containsDash = testString.indexOf('-') >= 0;
var containsUnderscore = testString.indexOf('_') >= 0;
if (!containsUpperCase && !containsUnderscore && containsDash) {
return caseRankings.KEBAB;
}
if (!containsUpperCase && containsUnderscore && !containsDash) {
return caseRankings.SNAKE;
}
if (containsUpperCase && !containsDash && !containsUnderscore) {
var startsWithUpperCase = testString[0].toUpperCase() === testString[0];
if (startsWithUpperCase) {
return caseRankings.PASCAL;
}
return caseRankings.CAMEL;
}
return caseRankings.NO_CASE;
}
/**
* Returns whether the stringToRank is one of the case parts in the testString (works with any string case)
* @example
* // returns true
* isPartialOfCase('helloWorld', 'world', caseRankings.CAMEL)
* @example
* // returns false
* isPartialOfCase('helloWorld', 'oworl', caseRankings.CAMEL)
* @param {String} testString - the string to test against
* @param {String} stringToRank - the string to rank
* @param {Number} caseRanking - the ranking score based on case of testString
* @returns {Boolean} whether the stringToRank is one of the case parts in the testString
*/
function isPartialOfCase(testString, stringToRank, caseRanking) {
var testIndex = testString.toLowerCase().indexOf(stringToRank.toLowerCase());
switch (caseRanking) {
case caseRankings.SNAKE:
return testString[testIndex - 1] === '_';
case caseRankings.KEBAB:
return testString[testIndex - 1] === '-';
case caseRankings.PASCAL:
case caseRankings.CAMEL:
return testIndex !== -1 && testString[testIndex] === testString[testIndex].toUpperCase();
default:
return false;
}
}
/**
* Check if stringToRank is an acronym for a partial case
* @example
* // returns true
* isCaseAcronym('super_duper_file', 'sdf', caseRankings.SNAKE)
* @param {String} testString - the string to test against
* @param {String} stringToRank - the acronym to test
* @param {Number} caseRank - the ranking of the case
* @returns {Boolean} whether the stringToRank is an acronym for the testString
*/
function isCaseAcronym(testString, stringToRank, caseRank) {
var splitValue = null;
switch (caseRank) {
case caseRankings.SNAKE:
splitValue = '_';
break;
case caseRankings.KEBAB:
splitValue = '-';
break;
case caseRankings.PASCAL:
case caseRankings.CAMEL:
splitValue = /(?=[A-Z])/;
break;
default:
splitValue = null;
}
var splitTestString = testString.split(splitValue);
return stringToRank.toLowerCase().split('').reduce(function (correct, char, charIndex) {
var splitItem = splitTestString[charIndex];
return correct && splitItem && splitItem[0].toLowerCase() === char;
}, true);
}
/**
* Returns a score based on how spread apart the

@@ -519,3 +391,2 @@ * characters from the stringToRank are within the testString.

export default matchSorter;
export { rankings };
export { matchSorter, rankings };

@@ -447,8 +447,6 @@ (function (global, factory) {

var rankings = {
CASE_SENSITIVE_EQUAL: 9,
EQUAL: 8,
STARTS_WITH: 7,
WORD_STARTS_WITH: 6,
STRING_CASE: 5,
STRING_CASE_ACRONYM: 4,
CASE_SENSITIVE_EQUAL: 7,
EQUAL: 6,
STARTS_WITH: 5,
WORD_STARTS_WITH: 4,
CONTAINS: 3,

@@ -459,11 +457,3 @@ ACRONYM: 2,

};
var caseRankings = {
CAMEL: 0.8,
PASCAL: 0.6,
KEBAB: 0.4,
SNAKE: 0.2,
NO_CASE: 0
};
matchSorter.rankings = rankings;
matchSorter.caseRankings = caseRankings;

@@ -603,7 +593,4 @@ var defaultBaseSortFn = function (a, b) {

return rankings.CASE_SENSITIVE_EQUAL;
}
} // Lower casing before further comparison
var caseRank = getCaseRanking(testString);
var isPartial = isPartialOfCase(testString, stringToRank, caseRank);
var isCasedAcronym = isCaseAcronym(testString, stringToRank, caseRank); // Lower casing before further comparison

@@ -614,3 +601,3 @@ testString = testString.toLowerCase();

if (testString === stringToRank) {
return rankings.EQUAL + caseRank;
return rankings.EQUAL;
} // starts with

@@ -620,3 +607,3 @@

if (testString.indexOf(stringToRank) === 0) {
return rankings.STARTS_WITH + caseRank;
return rankings.STARTS_WITH;
} // word starts with

@@ -626,13 +613,3 @@

if (testString.indexOf(" " + stringToRank) !== -1) {
return rankings.WORD_STARTS_WITH + caseRank;
} // is a part inside a cased string
if (isPartial) {
return rankings.STRING_CASE + caseRank;
} // is acronym for a cased string
if (caseRank > 0 && isCasedAcronym) {
return rankings.STRING_CASE_ACRONYM + caseRank;
return rankings.WORD_STARTS_WITH;
} // contains

@@ -642,3 +619,3 @@

if (testString.indexOf(stringToRank) !== -1) {
return rankings.CONTAINS + caseRank;
return rankings.CONTAINS;
} else if (stringToRank.length === 1) {

@@ -653,3 +630,3 @@ // If the only character in the given stringToRank

if (getAcronym(testString).indexOf(stringToRank) !== -1) {
return rankings.ACRONYM + caseRank;
return rankings.ACRONYM;
} // will return a number between rankings.MATCHES and

@@ -681,107 +658,2 @@ // rankings.MATCHES + 1 depending on how close of a match it is.

/**
* Returns a score base on the case of the testString
* @param {String} testString - the string to test against
* @returns {Number} the number of the ranking,
* based on the case between 0 and 1 for how the testString matches the case
*/
function getCaseRanking(testString) {
var containsUpperCase = testString.toLowerCase() !== testString;
var containsDash = testString.indexOf('-') >= 0;
var containsUnderscore = testString.indexOf('_') >= 0;
if (!containsUpperCase && !containsUnderscore && containsDash) {
return caseRankings.KEBAB;
}
if (!containsUpperCase && containsUnderscore && !containsDash) {
return caseRankings.SNAKE;
}
if (containsUpperCase && !containsDash && !containsUnderscore) {
var startsWithUpperCase = testString[0].toUpperCase() === testString[0];
if (startsWithUpperCase) {
return caseRankings.PASCAL;
}
return caseRankings.CAMEL;
}
return caseRankings.NO_CASE;
}
/**
* Returns whether the stringToRank is one of the case parts in the testString (works with any string case)
* @example
* // returns true
* isPartialOfCase('helloWorld', 'world', caseRankings.CAMEL)
* @example
* // returns false
* isPartialOfCase('helloWorld', 'oworl', caseRankings.CAMEL)
* @param {String} testString - the string to test against
* @param {String} stringToRank - the string to rank
* @param {Number} caseRanking - the ranking score based on case of testString
* @returns {Boolean} whether the stringToRank is one of the case parts in the testString
*/
function isPartialOfCase(testString, stringToRank, caseRanking) {
var testIndex = testString.toLowerCase().indexOf(stringToRank.toLowerCase());
switch (caseRanking) {
case caseRankings.SNAKE:
return testString[testIndex - 1] === '_';
case caseRankings.KEBAB:
return testString[testIndex - 1] === '-';
case caseRankings.PASCAL:
case caseRankings.CAMEL:
return testIndex !== -1 && testString[testIndex] === testString[testIndex].toUpperCase();
default:
return false;
}
}
/**
* Check if stringToRank is an acronym for a partial case
* @example
* // returns true
* isCaseAcronym('super_duper_file', 'sdf', caseRankings.SNAKE)
* @param {String} testString - the string to test against
* @param {String} stringToRank - the acronym to test
* @param {Number} caseRank - the ranking of the case
* @returns {Boolean} whether the stringToRank is an acronym for the testString
*/
function isCaseAcronym(testString, stringToRank, caseRank) {
var splitValue = null;
switch (caseRank) {
case caseRankings.SNAKE:
splitValue = '_';
break;
case caseRankings.KEBAB:
splitValue = '-';
break;
case caseRankings.PASCAL:
case caseRankings.CAMEL:
splitValue = /(?=[A-Z])/;
break;
default:
splitValue = null;
}
var splitTestString = testString.split(splitValue);
return stringToRank.toLowerCase().split('').reduce(function (correct, char, charIndex) {
var splitItem = splitTestString[charIndex];
return correct && splitItem && splitItem[0].toLowerCase() === char;
}, true);
}
/**
* Returns a score based on how spread apart the

@@ -961,3 +833,3 @@ * characters from the stringToRank are within the testString.

exports.default = matchSorter;
exports.matchSorter = matchSorter;
exports.rankings = rankings;

@@ -964,0 +836,0 @@

2

dist/match-sorter.umd.min.js

@@ -1,2 +0,2 @@

!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).matchSorter={})}(this,(function(e){"use strict";function n(){return(n=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e}).apply(this,arguments)}var r={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Ấ":"A","Ắ":"A","Ẳ":"A","Ẵ":"A","Ặ":"A","Æ":"AE","Ầ":"A","Ằ":"A","Ȃ":"A","Ç":"C","Ḉ":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ế":"E","Ḗ":"E","Ề":"E","Ḕ":"E","Ḝ":"E","Ȇ":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ḯ":"I","Ȋ":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ố":"O","Ṍ":"O","Ṓ":"O","Ȏ":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","ấ":"a","ắ":"a","ẳ":"a","ẵ":"a","ặ":"a","æ":"ae","ầ":"a","ằ":"a","ȃ":"a","ç":"c","ḉ":"c","è":"e","é":"e","ê":"e","ë":"e","ế":"e","ḗ":"e","ề":"e","ḕ":"e","ḝ":"e","ȇ":"e","ì":"i","í":"i","î":"i","ï":"i","ḯ":"i","ȋ":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ố":"o","ṍ":"o","ṓ":"o","ȏ":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Ĉ":"C","ĉ":"c","Ċ":"C","ċ":"c","Č":"C","č":"c","C̆":"C","c̆":"c","Ď":"D","ď":"d","Đ":"D","đ":"d","Ē":"E","ē":"e","Ĕ":"E","ĕ":"e","Ė":"E","ė":"e","Ę":"E","ę":"e","Ě":"E","ě":"e","Ĝ":"G","Ǵ":"G","ĝ":"g","ǵ":"g","Ğ":"G","ğ":"g","Ġ":"G","ġ":"g","Ģ":"G","ģ":"g","Ĥ":"H","ĥ":"h","Ħ":"H","ħ":"h","Ḫ":"H","ḫ":"h","Ĩ":"I","ĩ":"i","Ī":"I","ī":"i","Ĭ":"I","ĭ":"i","Į":"I","į":"i","İ":"I","ı":"i","IJ":"IJ","ij":"ij","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","Ḱ":"K","ḱ":"k","K̆":"K","k̆":"k","Ĺ":"L","ĺ":"l","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ŀ":"L","ŀ":"l","Ł":"l","ł":"l","Ḿ":"M","ḿ":"m","M̆":"M","m̆":"m","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","ʼn":"n","N̆":"N","n̆":"n","Ō":"O","ō":"o","Ŏ":"O","ŏ":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","P̆":"P","p̆":"p","Ŕ":"R","ŕ":"r","Ŗ":"R","ŗ":"r","Ř":"R","ř":"r","R̆":"R","r̆":"r","Ȓ":"R","ȓ":"r","Ś":"S","ś":"s","Ŝ":"S","ŝ":"s","Ş":"S","Ș":"S","ș":"s","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","ț":"t","Ț":"T","Ť":"T","ť":"t","Ŧ":"T","ŧ":"t","T̆":"T","t̆":"t","Ũ":"U","ũ":"u","Ū":"U","ū":"u","Ŭ":"U","ŭ":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ȗ":"U","ȗ":"u","V̆":"V","v̆":"v","Ŵ":"W","ŵ":"w","Ẃ":"W","ẃ":"w","X̆":"X","x̆":"x","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Y̆":"Y","y̆":"y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","ſ":"s","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Ǎ":"A","ǎ":"a","Ǐ":"I","ǐ":"i","Ǒ":"O","ǒ":"o","Ǔ":"U","ǔ":"u","Ǖ":"U","ǖ":"u","Ǘ":"U","ǘ":"u","Ǚ":"U","ǚ":"u","Ǜ":"U","ǜ":"u","Ứ":"U","ứ":"u","Ṹ":"U","ṹ":"u","Ǻ":"A","ǻ":"a","Ǽ":"AE","ǽ":"ae","Ǿ":"O","ǿ":"o","Þ":"TH","þ":"th","Ṕ":"P","ṕ":"p","Ṥ":"S","ṥ":"s","X́":"X","x́":"x","Ѓ":"Г","ѓ":"г","Ќ":"К","ќ":"к","A̋":"A","a̋":"a","E̋":"E","e̋":"e","I̋":"I","i̋":"i","Ǹ":"N","ǹ":"n","Ồ":"O","ồ":"o","Ṑ":"O","ṑ":"o","Ừ":"U","ừ":"u","Ẁ":"W","ẁ":"w","Ỳ":"Y","ỳ":"y","Ȁ":"A","ȁ":"a","Ȅ":"E","ȅ":"e","Ȉ":"I","ȉ":"i","Ȍ":"O","ȍ":"o","Ȑ":"R","ȑ":"r","Ȕ":"U","ȕ":"u","B̌":"B","b̌":"b","Č̣":"C","č̣":"c","Ê̌":"E","ê̌":"e","F̌":"F","f̌":"f","Ǧ":"G","ǧ":"g","Ȟ":"H","ȟ":"h","J̌":"J","ǰ":"j","Ǩ":"K","ǩ":"k","M̌":"M","m̌":"m","P̌":"P","p̌":"p","Q̌":"Q","q̌":"q","Ř̩":"R","ř̩":"r","Ṧ":"S","ṧ":"s","V̌":"V","v̌":"v","W̌":"W","w̌":"w","X̌":"X","x̌":"x","Y̌":"Y","y̌":"y","A̧":"A","a̧":"a","B̧":"B","b̧":"b","Ḑ":"D","ḑ":"d","Ȩ":"E","ȩ":"e","Ɛ̧":"E","ɛ̧":"e","Ḩ":"H","ḩ":"h","I̧":"I","i̧":"i","Ɨ̧":"I","ɨ̧":"i","M̧":"M","m̧":"m","O̧":"O","o̧":"o","Q̧":"Q","q̧":"q","U̧":"U","u̧":"u","X̧":"X","x̧":"x","Z̧":"Z","z̧":"z"},t=Object.keys(r).join("|"),a=new RegExp(t,"g"),u=new RegExp(t,""),o=function(e){return e.replace(a,(function(e){return r[e]}))},i=o,A=function(e){return!!e.match(u)},c=o;i.has=A,i.remove=c;var f={CASE_SENSITIVE_EQUAL:9,EQUAL:8,STARTS_WITH:7,WORD_STARTS_WITH:6,STRING_CASE:5,STRING_CASE_ACRONYM:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0},s={CAMEL:.8,PASCAL:.6,KEBAB:.4,SNAKE:.2,NO_CASE:0};d.rankings=f,d.caseRankings=s;var E=function(e,n){return String(e.rankedItem).localeCompare(n.rankedItem)};function d(e,n,r){void 0===r&&(r={});var t=r,a=t.keys,u=t.threshold,o=void 0===u?f.MATCHES:u,i=t.baseSort,A=void 0===i?E:i;return e.reduce((function(e,t,u){var i=function(e,n,r,t){if(!n)return{rankedItem:e,rank:l(e,r,t),keyIndex:-1,keyThreshold:t.threshold};return function(e,n){return n.reduce((function(n,r){var t=function(e,n){"object"==typeof n&&(n=n.key);var r;r="function"==typeof n?n(e):-1!==n.indexOf(".")?n.split(".").reduce((function(e,n){return e?e[n]:null}),e):e[n];return null!=r?[].concat(r):null}(e,r);return t&&t.forEach((function(e){n.push({itemValue:e,attributes:O(r)})})),n}),[])}(e,n).reduce((function(e,n,a){var u=e.rank,o=e.rankedItem,i=e.keyIndex,A=e.keyThreshold,c=n.itemValue,s=n.attributes,E=l(c,r,t),d=o,C=s.minRanking,O=s.maxRanking,k=s.threshold;return E<C&&E>=f.MATCHES?E=C:E>O&&(E=O),E>u&&(u=E,i=a,A=k,d=c),{rankedItem:d,rank:u,keyIndex:i,keyThreshold:A}}),{rank:f.NO_MATCH,keyIndex:-1,keyThreshold:t.threshold})}(t,a,n,r),A=i.rankedItem,c=i.rank,s=i.keyIndex,E=i.keyThreshold;c>=(void 0===E?o:E)&&e.push({rankedItem:A,item:t,rank:c,index:u,keyIndex:s});return e}),[]).sort((function(e,n){return function(e,n,r){var t=-1,a=1,u=e.rank,o=e.keyIndex,i=n.rank,A=n.keyIndex;return u===i?o===A?r(e,n):o<A?t:a:u>i?t:a}(e,n,A)})).map((function(e){return e.item}))}function l(e,n,r){if(e=C(e,r),(n=C(n,r)).length>e.length)return f.NO_MATCH;if(e===n)return f.CASE_SENSITIVE_EQUAL;var t,a,u=function(e){var n=e.toLowerCase()!==e,r=e.indexOf("-")>=0,t=e.indexOf("_")>=0;if(!n&&!t&&r)return s.KEBAB;if(!n&&t&&!r)return s.SNAKE;if(n&&!r&&!t){return e[0].toUpperCase()===e[0]?s.PASCAL:s.CAMEL}return s.NO_CASE}(e),o=function(e,n,r){var t=e.toLowerCase().indexOf(n.toLowerCase());switch(r){case s.SNAKE:return"_"===e[t-1];case s.KEBAB:return"-"===e[t-1];case s.PASCAL:case s.CAMEL:return-1!==t&&e[t]===e[t].toUpperCase();default:return!1}}(e,n,u),i=function(e,n,r){var t=null;switch(r){case s.SNAKE:t="_";break;case s.KEBAB:t="-";break;case s.PASCAL:case s.CAMEL:t=/(?=[A-Z])/;break;default:t=null}var a=e.split(t);return n.toLowerCase().split("").reduce((function(e,n,r){var t=a[r];return e&&t&&t[0].toLowerCase()===n}),!0)}(e,n,u);return(e=e.toLowerCase())===(n=n.toLowerCase())?f.EQUAL+u:0===e.indexOf(n)?f.STARTS_WITH+u:-1!==e.indexOf(" "+n)?f.WORD_STARTS_WITH+u:o?f.STRING_CASE+u:u>0&&i?f.STRING_CASE_ACRONYM+u:-1!==e.indexOf(n)?f.CONTAINS+u:1===n.length?f.NO_MATCH:-1!==(t=e,a="",t.split(" ").forEach((function(e){e.split("-").forEach((function(e){a+=e.substr(0,1)}))})),a).indexOf(n)?f.ACRONYM+u:function(e,n){var r=0,t=0;function a(e,n,t){for(var a=t;a<n.length;a++){if(n[a]===e)return r+=1,a+1}return-1}function u(e){var t=r/n.length;return f.MATCHES+t*(1/e)}var o=a(n[0],e,0);if(o<0)return f.NO_MATCH;t=o;for(var i=1;i<n.length;i++){if(!((t=a(n[i],e,t))>-1))return f.NO_MATCH}return u(t-o)}(e,n)}function C(e,n){return e=""+e,n.keepDiacritics||(e=i(e)),e}function O(e){return"string"==typeof e&&(e={key:e}),n({maxRanking:1/0,minRanking:-1/0},e)}e.default=d,e.rankings=f,Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).matchSorter={})}(this,(function(e){"use strict";function n(){return(n=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e}).apply(this,arguments)}var r={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Ấ":"A","Ắ":"A","Ẳ":"A","Ẵ":"A","Ặ":"A","Æ":"AE","Ầ":"A","Ằ":"A","Ȃ":"A","Ç":"C","Ḉ":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ế":"E","Ḗ":"E","Ề":"E","Ḕ":"E","Ḝ":"E","Ȇ":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ḯ":"I","Ȋ":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ố":"O","Ṍ":"O","Ṓ":"O","Ȏ":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","ấ":"a","ắ":"a","ẳ":"a","ẵ":"a","ặ":"a","æ":"ae","ầ":"a","ằ":"a","ȃ":"a","ç":"c","ḉ":"c","è":"e","é":"e","ê":"e","ë":"e","ế":"e","ḗ":"e","ề":"e","ḕ":"e","ḝ":"e","ȇ":"e","ì":"i","í":"i","î":"i","ï":"i","ḯ":"i","ȋ":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ố":"o","ṍ":"o","ṓ":"o","ȏ":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Ĉ":"C","ĉ":"c","Ċ":"C","ċ":"c","Č":"C","č":"c","C̆":"C","c̆":"c","Ď":"D","ď":"d","Đ":"D","đ":"d","Ē":"E","ē":"e","Ĕ":"E","ĕ":"e","Ė":"E","ė":"e","Ę":"E","ę":"e","Ě":"E","ě":"e","Ĝ":"G","Ǵ":"G","ĝ":"g","ǵ":"g","Ğ":"G","ğ":"g","Ġ":"G","ġ":"g","Ģ":"G","ģ":"g","Ĥ":"H","ĥ":"h","Ħ":"H","ħ":"h","Ḫ":"H","ḫ":"h","Ĩ":"I","ĩ":"i","Ī":"I","ī":"i","Ĭ":"I","ĭ":"i","Į":"I","į":"i","İ":"I","ı":"i","IJ":"IJ","ij":"ij","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","Ḱ":"K","ḱ":"k","K̆":"K","k̆":"k","Ĺ":"L","ĺ":"l","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ŀ":"L","ŀ":"l","Ł":"l","ł":"l","Ḿ":"M","ḿ":"m","M̆":"M","m̆":"m","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","ʼn":"n","N̆":"N","n̆":"n","Ō":"O","ō":"o","Ŏ":"O","ŏ":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","P̆":"P","p̆":"p","Ŕ":"R","ŕ":"r","Ŗ":"R","ŗ":"r","Ř":"R","ř":"r","R̆":"R","r̆":"r","Ȓ":"R","ȓ":"r","Ś":"S","ś":"s","Ŝ":"S","ŝ":"s","Ş":"S","Ș":"S","ș":"s","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","ț":"t","Ț":"T","Ť":"T","ť":"t","Ŧ":"T","ŧ":"t","T̆":"T","t̆":"t","Ũ":"U","ũ":"u","Ū":"U","ū":"u","Ŭ":"U","ŭ":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ȗ":"U","ȗ":"u","V̆":"V","v̆":"v","Ŵ":"W","ŵ":"w","Ẃ":"W","ẃ":"w","X̆":"X","x̆":"x","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Y̆":"Y","y̆":"y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","ſ":"s","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Ǎ":"A","ǎ":"a","Ǐ":"I","ǐ":"i","Ǒ":"O","ǒ":"o","Ǔ":"U","ǔ":"u","Ǖ":"U","ǖ":"u","Ǘ":"U","ǘ":"u","Ǚ":"U","ǚ":"u","Ǜ":"U","ǜ":"u","Ứ":"U","ứ":"u","Ṹ":"U","ṹ":"u","Ǻ":"A","ǻ":"a","Ǽ":"AE","ǽ":"ae","Ǿ":"O","ǿ":"o","Þ":"TH","þ":"th","Ṕ":"P","ṕ":"p","Ṥ":"S","ṥ":"s","X́":"X","x́":"x","Ѓ":"Г","ѓ":"г","Ќ":"К","ќ":"к","A̋":"A","a̋":"a","E̋":"E","e̋":"e","I̋":"I","i̋":"i","Ǹ":"N","ǹ":"n","Ồ":"O","ồ":"o","Ṑ":"O","ṑ":"o","Ừ":"U","ừ":"u","Ẁ":"W","ẁ":"w","Ỳ":"Y","ỳ":"y","Ȁ":"A","ȁ":"a","Ȅ":"E","ȅ":"e","Ȉ":"I","ȉ":"i","Ȍ":"O","ȍ":"o","Ȑ":"R","ȑ":"r","Ȕ":"U","ȕ":"u","B̌":"B","b̌":"b","Č̣":"C","č̣":"c","Ê̌":"E","ê̌":"e","F̌":"F","f̌":"f","Ǧ":"G","ǧ":"g","Ȟ":"H","ȟ":"h","J̌":"J","ǰ":"j","Ǩ":"K","ǩ":"k","M̌":"M","m̌":"m","P̌":"P","p̌":"p","Q̌":"Q","q̌":"q","Ř̩":"R","ř̩":"r","Ṧ":"S","ṧ":"s","V̌":"V","v̌":"v","W̌":"W","w̌":"w","X̌":"X","x̌":"x","Y̌":"Y","y̌":"y","A̧":"A","a̧":"a","B̧":"B","b̧":"b","Ḑ":"D","ḑ":"d","Ȩ":"E","ȩ":"e","Ɛ̧":"E","ɛ̧":"e","Ḩ":"H","ḩ":"h","I̧":"I","i̧":"i","Ɨ̧":"I","ɨ̧":"i","M̧":"M","m̧":"m","O̧":"O","o̧":"o","Q̧":"Q","q̧":"q","U̧":"U","u̧":"u","X̧":"X","x̧":"x","Z̧":"Z","z̧":"z"},t=Object.keys(r).join("|"),o=new RegExp(t,"g"),u=new RegExp(t,""),i=function(e){return e.replace(o,(function(e){return r[e]}))},a=i,c=function(e){return!!e.match(u)},f=i;a.has=c,a.remove=f;var d={CASE_SENSITIVE_EQUAL:7,EQUAL:6,STARTS_WITH:5,WORD_STARTS_WITH:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0};A.rankings=d;var s=function(e,n){return String(e.rankedItem).localeCompare(n.rankedItem)};function A(e,n,r){void 0===r&&(r={});var t=r,o=t.keys,u=t.threshold,i=void 0===u?d.MATCHES:u,a=t.baseSort,c=void 0===a?s:a;return e.reduce((function(e,t,u){var a=function(e,n,r,t){if(!n)return{rankedItem:e,rank:l(e,r,t),keyIndex:-1,keyThreshold:t.threshold};return function(e,n){return n.reduce((function(n,r){var t=function(e,n){"object"==typeof n&&(n=n.key);var r;r="function"==typeof n?n(e):-1!==n.indexOf(".")?n.split(".").reduce((function(e,n){return e?e[n]:null}),e):e[n];return null!=r?[].concat(r):null}(e,r);return t&&t.forEach((function(e){n.push({itemValue:e,attributes:k(r)})})),n}),[])}(e,n).reduce((function(e,n,o){var u=e.rank,i=e.rankedItem,a=e.keyIndex,c=e.keyThreshold,f=n.itemValue,s=n.attributes,A=l(f,r,t),h=i,k=s.minRanking,I=s.maxRanking,O=s.threshold;return A<k&&A>=d.MATCHES?A=k:A>I&&(A=I),A>u&&(u=A,a=o,c=O,h=f),{rankedItem:h,rank:u,keyIndex:a,keyThreshold:c}}),{rank:d.NO_MATCH,keyIndex:-1,keyThreshold:t.threshold})}(t,o,n,r),c=a.rankedItem,f=a.rank,s=a.keyIndex,A=a.keyThreshold;f>=(void 0===A?i:A)&&e.push({rankedItem:c,item:t,rank:f,index:u,keyIndex:s});return e}),[]).sort((function(e,n){return function(e,n,r){var t=-1,o=1,u=e.rank,i=e.keyIndex,a=n.rank,c=n.keyIndex;return u===a?i===c?r(e,n):i<c?t:o:u>a?t:o}(e,n,c)})).map((function(e){return e.item}))}function l(e,n,r){return e=h(e,r),(n=h(n,r)).length>e.length?d.NO_MATCH:e===n?d.CASE_SENSITIVE_EQUAL:(e=e.toLowerCase())===(n=n.toLowerCase())?d.EQUAL:0===e.indexOf(n)?d.STARTS_WITH:-1!==e.indexOf(" "+n)?d.WORD_STARTS_WITH:-1!==e.indexOf(n)?d.CONTAINS:1===n.length?d.NO_MATCH:-1!==(t=e,o="",t.split(" ").forEach((function(e){e.split("-").forEach((function(e){o+=e.substr(0,1)}))})),o).indexOf(n)?d.ACRONYM:function(e,n){var r=0,t=0;function o(e,n,t){for(var o=t;o<n.length;o++){if(n[o]===e)return r+=1,o+1}return-1}function u(e){var t=r/n.length;return d.MATCHES+t*(1/e)}var i=o(n[0],e,0);if(i<0)return d.NO_MATCH;t=i;for(var a=1;a<n.length;a++){if(!((t=o(n[a],e,t))>-1))return d.NO_MATCH}return u(t-i)}(e,n);var t,o}function h(e,n){return e=""+e,n.keepDiacritics||(e=a(e)),e}function k(e){return"string"==typeof e&&(e={key:e}),n({maxRanking:1/0,minRanking:-1/0},e)}e.matchSorter=A,e.rankings=d,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=match-sorter.umd.min.js.map
{
"name": "match-sorter",
"version": "4.2.1",
"version": "5.0.0",
"description": "Simple, expected, and deterministic best-match sorting of an array in JavaScript",

@@ -5,0 +5,0 @@ "main": "dist/match-sorter.cjs.js",

@@ -19,3 +19,3 @@ <div align="center">

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-19-orange.svg?style=flat-square)](#contributors-)
[![All Contributors](https://img.shields.io/badge/all_contributors-21-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->

@@ -51,13 +51,7 @@ [![PRs Welcome][prs-badge]][prs]

`Dominican Republic`)
5. **CASE STARTS WITH**: If the item has a defined case (`camelCase`,
`PascalCase`, `snake_case` or `kebab-case`), then if one of the parts starts
with the given value (ex. `kingdom` would match `unitedKingdom` or
`united_kingdom`)
6. **CASE ACRONYM** If the item's case matches the synonym (ex. `uk` would
match `united-kingdom` or `UnitedKingdom`)
7. **CONTAINS**: If the item contains the given value (ex. `ham` would match
5. **CONTAINS**: If the item contains the given value (ex. `ham` would match
`Bahamas`)
8. **ACRONYM**: If the item's acronym is the given value (ex. `us` would match
6. **ACRONYM**: If the item's acronym is the given value (ex. `us` would match
`United States`)
9. **SIMPLE MATCH**: If the item has letters in the same order as the letters
7. **SIMPLE MATCH**: If the item has letters in the same order as the letters
of the given value (ex. `iw` would match `Zimbabwe`, but not `Kuwait`

@@ -82,3 +76,5 @@ because it must be in the same order). Furthermore, if the item is a closer

- [baseSort: `function(itemA, itemB): -1 | 0 | 1`](#basesort-functionitema-itemb--1--0--1)
- [Using ES6?](#using-es6)
- [Recipes](#recipes)
- [Match PascalCase, camelCase, snake_case, or kebab-case as words](#match-pascalcase-camelcase-snake_case-or-kebab-case-as-words)
- [Match many words across multiple fields (table filtering)](#match-many-words-across-multiple-fields-table-filtering)
- [Inspiration](#inspiration)

@@ -106,4 +102,4 @@ - [Other Solutions](#other-solutions)

```javascript
import matchSorter from 'match-sorter'
// or const matchSorter = require('match-sorter').default
import {matchSorter} from 'match-sorter'
// or const {matchSorter} = require('match-sorter')
// or window.matchSorter

@@ -223,3 +219,3 @@ const list = ['hi', 'hey', 'hello', 'sup', 'yo']

matchSorter(list, 'ed', {
keys: [{threshold: rankings.STARTS_WITH, key: 'name'}, 'color'],
keys: [{threshold: matchSorter.rankings.STARTS_WITH, key: 'name'}, 'color'],
})

@@ -343,22 +339,33 @@ //[{name: 'Jen', color: 'Red'}]

## Using ES6?
## Recipes
In the examples above, we're using CommonJS. If you're using ES6 modules, then
you can do:
### Match PascalCase, camelCase, snake_case, or kebab-case as words
`import matchSorter, {rankings, caseRankings} from 'match-sorter'`
By default, `match-sorter` assumes spaces to be the word separator. However, if
your data has a different word separator, you can use a property callback to
replace your separator with spaces. For example, for `snake_case`:
## Recipes
```javascript
const list = [
{name: 'Janice_Kurtis'},
{name: 'Fred_Mertz'},
{name: 'George_Foreman'},
{name: 'Jen_Smith'},
]
matchSorter(list, 'js', {keys: [item => item.name.replace(/_/g, ' ')]})
// [{name: 'Jen_Smith'}, {name: 'Janice_Kurtis'}]
```
### Match many words across multiple fields (table filtering)
By default, `match-sorter` will return matches from objects where one of the properties
matches _the entire_ search term. For multi-column data sets it can be beneficial to split
words in search string and match each word separately. This can be done by chaining
`match-sorter` calls.
By default, `match-sorter` will return matches from objects where one of the
properties matches _the entire_ search term. For multi-column data sets it can
be beneficial to split words in search string and match each word separately.
This can be done by chaining `match-sorter` calls.
The benefit of this is that a filter string of "two words" will match both "two" and "words", but
will return rows where the two words are found in _different_ columns as well as when both words
match in the same column. For single-column matches it will also return matches out of order
(column = "wordstwo" will match just as well as column="twowords", the latter getting a higher score).
The benefit of this is that a filter string of "two words" will match both "two"
and "words", but will return rows where the two words are found in _different_
columns as well as when both words match in the same column. For single-column
matches it will also return matches out of order (column = "wordstwo" will match
just as well as column="twowords", the latter getting a higher score).

@@ -451,2 +458,4 @@ ```javascript

<td align="center"><a href="https://github.com/SweVictor"><img src="https://avatars1.githubusercontent.com/u/449347?v=4" width="100px;" alt=""/><br /><sub><b>Victor</b></sub></a><br /><a href="https://github.com/kentcdodds/match-sorter/commits?author=SweVictor" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/RebeccaStevens"><img src="https://avatars1.githubusercontent.com/u/7224206?v=4" width="100px;" alt=""/><br /><sub><b>Rebecca Stevens</b></sub></a><br /><a href="https://github.com/kentcdodds/match-sorter/issues?q=author%3ARebeccaStevens" title="Bug reports">🐛</a> <a href="https://github.com/kentcdodds/match-sorter/commits?author=RebeccaStevens" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/marcosvega91"><img src="https://avatars2.githubusercontent.com/u/5365582?v=4" width="100px;" alt=""/><br /><sub><b>Marco Moretti</b></sub></a><br /><a href="https://github.com/kentcdodds/match-sorter/commits?author=marcosvega91" title="Documentation">📖</a></td>
</tr>

@@ -457,2 +466,3 @@ </table>

<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

@@ -459,0 +469,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc