summaryrefslogtreecommitdiff
path: root/src/lib/ContentMetaData.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/ContentMetaData.js')
-rw-r--r--src/lib/ContentMetaData.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/ContentMetaData.js b/src/lib/ContentMetaData.js
new file mode 100644
index 0000000..c60d75e
--- /dev/null
+++ b/src/lib/ContentMetaData.js
@@ -0,0 +1,30 @@
+class ContentMetaData {
+ constructor(request, defaultCharset = "utf-8") {
+ this.defaultCharset = defaultCharset;
+ let {responseHeaders} = request;
+ for (let h of responseHeaders) {
+ if (/^\s*Content-(Type|Disposition)\s*$/i.test(h.name)) {
+ this[h.name.split("-")[1].trim().toLowerCase()] = h.value;
+ }
+ }
+ }
+
+ get charset() {
+ let charset = this.defaultCharset;
+ if (this.type) {
+ let m = this.type.match(/;\s*charset\s*=\s*(\S+)/);
+ if (m) {
+ charset = m[1];
+ }
+ }
+ Object.defineProperty(this, "charset", { value: charset, writable: false, configurable: true })
+ }
+
+ createDecoder() {
+ try {
+ return new TextDecoder(charset);
+ } catch (e) {
+ return new TextDecoder(this.defaultCharset);
+ }
+ }
+};