@fastly/as-url
Version:
 
119 lines (108 loc) • 3.22 kB
text/typescript
// 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;
}