UNPKG

@sap/odata-v4

Version:

OData V4.0 server library

157 lines (147 loc) 8.84 kB
'use strict'; const MIN_SUPPLEMENTARY_CODE_POINT = 0x10000; const MAX_CODE_POINT = 0x10FFFF; const CODE_POINT_DIGIT_ZERO = 0x0030; const CODE_POINT_DIGIT_NINE = 0x0039; const CODE_POINT_LATIN_CAPITAL_LETTER_A = 0x0041; const CODE_POINT_LATIN_CAPITAL_LETTER_Z = 0x005A; const CODE_POINT_LOW_LINE = 0x005F; const CODE_POINT_LATIN_SMALL_LETTER_A = 0x0061; const CODE_POINT_LATIN_SMALL_LETTER_Z = 0x007A; const CODE_POINT_LATIN_CAPITAL_LETTER_A_WITH_GRAVE = 0x00C0; const CODE_POINT_LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS = 0x00D6; const CODE_POINT_LATIN_CAPITAL_LETTER_O_WITH_STROKE = 0x00D8; const CODE_POINT_LATIN_SMALL_LETTER_O_WITH_DIAERESIS = 0x00F6; const CODE_POINT_LATIN_SMALL_LETTER_O_WITH_STROKE = 0x00F8; const CODE_POINT_MODIFIER_LETTER_REVERSED_GLOTTAL_STOP = 0x02C1; const CODE_POINT_GREEK_CAPITAL_LETTER_EPSILON_WITH_TONOS = 0x0388; const CODE_POINT_GREEK_LUNATE_EPSILON_SYMBOL = 0x03F5; const CODE_POINT_GREEK_CAPITAL_LETTER_SHO = 0x03F7; const CODE_POINT_CYRILLIC_SMALL_LETTER_KOPPA = 0x0481; const CODE_POINT_CYRILLIC_CAPITAL_LETTER_SHORT_I_WITH_TAIL = 0x048A; const CODE_POINT_CYRILLIC_SMALL_LETTER_EL_WITH_DESCENDER = 0x052F; const CODE_POINT_HEBREW_LETTER_ALEF = 0x05D0; const CODE_POINT_HEBREW_LIGATURE_YIDDISH_DOUBLE_YOD = 0x05F2; const CODE_POINT_ARABIC_LETTER_KASHMIRI_YEH = 0x0620; const CODE_POINT_ARABIC_LETTER_YEH = 0x064A; const CODE_POINT_ARABIC_INDIC_DIGIT_ZERO = 0x0660; const CODE_POINT_ARABIC_INDIC_DIGIT_NINE = 0x0669; const CODE_POINT_ARABIC_LETTER_ALEF_WASLA = 0x0671; const CODE_POINT_ARABIC_LETTER_YEH_BARREE_WITH_HAMZA_ABOVE = 0x06D3; const CODE_POINT_THAI_CHARACTER_KO_KAI = 0x0E01; const CODE_POINT_THAI_CHARACTER_SARA_A = 0x0E30; const CODE_POINT_THAI_DIGIT_ZERO = 0x0E50; const CODE_POINT_THAI_DIGIT_NINE = 0x0E59; const CODE_POINT_LATIN_CAPITAL_LETTER_A_WITH_RING_BELOW = 0x1E00; const CODE_POINT_GREEK_CAPITAL_LETTER_ALPHA_WITH_PROSGEGRAMMENI = 0x1FBC; const CODE_POINT_GREEK_SMALL_LETTER_ETA_WITH_VARIA_AND_YPOGEGRAMMENI = 0x1FC2; const CODE_POINT_GREEK_CAPITAL_LETTER_ETA_WITH_PROSGEGRAMMENI = 0x1FCC; const CODE_POINT_GREEK_SMALL_LETTER_IOTA_WITH_VRACHY = 0x1FD0; const CODE_POINT_GREEK_CAPITAL_LETTER_IOTA_WITH_OXIA = 0x1FDB; const CODE_POINT_GREEK_SMALL_LETTER_UPSILON_WITH_VRACHY = 0x1FE0; const CODE_POINT_GREEK_CAPITAL_LETTER_RHO_WITH_DASIA = 0x1FEC; const CODE_POINT_GREEK_SMALL_LETTER_OMEGA_WITH_VARIA_AND_YPOGEGRAMMENI = 0x1FF2; const CODE_POINT_GREEK_CAPITAL_LETTER_OMEGA_WITH_PROSGEGRAMMENI = 0x1FFC; const CODE_POINT_HIRAGANA_LETTER_SMALL_A = 0x3041; const CODE_POINT_HIRAGANA_LETTER_SMALL_KE = 0x3096; const CODE_POINT_KATAKANA_LETTER_SMALL_A = 0x30A1; const CODE_POINT_KATAKANA_LETTER_VO = 0x30FA; const CODE_POINT_CJK_IDEOGRAPH_EXTENSION_A_FIRST = 0x3400; const CODE_POINT_CJK_IDEOGRAPH_EXTENSION_A_LAST = 0x4DB5; const CODE_POINT_CJK_IDEOGRAPH_FIRST = 0x4E00; const CODE_POINT_CJK_IDEOGRAPH_LAST = 0x9FEF; const CODE_POINT_HANGUL_SYLLABLE_FIRST = 0xAC00; const CODE_POINT_HANGUL_SYLLABLE_LAST = 0xD7A3; /** * Character utils for JavaScript */ class Character { /** * Determines whether the specified character (Unicode code point) is in the supplementary character range. * See https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#isSupplementaryCodePoint(int) * See http://www.2ality.com/2013/09/javascript-unicode.html * @param {number} codePoint The code point to test * @returns {boolean} Return true if the codepoint is a supplementary codePoint, else false */ static isSupplementaryCodePoint(codePoint) { return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT && codePoint <= MAX_CODE_POINT; } /** * Return true if the provided code point is a valid Unicode identifier start character. * @param {number} codePoint the code point * @returns {boolean} true if the codepoint is a valid Unicode identifier start character, else false */ static isUnicodeIdentifierStart(codePoint) { // Because we do not have access to Unicode character classes, // we use a subset of the allowed characters. // See also OData v4.0 part3 CSDL specification, section 17.2. return Character.isLetter(codePoint); } /** * Return true if the provided code point is a valid Unicode identifier character. * @param {number} codePoint the code point * @returns {boolean} true if the codepoint is a valid Unicode identifier character, else false */ static isUnicodeIdentifierPart(codePoint) { // Because we do not have access to Unicode character classes, // we use a subset of the allowed characters. // See also OData v4.0 part3 CSDL specification, section 17.2. return Character.isLetter(codePoint) || codePoint === CODE_POINT_LOW_LINE || Character.isDigit(codePoint); } /** * Return true if the provided code point is a valid Unicode letter character. * Currently only letters deemed important enough are supported. * @param {number} codePoint the code point * @returns {boolean} true if the codepoint is a valid Unicode letter character, else false */ static isLetter(codePoint) { return codePoint >= CODE_POINT_LATIN_CAPITAL_LETTER_A && codePoint <= CODE_POINT_LATIN_CAPITAL_LETTER_Z || codePoint >= CODE_POINT_LATIN_SMALL_LETTER_A && codePoint <= CODE_POINT_LATIN_SMALL_LETTER_Z || codePoint >= CODE_POINT_LATIN_CAPITAL_LETTER_A_WITH_GRAVE && codePoint <= CODE_POINT_LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS || codePoint >= CODE_POINT_LATIN_CAPITAL_LETTER_O_WITH_STROKE && codePoint <= CODE_POINT_LATIN_SMALL_LETTER_O_WITH_DIAERESIS || codePoint >= CODE_POINT_LATIN_SMALL_LETTER_O_WITH_STROKE && codePoint <= CODE_POINT_MODIFIER_LETTER_REVERSED_GLOTTAL_STOP || codePoint >= CODE_POINT_GREEK_CAPITAL_LETTER_EPSILON_WITH_TONOS && codePoint <= CODE_POINT_GREEK_LUNATE_EPSILON_SYMBOL || codePoint >= CODE_POINT_GREEK_CAPITAL_LETTER_SHO && codePoint <= CODE_POINT_CYRILLIC_SMALL_LETTER_KOPPA || codePoint >= CODE_POINT_CYRILLIC_CAPITAL_LETTER_SHORT_I_WITH_TAIL && codePoint <= CODE_POINT_CYRILLIC_SMALL_LETTER_EL_WITH_DESCENDER || codePoint >= CODE_POINT_HEBREW_LETTER_ALEF && codePoint <= CODE_POINT_HEBREW_LIGATURE_YIDDISH_DOUBLE_YOD || codePoint >= CODE_POINT_ARABIC_LETTER_KASHMIRI_YEH && codePoint <= CODE_POINT_ARABIC_LETTER_YEH || codePoint >= CODE_POINT_ARABIC_LETTER_ALEF_WASLA && codePoint <= CODE_POINT_ARABIC_LETTER_YEH_BARREE_WITH_HAMZA_ABOVE || codePoint >= CODE_POINT_THAI_CHARACTER_KO_KAI && codePoint <= CODE_POINT_THAI_CHARACTER_SARA_A || codePoint >= CODE_POINT_LATIN_CAPITAL_LETTER_A_WITH_RING_BELOW && codePoint <= CODE_POINT_GREEK_CAPITAL_LETTER_ALPHA_WITH_PROSGEGRAMMENI || codePoint >= CODE_POINT_GREEK_SMALL_LETTER_ETA_WITH_VARIA_AND_YPOGEGRAMMENI && codePoint <= CODE_POINT_GREEK_CAPITAL_LETTER_ETA_WITH_PROSGEGRAMMENI || codePoint >= CODE_POINT_GREEK_SMALL_LETTER_IOTA_WITH_VRACHY && codePoint <= CODE_POINT_GREEK_CAPITAL_LETTER_IOTA_WITH_OXIA || codePoint >= CODE_POINT_GREEK_SMALL_LETTER_UPSILON_WITH_VRACHY && codePoint <= CODE_POINT_GREEK_CAPITAL_LETTER_RHO_WITH_DASIA || codePoint >= CODE_POINT_GREEK_SMALL_LETTER_OMEGA_WITH_VARIA_AND_YPOGEGRAMMENI && codePoint <= CODE_POINT_GREEK_CAPITAL_LETTER_OMEGA_WITH_PROSGEGRAMMENI || codePoint >= CODE_POINT_HIRAGANA_LETTER_SMALL_A && codePoint <= CODE_POINT_HIRAGANA_LETTER_SMALL_KE || codePoint >= CODE_POINT_KATAKANA_LETTER_SMALL_A && codePoint <= CODE_POINT_KATAKANA_LETTER_VO || codePoint >= CODE_POINT_CJK_IDEOGRAPH_EXTENSION_A_FIRST && codePoint <= CODE_POINT_CJK_IDEOGRAPH_EXTENSION_A_LAST || codePoint >= CODE_POINT_CJK_IDEOGRAPH_FIRST && codePoint <= CODE_POINT_CJK_IDEOGRAPH_LAST || codePoint >= CODE_POINT_HANGUL_SYLLABLE_FIRST && codePoint <= CODE_POINT_HANGUL_SYLLABLE_LAST; } /** * Return true if the provided code point is a valid Unicode digit character. * Currently only digits deemed important enough are supported. * @param {number} codePoint the code point * @returns {boolean} true if the codepoint is a valid Unicode digit character, else false */ static isDigit(codePoint) { return codePoint >= CODE_POINT_DIGIT_ZERO && codePoint <= CODE_POINT_DIGIT_NINE || codePoint >= CODE_POINT_ARABIC_INDIC_DIGIT_ZERO && codePoint <= CODE_POINT_ARABIC_INDIC_DIGIT_NINE || codePoint >= CODE_POINT_THAI_DIGIT_ZERO && codePoint <= CODE_POINT_THAI_DIGIT_NINE; } } module.exports = Character;