@johntalton/http-util 5.1.2 → 5.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johntalton/http-util",
3
- "version": "5.1.2",
3
+ "version": "5.1.5",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -0,0 +1,169 @@
1
+ export const SEC_FETCH_MODE_NAVIGATE = 'navigate'
2
+ export const SEC_FETCH_MODE_NO_CORS = 'no-cors'
3
+ export const SEC_FETCH_MODE_CORS = 'cors'
4
+ export const SEC_FETCH_MODE_SAME_ORIGIN = 'same-origin'
5
+ export const SEC_FETCH_MODE_WEBSOCKET = 'websocket'
6
+ export const SEC_FETCH_MODE_WEBTRANSPORT = 'webtransport'
7
+ export const KNOWN_SEC_FETCH_MODES = [
8
+ SEC_FETCH_MODE_NAVIGATE,
9
+ SEC_FETCH_MODE_NO_CORS,
10
+ SEC_FETCH_MODE_CORS,
11
+ SEC_FETCH_MODE_SAME_ORIGIN,
12
+ SEC_FETCH_MODE_WEBSOCKET,
13
+ SEC_FETCH_MODE_WEBTRANSPORT
14
+ ]
15
+
16
+ /**
17
+ * @typedef {SEC_FETCH_MODE_NAVIGATE|SEC_FETCH_MODE_NO_CORS|SEC_FETCH_MODE_CORS|SEC_FETCH_MODE_SAME_ORIGIN|SEC_FETCH_MODE_WEBSOCKET|SEC_FETCH_MODE_WEBTRANSPORT} SecFetchMode
18
+ */
19
+
20
+ export const SEC_FETCH_SITE_SAME_ORIGIN = 'same-origin'
21
+ export const SEC_FETCH_SITE_SAME_SITE = 'same-site'
22
+ export const SEC_FETCH_SITE_CROSS_SITE = 'cross-site'
23
+ export const SEC_FETCH_SITE_NONE = 'none'
24
+
25
+ export const KNOWN_SEC_FETCH_SITE = [
26
+ SEC_FETCH_SITE_SAME_ORIGIN,
27
+ SEC_FETCH_SITE_SAME_SITE,
28
+ SEC_FETCH_SITE_CROSS_SITE,
29
+ SEC_FETCH_SITE_NONE
30
+ ]
31
+
32
+ /** @typedef {SEC_FETCH_SITE_SAME_ORIGIN|SEC_FETCH_SITE_SAME_SITE|SEC_FETCH_SITE_CROSS_SITE|SEC_FETCH_SITE_NONE} SecFetchSite */
33
+
34
+ export const SEC_FETCH_DEST_AUDIO = 'audio'
35
+ export const SEC_FETCH_DEST_AUDIO_WORKLET = 'audioworklet'
36
+ export const SEC_FETCH_DEST_DOCUMENT = 'document'
37
+ export const SEC_FETCH_DEST_EMBED = 'embed'
38
+ export const SEC_FETCH_DEST_FONT = 'font'
39
+ export const SEC_FETCH_DEST_FRAME = 'frame'
40
+ export const SEC_FETCH_DEST_IFRAME = 'iframe'
41
+ export const SEC_FETCH_DEST_IMAGE = 'image'
42
+ export const SEC_FETCH_DEST_JSON = 'json'
43
+ export const SEC_FETCH_DEST_MANIFEST = 'manifest'
44
+ export const SEC_FETCH_DEST_OBJECT = 'object'
45
+ export const SEC_FETCH_DEST_PAINT_WORKLET = 'paintworklet'
46
+ export const SEC_FETCH_DEST_REPORT = 'report'
47
+ export const SEC_FETCH_DEST_SCRIPT = 'script'
48
+ export const SEC_FETCH_DEST_SERVICE_WORKER = 'serviceworker'
49
+ export const SEC_FETCH_DEST_SHARED_WORKER = 'sharedworker'
50
+ export const SEC_FETCH_DEST_STYLE = 'style'
51
+ export const SEC_FETCH_DEST_TEXT = 'text'
52
+ export const SEC_FETCH_DEST_TRACK = 'track'
53
+ export const SEC_FETCH_DEST_VIDEO = 'video'
54
+ export const SEC_FETCH_DEST_WEB_IDENTITY = 'webidentity'
55
+ export const SEC_FETCH_DEST_WORKER = 'worker'
56
+ export const SEC_FETCH_DEST_XSLT = 'xslt'
57
+
58
+
59
+ export const SEC_FETCH_DEST_EMPTY = 'empty'
60
+
61
+ export const KNOWN_SEC_FETCH_DEST = [
62
+ SEC_FETCH_DEST_AUDIO,
63
+ SEC_FETCH_DEST_AUDIO_WORKLET,
64
+ SEC_FETCH_DEST_DOCUMENT,
65
+ SEC_FETCH_DEST_EMBED,
66
+ SEC_FETCH_DEST_FONT,
67
+ SEC_FETCH_DEST_FRAME,
68
+ SEC_FETCH_DEST_IFRAME,
69
+ SEC_FETCH_DEST_IMAGE,
70
+ SEC_FETCH_DEST_JSON,
71
+ SEC_FETCH_DEST_MANIFEST,
72
+ SEC_FETCH_DEST_OBJECT,
73
+ SEC_FETCH_DEST_PAINT_WORKLET,
74
+ SEC_FETCH_DEST_REPORT,
75
+ SEC_FETCH_DEST_SCRIPT,
76
+ SEC_FETCH_DEST_SERVICE_WORKER,
77
+ SEC_FETCH_DEST_SHARED_WORKER,
78
+ SEC_FETCH_DEST_STYLE,
79
+ SEC_FETCH_DEST_TEXT,
80
+ SEC_FETCH_DEST_TRACK,
81
+ SEC_FETCH_DEST_VIDEO,
82
+ SEC_FETCH_DEST_WEB_IDENTITY,
83
+ SEC_FETCH_DEST_WORKER,
84
+ SEC_FETCH_DEST_XSLT,
85
+ SEC_FETCH_DEST_EMPTY
86
+ ]
87
+
88
+ /** @typedef {
89
+ SEC_FETCH_DEST_AUDIO|
90
+ SEC_FETCH_DEST_AUDIO_WORKLET|
91
+ SEC_FETCH_DEST_DOCUMENT|
92
+ SEC_FETCH_DEST_EMBED|
93
+ SEC_FETCH_DEST_FONT|
94
+ SEC_FETCH_DEST_FRAME|
95
+ SEC_FETCH_DEST_IFRAME|
96
+ SEC_FETCH_DEST_IMAGE|
97
+ SEC_FETCH_DEST_JSON|
98
+ SEC_FETCH_DEST_MANIFEST|
99
+ SEC_FETCH_DEST_OBJECT|
100
+ SEC_FETCH_DEST_PAINT_WORKLET|
101
+ SEC_FETCH_DEST_REPORT|
102
+ SEC_FETCH_DEST_SCRIPT|
103
+ SEC_FETCH_DEST_SERVICE_WORKER|
104
+ SEC_FETCH_DEST_SHARED_WORKER|
105
+ SEC_FETCH_DEST_STYLE|
106
+ SEC_FETCH_DEST_TEXT|
107
+ SEC_FETCH_DEST_TRACK|
108
+ SEC_FETCH_DEST_VIDEO|
109
+ SEC_FETCH_DEST_WEB_IDENTITY|
110
+ SEC_FETCH_DEST_WORKER|
111
+ SEC_FETCH_DEST_XSLT|
112
+ SEC_FETCH_DEST_EMPTY
113
+ } SecFetchDest */
114
+
115
+ export class SecFetch {
116
+ /**
117
+ * @param {string|undefined} header
118
+ * @returns {header is SecFetchSite}
119
+ */
120
+ static #isSite(header) {
121
+ if(header === undefined) { return false }
122
+ return KNOWN_SEC_FETCH_SITE.includes(header)
123
+ }
124
+
125
+ /**
126
+ * @param {string|undefined} header
127
+ * @returns {SecFetchSite|undefined}
128
+ */
129
+ static parseSite(header) {
130
+ if(!SecFetch.#isSite(header)) { return undefined }
131
+ return header
132
+ }
133
+
134
+ /**
135
+ * @param {string|undefined} header
136
+ * @returns {header is SecFetchMode}
137
+ */
138
+ static #isMode(header) {
139
+ if(header === undefined) { return false }
140
+ return KNOWN_SEC_FETCH_MODES.includes(header)
141
+ }
142
+
143
+ /**
144
+ * @param {string|undefined} header
145
+ * @returns {SecFetchMode|undefined}
146
+ */
147
+ static parseMode(header) {
148
+ if(!SecFetch.#isMode(header)) { return undefined }
149
+ return header
150
+ }
151
+
152
+ /**
153
+ * @param {string|undefined} header
154
+ * @return {header is SecFetchDest}
155
+ */
156
+ static #isDest(header) {
157
+ if(header === undefined) { return false }
158
+ return KNOWN_SEC_FETCH_DEST.includes(header)
159
+ }
160
+
161
+ /**
162
+ * @param {string|undefined} header
163
+ * @returns {SecFetchDest|undefined}
164
+ */
165
+ static parseDestination(header) {
166
+ if(!SecFetch.#isDest(header)) { return undefined }
167
+ return header
168
+ }
169
+ }
package/src/link.js ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @typedef {Object} LinkItem
3
+ * @property {string} url
4
+ * @property {string|undefined} [relation]
5
+ * @property {Map<string, string>|undefined} [parameters]
6
+ */
7
+
8
+ export class Link {
9
+ /**
10
+ * @param {LinkItem} link
11
+ */
12
+ static *#encode(link) {
13
+ const encodedUri = encodeURI(link.url)
14
+
15
+ yield `<${encodedUri}>`
16
+ if(link.relation !== undefined) { yield `rel="${link.relation}"` }
17
+ if(link.parameters === undefined) { return }
18
+ for(const [ key, value ] of link.parameters) {
19
+ yield `${key}="${value}"`
20
+ }
21
+ }
22
+
23
+
24
+ /**
25
+ * @param {LinkItem} link
26
+ */
27
+ static encode(link) {
28
+ return [ ...Link.#encode(link) ].join('; ')
29
+ }
30
+ }
31
+
32
+ // console.log(Link.encode({ url: '/index.html', parameters: new Map([ [ 'as', 'style' ], [ 'fetchpriority', 'high' ] ]) }))
33
+ // console.log(Link.encode({ url: '/index.html', relation: 'next', parameters: new Map([ [ 'fetchpriority', 'high' ] ]) }))
34
+ // console.log(Link.encode({ url: '/index.html', relation: 'next' }))
35
+ // console.log(Link.encode({ url: 'https://example.com/苗条', relation: 'preconnect' }))
package/src/rate-limit.js CHANGED
@@ -16,9 +16,9 @@ export const HTTP_HEADER_RATE_LIMIT_POLICY = 'RateLimit-Policy'
16
16
  * @property {string} name
17
17
  * @property {number} quota
18
18
  * @property {number} size
19
- * @property {number} quotaUnits
19
+ * @property {string} quotaUnits
20
20
  * @property {number} windowSeconds
21
- * @property {string} [partitionKey]
21
+ * @property {string|undefined} [partitionKey]
22
22
  */
23
23
 
24
24
  export const LIMIT_PARAMETERS = {
@@ -37,7 +37,7 @@ export const RANGE_UNITS_NONE = 'none'
37
37
  * @property {Array<TimingsInfo>} performance
38
38
  * @property {string|undefined} servername
39
39
  * @property {string|undefined} origin
40
- * @property {Array<[ CustomHeaderKey, string ]>} customHeaders
40
+ * @property {Array<[ CustomHeaderKey, string ]>|undefined} [customHeaders]
41
41
  */
42
42
 
43
43
  /**