// Copyright 2021 Fastly, Inc. /** * Define our charcodes that will be used to determine if a character needs to be URL encoded * See the Percent encode set in the WHatWG URL Pecent Encoding: https://url.spec.whatwg.org/#path-percent-encode-set * These charcodes can be found in the man pages for ascii(7) */ export class CHARCODE { static NULL: i32 = 0; static TAB: i32 = 9; static LINE_FEED: i32 = 10; static CARRIAGE_RETURN: i32 = 13; static UNIT_SEPERATOR: i32 = 31; static SPACE: i32 = 32; static EXCLAMATION_POINT: i32 = 33; static DOUBLE_QUOTE: i32 = 34; static HASHTAG: i32 = 35; static PERCENT: i32 = 37; static SINGLE_QUOTE: i32 = 39; static ASTERISK: i32 = 42; static PERIOD: i32 = 46; static SLASH: i32 = 47; static ZERO: i32 = 48; static NINE: i32 = 57; static COLON: i32 = 58; static SEMI_COLON: i32 = 59; static LESS_THAN: i32 = 60; static EQUALS: i32 = 61; static GREATER_THAN: i32 = 62; static QUESTION_MARK: i32 = 63; static AT_SIGN: i32 = 64; static UPPERCASE_A: i32 = 65; static UPPERCASE_Z: i32 = 90; static LEFT_BRACKET: i32 = 91; static BACKSLASH: i32 = 92; static CARET: i32 = 94; static GRAVE_ACCENT: i32 = 96; static LOWERCASE_A: i32 = 97; static LOWERCASE_Z: i32 = 122; static LEFT_CURLY_BRACKET: i32 = 123; static VERTICAL_BAR: i32 = 124; static RIGHT_CURLY_BRACKET: i32 = 125; static TILDE: i32 = 126; } export function isCZeroControlPercentEncodeSet(charcode: i32): boolean { if (charcode <= CHARCODE.UNIT_SEPERATOR) { return true; } else if (charcode > CHARCODE.TILDE) { return true; } return false; } export function isFragmentPercentEncodeSet(charcode: i32): boolean { if (isCZeroControlPercentEncodeSet(charcode)) { return true; } else if ( charcode === CHARCODE.SPACE || charcode === CHARCODE.DOUBLE_QUOTE || charcode === CHARCODE.LESS_THAN || charcode === CHARCODE.GREATER_THAN || charcode === CHARCODE.GRAVE_ACCENT ) { return true; } return false; } export function isQueryPercentEncodeSet(charcode: i32): boolean { if (isCZeroControlPercentEncodeSet(charcode)) { return true; } else if ( charcode === CHARCODE.SPACE || charcode === CHARCODE.DOUBLE_QUOTE || charcode === CHARCODE.HASHTAG || charcode === CHARCODE.LESS_THAN || charcode === CHARCODE.GREATER_THAN ) { return true; } return false; } export function isPathPercentEncodeSet(charcode: i32): boolean { if (isQueryPercentEncodeSet(charcode)) { return true; } else if ( charcode === CHARCODE.QUESTION_MARK || charcode === CHARCODE.GRAVE_ACCENT || charcode === CHARCODE.LEFT_CURLY_BRACKET || charcode === CHARCODE.RIGHT_CURLY_BRACKET ) { return true; } return false; } export function isUserInfoPercentEncodeSet(charcode: i32): boolean { if (isPathPercentEncodeSet(charcode)) { return true; } else if ( charcode === CHARCODE.SLASH || charcode === CHARCODE.COLON || charcode === CHARCODE.SEMI_COLON || charcode === CHARCODE.EQUALS || charcode === CHARCODE.AT_SIGN || charcode === CHARCODE.CARET || charcode === CHARCODE.VERTICAL_BAR ) { return true; } return false; }