"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.codeZero = exports.codeUppercaseF = exports.codeUppercaseE = exports.codeUppercaseA = exports.codeTab = exports.codeSpace = exports.codeSlash = exports.codeSemicolon = exports.codeReturn = exports.codeQuote = exports.codePlus = exports.codeOpeningBracket = exports.codeOpeningBrace = exports.codeOpenParenthesis = exports.codeOne = exports.codeNine = exports.codeNewline = exports.codeMinus = exports.codeLowercaseF = exports.codeLowercaseE = exports.codeLowercaseA = exports.codeFormFeed = exports.codeDoubleQuote = exports.codeDot = exports.codeComma = exports.codeColon = exports.codeClosingBracket = exports.codeClosingBrace = exports.codeCloseParenthesis = exports.codeBackspace = exports.codeBackslash = exports.codeAsterisk = void 0; exports.endsWithCommaOrNewline = endsWithCommaOrNewline; exports.insertBeforeLastWhitespace = insertBeforeLastWhitespace; exports.isControlCharacter = isControlCharacter; exports.isDelimiter = isDelimiter; exports.isDigit = isDigit; exports.isDoubleQuote = isDoubleQuote; exports.isDoubleQuoteLike = isDoubleQuoteLike; exports.isHex = isHex; exports.isNonZeroDigit = isNonZeroDigit; exports.isQuote = isQuote; exports.isSingleQuoteLike = isSingleQuoteLike; exports.isSpecialWhitespace = isSpecialWhitespace; exports.isStartOfValue = isStartOfValue; exports.isValidStringCharacter = isValidStringCharacter; exports.isWhitespace = isWhitespace; exports.removeAtIndex = removeAtIndex; exports.stripLastOccurrence = stripLastOccurrence; // TODO: sort the codes var codeBackslash = 0x5c; // "\" exports.codeBackslash = codeBackslash; var codeSlash = 0x2f; // "/" exports.codeSlash = codeSlash; var codeAsterisk = 0x2a; // "*" exports.codeAsterisk = codeAsterisk; var codeOpeningBrace = 0x7b; // "{" exports.codeOpeningBrace = codeOpeningBrace; var codeClosingBrace = 0x7d; // "}" exports.codeClosingBrace = codeClosingBrace; var codeOpeningBracket = 0x5b; // "[" exports.codeOpeningBracket = codeOpeningBracket; var codeClosingBracket = 0x5d; // "]" exports.codeClosingBracket = codeClosingBracket; var codeOpenParenthesis = 0x28; // "(" exports.codeOpenParenthesis = codeOpenParenthesis; var codeCloseParenthesis = 0x29; // ")" exports.codeCloseParenthesis = codeCloseParenthesis; var codeSpace = 0x20; // " " exports.codeSpace = codeSpace; var codeNewline = 0xa; // "\n" exports.codeNewline = codeNewline; var codeTab = 0x9; // "\t" exports.codeTab = codeTab; var codeReturn = 0xd; // "\r" exports.codeReturn = codeReturn; var codeBackspace = 0x08; // "\b" exports.codeBackspace = codeBackspace; var codeFormFeed = 0x0c; // "\f" exports.codeFormFeed = codeFormFeed; var codeDoubleQuote = 0x0022; // " exports.codeDoubleQuote = codeDoubleQuote; var codePlus = 0x2b; // "+" exports.codePlus = codePlus; var codeMinus = 0x2d; // "-" exports.codeMinus = codeMinus; var codeQuote = 0x27; // "'" exports.codeQuote = codeQuote; var codeZero = 0x30; exports.codeZero = codeZero; var codeOne = 0x31; exports.codeOne = codeOne; var codeNine = 0x39; exports.codeNine = codeNine; var codeComma = 0x2c; // "," exports.codeComma = codeComma; var codeDot = 0x2e; // "." (dot, period) exports.codeDot = codeDot; var codeColon = 0x3a; // ":" exports.codeColon = codeColon; var codeSemicolon = 0x3b; // ";" exports.codeSemicolon = codeSemicolon; var codeUppercaseA = 0x41; // "A" exports.codeUppercaseA = codeUppercaseA; var codeLowercaseA = 0x61; // "a" exports.codeLowercaseA = codeLowercaseA; var codeUppercaseE = 0x45; // "E" exports.codeUppercaseE = codeUppercaseE; var codeLowercaseE = 0x65; // "e" exports.codeLowercaseE = codeLowercaseE; var codeUppercaseF = 0x46; // "F" exports.codeUppercaseF = codeUppercaseF; var codeLowercaseF = 0x66; // "f" exports.codeLowercaseF = codeLowercaseF; var codeNonBreakingSpace = 0xa0; var codeEnQuad = 0x2000; var codeHairSpace = 0x200a; var codeNarrowNoBreakSpace = 0x202f; var codeMediumMathematicalSpace = 0x205f; var codeIdeographicSpace = 0x3000; var codeDoubleQuoteLeft = 0x201c; // “ var codeDoubleQuoteRight = 0x201d; // ” var codeQuoteLeft = 0x2018; // ‘ var codeQuoteRight = 0x2019; // ’ var codeGraveAccent = 0x0060; // ` var codeAcuteAccent = 0x00b4; // ´ function isHex(code) { return code >= codeZero && code <= codeNine || code >= codeUppercaseA && code <= codeUppercaseF || code >= codeLowercaseA && code <= codeLowercaseF; } function isDigit(code) { return code >= codeZero && code <= codeNine; } function isNonZeroDigit(code) { return code >= codeOne && code <= codeNine; } function isValidStringCharacter(code) { return code >= 0x20 && code <= 0x10ffff; } function isDelimiter(char) { return regexDelimiter.test(char) || char && isQuote(char.charCodeAt(0)); } var regexDelimiter = /^[,:[\]{}()\n]$/; function isStartOfValue(char) { return regexStartOfValue.test(char) || char && isQuote(char.charCodeAt(0)); } // alpha, number, minus, or opening bracket or brace var regexStartOfValue = /^[[{\w-]$/; function isControlCharacter(code) { return code === codeNewline || code === codeReturn || code === codeTab || code === codeBackspace || code === codeFormFeed; } /** * Check if the given character is a whitespace character like space, tab, or * newline */ function isWhitespace(code) { return code === codeSpace || code === codeNewline || code === codeTab || code === codeReturn; } /** * Check if the given character is a special whitespace character, some * unicode variant */ function isSpecialWhitespace(code) { return code === codeNonBreakingSpace || code >= codeEnQuad && code <= codeHairSpace || code === codeNarrowNoBreakSpace || code === codeMediumMathematicalSpace || code === codeIdeographicSpace; } /** * Test whether the given character is a quote or double quote character. * Also tests for special variants of quotes. */ function isQuote(code) { // the first check double quotes, since that occurs most often return isDoubleQuoteLike(code) || isSingleQuoteLike(code); } /** * Test whether the given character is a double quote character. * Also tests for special variants of double quotes. */ function isDoubleQuoteLike(code) { // the first check double quotes, since that occurs most often return code === codeDoubleQuote || code === codeDoubleQuoteLeft || code === codeDoubleQuoteRight; } /** * Test whether the given character is a double quote character. * Does NOT test for special variants of double quotes. */ function isDoubleQuote(code) { return code === codeDoubleQuote; } /** * Test whether the given character is a single quote character. * Also tests for special variants of single quotes. */ function isSingleQuoteLike(code) { return code === codeQuote || code === codeQuoteLeft || code === codeQuoteRight || code === codeGraveAccent || code === codeAcuteAccent; } /** * Strip last occurrence of textToStrip from text */ function stripLastOccurrence(text, textToStrip) { var stripRemainingText = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var index = text.lastIndexOf(textToStrip); return index !== -1 ? text.substring(0, index) + (stripRemainingText ? '' : text.substring(index + 1)) : text; } function insertBeforeLastWhitespace(text, textToInsert) { var index = text.length; if (!isWhitespace(text.charCodeAt(index - 1))) { // no trailing whitespaces return text + textToInsert; } while (isWhitespace(text.charCodeAt(index - 1))) { index--; } return text.substring(0, index) + textToInsert + text.substring(index); } function removeAtIndex(text, start, count) { return text.substring(0, start) + text.substring(start + count); } /** * Test whether a string ends with a newline or comma character and optional whitespace */ function endsWithCommaOrNewline(text) { return /[,\n][ \t\r]*$/.test(text); } //# sourceMappingURL=stringUtils.js.map