-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken.ts
117 lines (108 loc) · 2.27 KB
/
token.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Copyright 2023-latest the httpland authors. All rights reserved. MIT license.
// This module is browser compatible.
type _Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
type UppercaseLetter =
| "A"
| "B"
| "C"
| "D"
| "E"
| "F"
| "G"
| "H"
| "I"
| "J"
| "K"
| "L"
| "M"
| "N"
| "O"
| "P"
| "Q"
| "R"
| "S"
| "T"
| "U"
| "V"
| "W"
| "X"
| "Y"
| "Z";
type LowercaseLetter = Lowercase<UppercaseLetter>;
/** Alphabet letter. */
export type Alpha = UppercaseLetter | LowercaseLetter;
/** Digit letter. */
export type Digit = `${_Digit}`;
/** [tchar](https://www.rfc-editor.org/rfc/rfc9110.html#section-5.6.2-2) letter. */
export type Tchar =
| "!"
| "#"
| "$"
| "%"
| "&"
| "'"
| "*"
| "+"
| "-"
| "."
| "^"
| "_"
| "`"
| "|"
| "~"
| Digit
| Alpha;
/**
* ```abnf
* token = 1*tchar
* ```
*/
const reToken = /^[\w!#$%&'*+.^`|~-]+$/;
/** Representation of [token](https://www.rfc-editor.org/rfc/rfc9110.html#section-5.6.2-2). */
export type Token = `${Tchar}${string}`;
/** Whether the input is [token](https://www.rfc-editor.org/rfc/rfc9110.html#section-5.6.2-2) or not.
*
* @example
* ```ts
* import { isToken } from "https://deno.land/x/http_utils@$VERSION/token.ts";
* import {
* assert,
* assertFalse,
* } from "https://deno.land/std@$VERSION/testing/asserts.ts";
*
* assert(isToken("token"));
* assert(isToken("*!~"));
* assertFalse(isToken(""));
* ```
*/
export function isToken(input: string): input is Token {
return reToken.test(input);
}
/**
* ```abnf
* tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
* / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
* / DIGIT / ALPHA
* ; any VCHAR, except delimiters
* ```
*/
const reTchar = /^[\w!#$%&'*+.^`|~-]$/;
/** Whether the input is [tchar](https://www.rfc-editor.org/rfc/rfc9110.html#section-5.6.2-2) or not.
*
* @example
* ```ts
* import { isTchar } from "https://deno.land/x/http_utils@$VERSION/token.ts";
* import {
* assert,
* assertFalse,
* } from "https://deno.land/std@$VERSION/testing/asserts.ts";
*
* assert(isTchar("!"));
* assert(isTchar("a"));
* assert(isTchar("Z"));
* assertFalse(isTchar(""));
* ```
*/
export function isTchar(input: string): input is Tchar {
return reTchar.test(input);
}