UNPKG

3.22 kBPlain TextView Raw
1// Copyright 2021 Fastly, Inc.
2
3/**
4 * Define our charcodes that will be used to determine if a character needs to be URL encoded
5 * See the Percent encode set in the WHatWG URL Pecent Encoding: https://url.spec.whatwg.org/#path-percent-encode-set
6 * These charcodes can be found in the man pages for ascii(7)
7 */
8export class CHARCODE {
9 static NULL: i32 = 0;
10 static TAB: i32 = 9;
11 static LINE_FEED: i32 = 10;
12 static CARRIAGE_RETURN: i32 = 13;
13 static UNIT_SEPERATOR: i32 = 31;
14 static SPACE: i32 = 32;
15 static EXCLAMATION_POINT: i32 = 33;
16 static DOUBLE_QUOTE: i32 = 34;
17 static HASHTAG: i32 = 35;
18 static PERCENT: i32 = 37;
19 static SINGLE_QUOTE: i32 = 39;
20 static ASTERISK: i32 = 42;
21 static PERIOD: i32 = 46;
22 static SLASH: i32 = 47;
23 static ZERO: i32 = 48;
24 static NINE: i32 = 57;
25 static COLON: i32 = 58;
26 static SEMI_COLON: i32 = 59;
27 static LESS_THAN: i32 = 60;
28 static EQUALS: i32 = 61;
29 static GREATER_THAN: i32 = 62;
30 static QUESTION_MARK: i32 = 63;
31 static AT_SIGN: i32 = 64;
32 static UPPERCASE_A: i32 = 65;
33 static UPPERCASE_Z: i32 = 90;
34 static LEFT_BRACKET: i32 = 91;
35 static BACKSLASH: i32 = 92;
36 static CARET: i32 = 94;
37 static GRAVE_ACCENT: i32 = 96;
38 static LOWERCASE_A: i32 = 97;
39 static LOWERCASE_Z: i32 = 122;
40 static LEFT_CURLY_BRACKET: i32 = 123;
41 static VERTICAL_BAR: i32 = 124;
42 static RIGHT_CURLY_BRACKET: i32 = 125;
43 static TILDE: i32 = 126;
44}
45
46export function isCZeroControlPercentEncodeSet(charcode: i32): boolean {
47 if (charcode <= CHARCODE.UNIT_SEPERATOR) {
48 return true;
49 } else if (charcode > CHARCODE.TILDE) {
50 return true;
51 }
52
53 return false;
54}
55
56export function isFragmentPercentEncodeSet(charcode: i32): boolean {
57 if (isCZeroControlPercentEncodeSet(charcode)) {
58 return true;
59 } else if (
60 charcode === CHARCODE.SPACE ||
61 charcode === CHARCODE.DOUBLE_QUOTE ||
62 charcode === CHARCODE.LESS_THAN ||
63 charcode === CHARCODE.GREATER_THAN ||
64 charcode === CHARCODE.GRAVE_ACCENT
65 ) {
66 return true;
67 }
68 return false;
69}
70
71export function isQueryPercentEncodeSet(charcode: i32): boolean {
72 if (isCZeroControlPercentEncodeSet(charcode)) {
73 return true;
74 } else if (
75 charcode === CHARCODE.SPACE ||
76 charcode === CHARCODE.DOUBLE_QUOTE ||
77 charcode === CHARCODE.HASHTAG ||
78 charcode === CHARCODE.LESS_THAN ||
79 charcode === CHARCODE.GREATER_THAN
80 ) {
81 return true;
82 }
83
84 return false;
85}
86
87export function isPathPercentEncodeSet(charcode: i32): boolean {
88 if (isQueryPercentEncodeSet(charcode)) {
89 return true;
90 } else if (
91 charcode === CHARCODE.QUESTION_MARK ||
92 charcode === CHARCODE.GRAVE_ACCENT ||
93 charcode === CHARCODE.LEFT_CURLY_BRACKET ||
94 charcode === CHARCODE.RIGHT_CURLY_BRACKET
95 ) {
96 return true;
97 }
98
99 return false;
100}
101
102export function isUserInfoPercentEncodeSet(charcode: i32): boolean {
103 if (isPathPercentEncodeSet(charcode)) {
104 return true;
105 } else if (
106 charcode === CHARCODE.SLASH ||
107 charcode === CHARCODE.COLON ||
108 charcode === CHARCODE.SEMI_COLON ||
109 charcode === CHARCODE.EQUALS ||
110 charcode === CHARCODE.AT_SIGN ||
111 charcode === CHARCODE.CARET ||
112 charcode === CHARCODE.VERTICAL_BAR
113 ) {
114 return true;
115 }
116
117 return false;
118}