-
Notifications
You must be signed in to change notification settings - Fork 113
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7dcbd58
commit 77673c2
Showing
24 changed files
with
1,297 additions
and
565 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import { toString } from 'lodash'; | ||
import { unicodeWords, unicodeWordsWithNumbers } from './unicodeWords'; | ||
|
||
const hasUnicodeWord = RegExp.prototype.test.bind( | ||
/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/, | ||
); | ||
|
||
/** Used to match words composed of alphanumeric characters. */ | ||
// eslint-disable-next-line no-control-regex | ||
const reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; | ||
|
||
function asciiWords(string) { | ||
return string.match(reAsciiWord); | ||
} | ||
|
||
function words(string) { | ||
const result = hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); | ||
return result || []; | ||
} | ||
|
||
function wordsWithNumbers(string) { | ||
const result = hasUnicodeWord(string) ? unicodeWordsWithNumbers(string) : asciiWords(string); | ||
return result || []; | ||
} | ||
|
||
const snakeCase = (string) => | ||
words(toString(string).replace(/['\u2019]/g, '')).reduce( | ||
(result, word, index) => result + (index ? '_' : '') + word.toLowerCase(), | ||
'', | ||
); | ||
const snakeCaseWithNumbers = (string) => | ||
wordsWithNumbers(toString(string).replace(/['\u2019]/g, '')).reduce( | ||
(result, word, index) => result + (index ? '_' : '') + word.toLowerCase(), | ||
'', | ||
); | ||
|
||
export { words, wordsWithNumbers, snakeCase, snakeCaseWithNumbers }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
/** Used to compose unicode character classes. */ | ||
const rsAstralRange = '\\ud800-\\udfff'; | ||
const rsComboMarksRange = '\\u0300-\\u036f'; | ||
const reComboHalfMarksRange = '\\ufe20-\\ufe2f'; | ||
const rsComboSymbolsRange = '\\u20d0-\\u20ff'; | ||
const rsComboMarksExtendedRange = '\\u1ab0-\\u1aff'; | ||
const rsComboMarksSupplementRange = '\\u1dc0-\\u1dff'; | ||
const rsComboRange = | ||
rsComboMarksRange + | ||
reComboHalfMarksRange + | ||
rsComboSymbolsRange + | ||
rsComboMarksExtendedRange + | ||
rsComboMarksSupplementRange; | ||
const rsDingbatRange = '\\u2700-\\u27bf'; | ||
const rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff'; | ||
const rsMathOpRange = '\\xac\\xb1\\xd7\\xf7'; | ||
const rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf'; | ||
const rsPunctuationRange = '\\u2000-\\u206f'; | ||
const rsSpaceRange = | ||
' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000'; | ||
const rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde'; | ||
const rsVarRange = '\\ufe0e\\ufe0f'; | ||
const rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; | ||
|
||
/** Used to compose unicode capture groups. */ | ||
const rsApos = "['\u2019]"; | ||
const rsBreak = `[${rsBreakRange}]`; | ||
const rsCombo = `[${rsComboRange}]`; | ||
const rsDigit = '\\d'; | ||
const rsDingbat = `[${rsDingbatRange}]`; | ||
const rsLower = `[${rsLowerRange}]`; | ||
const rsMisc = `[^${rsAstralRange}${rsBreakRange + rsDigit + rsDingbatRange + rsLowerRange + rsUpperRange}]`; | ||
const rsFitz = '\\ud83c[\\udffb-\\udfff]'; | ||
const rsModifier = `(?:${rsCombo}|${rsFitz})`; | ||
const rsNonAstral = `[^${rsAstralRange}]`; | ||
const rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}'; | ||
const rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]'; | ||
const rsUpper = `[${rsUpperRange}]`; | ||
const rsZWJ = '\\u200d'; | ||
|
||
/** Used to compose unicode regexes. */ | ||
const rsMiscLower = `(?:${rsLower}|${rsMisc})`; | ||
const rsMiscUpper = `(?:${rsUpper}|${rsMisc})`; | ||
const rsOptContrLower = `(?:${rsApos}(?:d|ll|m|re|s|t|ve))?`; | ||
const rsOptContrUpper = `(?:${rsApos}(?:D|LL|M|RE|S|T|VE))?`; | ||
const reOptMod = `${rsModifier}?`; | ||
const rsOptVar = `[${rsVarRange}]?`; | ||
const rsOptJoin = `(?:${rsZWJ}(?:${[rsNonAstral, rsRegional, rsSurrPair].join('|')})${rsOptVar + reOptMod})*`; | ||
const rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])'; | ||
const rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])'; | ||
const rsSeq = rsOptVar + reOptMod + rsOptJoin; | ||
const rsEmoji = `(?:${[rsDingbat, rsRegional, rsSurrPair].join('|')})${rsSeq}`; | ||
|
||
const reUnicodeWords = RegExp( | ||
[ | ||
`${rsUpper}?${rsLower}+${rsOptContrLower}(?=${[rsBreak, rsUpper, '$'].join('|')})`, // Regular words, lowercase letters followed by optional contractions | ||
`${rsMiscUpper}+${rsOptContrUpper}(?=${[rsBreak, rsUpper + rsMiscLower, '$'].join('|')})`, // Miscellaneous uppercase characters with optional contractions | ||
`${rsUpper}?${rsMiscLower}+${rsOptContrLower}`, // Miscellaneous lowercase sequences with optional contractions | ||
`${rsUpper}+${rsOptContrUpper}`, // All uppercase words with optional contractions (e.g., "THIS") | ||
rsOrdUpper, // Ordinals for uppercase (e.g., "1ST", "2ND") | ||
rsOrdLower, // Ordinals for lowercase (e.g., "1st", "2nd") | ||
`${rsDigit}+`, // Pure digits (e.g., "123") | ||
rsEmoji, // Emojis (e.g., 😀, ❤️) | ||
].join('|'), | ||
'g', | ||
); | ||
|
||
const reUnicodeWordsWithNumbers = RegExp( | ||
[ | ||
`${rsUpper}?${rsLower}+${rsDigit}+`, // Lowercase letters followed by digits (e.g., "abc123") | ||
`${rsUpper}+${rsDigit}+`, // Uppercase letters followed by digits (e.g., "ABC123") | ||
`${rsDigit}+${rsUpper}?${rsLower}+`, // Digits followed by lowercase letters (e.g., "123abc") | ||
`${rsDigit}+${rsUpper}+`, // Digits followed by uppercase letters (e.g., "123ABC") | ||
`${rsUpper}?${rsLower}+${rsOptContrLower}(?=${[rsBreak, rsUpper, '$'].join('|')})`, // Regular words, lowercase letters followed by optional contractions | ||
`${rsMiscUpper}+${rsOptContrUpper}(?=${[rsBreak, rsUpper + rsMiscLower, '$'].join('|')})`, // Miscellaneous uppercase characters with optional contractions | ||
`${rsUpper}?${rsMiscLower}+${rsOptContrLower}`, // Miscellaneous lowercase sequences with optional contractions | ||
`${rsUpper}+${rsOptContrUpper}`, // All uppercase words with optional contractions (e.g., "THIS") | ||
rsOrdUpper, // Ordinals for uppercase (e.g., "1ST", "2ND") | ||
rsOrdLower, // Ordinals for lowercase (e.g., "1st", "2nd") | ||
`${rsDigit}+`, // Pure digits (e.g., "123") | ||
rsEmoji, // Emojis (e.g., 😀, ❤️) | ||
].join('|'), | ||
'g', | ||
); | ||
|
||
function unicodeWords(string) { | ||
return string.match(reUnicodeWords); | ||
} | ||
|
||
function unicodeWordsWithNumbers(string) { | ||
return string.match(reUnicodeWordsWithNumbers); | ||
} | ||
|
||
export { unicodeWords, unicodeWordsWithNumbers }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,3 @@ | ||
const _ = require('lodash'); | ||
const get = require('get-value'); | ||
|
||
const v1 = require('./v1/util'); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.