-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmod.ts
58 lines (47 loc) · 1.57 KB
/
mod.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
/*!
* Based on https://github.com/jshttp/negotiator/blob/master/index.js
* Copyright(c) 2012 Federico Romero
* Copyright(c) 2012-2014 Isaac Z. Schlueter
* Copyright(c) 2015 Douglas Christopher Wilson
* Copyright(c) 2020 Henry Zhuang
* MIT Licensed
*/
import { preferredCharsets } from "./src/charset.ts";
import { preferredEncodings } from "./src/encoding.ts";
import { preferredLanguages } from "./src/language.ts";
import { preferredMediaTypes } from "./src/media_type.ts";
class Negotiator {
constructor(headers: Headers) {
this.headers = headers;
}
private headers: Headers;
charset(available?: string[]): string {
const set = this.charsets(available);
return set && set[0];
}
charsets(available?: string[]): string[] {
return preferredCharsets(this.headers.get("accept-charset"), available);
}
encoding(available?: string[]): string {
const set = this.encodings(available);
return set && set[0];
}
encodings(available?: string[]): string[] {
return preferredEncodings(this.headers.get("accept-encoding"), available);
}
language(available?: string[]): string {
const set = this.languages(available);
return set && set[0];
}
languages(available?: string[]): string[] {
return preferredLanguages(this.headers.get("accept-language"), available);
}
mediaType(available?: string[]): string {
const set = this.mediaTypes(available);
return set && set[0];
}
mediaTypes(available?: string[]): string[] {
return preferredMediaTypes(this.headers.get("accept"), available);
}
}
export default Negotiator;