-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserializer.js
36 lines (34 loc) · 978 Bytes
/
serializer.js
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
/**
* convert parser result into csp string
* @param {import("./types").CSPParserResult} csp
* @return {string}
*/
export function serialize(csp) {
return Object.entries(csp)
.map(([directive, rules]) => `${directive} ${encodeRules(rules)}`)
.join("; ");
}
/**
*
* @param {import("./types").Source[]} rules
*/
function encodeRules(rules) {
return rules
.map((rule) => {
switch (rule.type) {
case "keyword":
return `'${rule.value}'`;
case "nonce":
return `nonce-${rule.value}`;
case "hash":
return `'${rule.algorithm}-${rule.value}'`;
case "host":
return rule.value;
case "scheme":
return `${rule.value}:`;
default:
throw new Error("Unknown rule type found!");
}
})
.join(" ");
}