@httpland/compression-middleware 1.0.0-beta.1
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +20 -0
- package/README.md +208 -0
- package/esm/deps/deno.land/std@0.180.0/http/_negotiation/common.js +40 -0
- package/esm/deps/deno.land/std@0.180.0/http/_negotiation/encoding.js +121 -0
- package/esm/deps/deno.land/std@0.180.0/http/_negotiation/language.js +110 -0
- package/esm/deps/deno.land/std@0.180.0/http/_negotiation/media_type.js +174 -0
- package/esm/deps/deno.land/std@0.180.0/http/negotiation.js +36 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/_db.js +33 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/_util.js +122 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/content_type.js +54 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/extension.js +25 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/extensions_by_type.js +30 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/format_media_type.js +60 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/get_charset.js +36 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/mod.js +22 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/parse_media_type.js +121 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/type_by_extension.js +23 -0
- package/esm/deps/deno.land/std@0.180.0/media_types/vendor/mime-db.v1.52.0.js +8555 -0
- package/esm/deps/deno.land/x/vary@1.0.0/mod.js +108 -0
- package/esm/deps.js +8 -0
- package/esm/encoders/deflate.js +11 -0
- package/esm/encoders/gzip.js +11 -0
- package/esm/encoders/utils.js +7 -0
- package/esm/middleware.js +55 -0
- package/esm/mod.js +3 -0
- package/esm/package.json +3 -0
- package/esm/transform.js +23 -0
- package/esm/types.js +3 -0
- package/esm/utils.js +19 -0
- package/package.json +55 -0
- package/script/deps/deno.land/std@0.180.0/http/_negotiation/common.js +45 -0
- package/script/deps/deno.land/std@0.180.0/http/_negotiation/encoding.js +125 -0
- package/script/deps/deno.land/std@0.180.0/http/_negotiation/language.js +114 -0
- package/script/deps/deno.land/std@0.180.0/http/_negotiation/media_type.js +178 -0
- package/script/deps/deno.land/std@0.180.0/http/negotiation.js +42 -0
- package/script/deps/deno.land/std@0.180.0/media_types/_db.js +39 -0
- package/script/deps/deno.land/std@0.180.0/media_types/_util.js +132 -0
- package/script/deps/deno.land/std@0.180.0/media_types/content_type.js +58 -0
- package/script/deps/deno.land/std@0.180.0/media_types/extension.js +29 -0
- package/script/deps/deno.land/std@0.180.0/media_types/extensions_by_type.js +34 -0
- package/script/deps/deno.land/std@0.180.0/media_types/format_media_type.js +64 -0
- package/script/deps/deno.land/std@0.180.0/media_types/get_charset.js +40 -0
- package/script/deps/deno.land/std@0.180.0/media_types/mod.js +38 -0
- package/script/deps/deno.land/std@0.180.0/media_types/parse_media_type.js +125 -0
- package/script/deps/deno.land/std@0.180.0/media_types/type_by_extension.js +27 -0
- package/script/deps/deno.land/std@0.180.0/media_types/vendor/mime-db.v1.52.0.js +8557 -0
- package/script/deps/deno.land/x/vary@1.0.0/mod.js +113 -0
- package/script/deps.js +22 -0
- package/script/encoders/deflate.js +14 -0
- package/script/encoders/gzip.js +14 -0
- package/script/encoders/utils.js +10 -0
- package/script/middleware.js +61 -0
- package/script/mod.js +7 -0
- package/script/package.json +3 -0
- package/script/transform.js +27 -0
- package/script/types.js +4 -0
- package/script/utils.js +24 -0
- package/types/deps/deno.land/std@0.180.0/http/_negotiation/common.d.ts +37 -0
- package/types/deps/deno.land/std@0.180.0/http/_negotiation/encoding.d.ts +33 -0
- package/types/deps/deno.land/std@0.180.0/http/_negotiation/language.d.ts +30 -0
- package/types/deps/deno.land/std@0.180.0/http/_negotiation/media_type.d.ts +30 -0
- package/types/deps/deno.land/std@0.180.0/http/negotiation.d.ts +126 -0
- package/types/deps/deno.land/std@0.180.0/media_types/_db.d.ts +5 -0
- package/types/deps/deno.land/std@0.180.0/media_types/_util.d.ts +21 -0
- package/types/deps/deno.land/std@0.180.0/media_types/content_type.d.ts +38 -0
- package/types/deps/deno.land/std@0.180.0/media_types/extension.d.ts +17 -0
- package/types/deps/deno.land/std@0.180.0/media_types/extensions_by_type.d.ts +20 -0
- package/types/deps/deno.land/std@0.180.0/media_types/format_media_type.d.ts +16 -0
- package/types/deps/deno.land/std@0.180.0/media_types/get_charset.d.ts +15 -0
- package/types/deps/deno.land/std@0.180.0/media_types/mod.d.ts +20 -0
- package/types/deps/deno.land/std@0.180.0/media_types/parse_media_type.d.ts +37 -0
- package/types/deps/deno.land/std@0.180.0/media_types/type_by_extension.d.ts +17 -0
- package/types/deps/deno.land/std@0.180.0/media_types/vendor/mime-db.v1.52.0.d.ts +8518 -0
- package/types/deps/deno.land/x/vary@1.0.0/mod.d.ts +23 -0
- package/types/deps.d.ts +7 -0
- package/types/encoders/deflate.d.ts +3 -0
- package/types/encoders/gzip.d.ts +3 -0
- package/types/encoders/utils.d.ts +4 -0
- package/types/middleware.d.ts +28 -0
- package/types/mod.d.ts +2 -0
- package/types/transform.d.ts +3 -0
- package/types/types.d.ts +15 -0
- package/types/utils.d.ts +2 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.parseMediaType = void 0;
|
4
|
+
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
5
|
+
const _util_js_1 = require("./_util.js");
|
6
|
+
/**
|
7
|
+
* Parses the media type and any optional parameters, per
|
8
|
+
* [RFC 1521](https://datatracker.ietf.org/doc/html/rfc1521). Media types are
|
9
|
+
* the values in `Content-Type` and `Content-Disposition` headers. On success
|
10
|
+
* the function returns a tuple where the first element is the media type and
|
11
|
+
* the second element is the optional parameters or `undefined` if there are
|
12
|
+
* none.
|
13
|
+
*
|
14
|
+
* The function will throw if the parsed value is invalid.
|
15
|
+
*
|
16
|
+
* The returned media type will be normalized to be lower case, and returned
|
17
|
+
* params keys will be normalized to lower case, but preserves the casing of
|
18
|
+
* the value.
|
19
|
+
*
|
20
|
+
* @example
|
21
|
+
* ```ts
|
22
|
+
* import { parseMediaType } from "https://deno.land/std@$STD_VERSION/media_types/parse_media_type.ts";
|
23
|
+
* import { assertEquals } from "https://deno.land/std@$STD_VERSION/testing/asserts.ts";
|
24
|
+
*
|
25
|
+
* assertEquals(
|
26
|
+
* parseMediaType("application/JSON"),
|
27
|
+
* [
|
28
|
+
* "application/json",
|
29
|
+
* undefined
|
30
|
+
* ]
|
31
|
+
* );
|
32
|
+
*
|
33
|
+
* assertEquals(
|
34
|
+
* parseMediaType("text/html; charset=UTF-8"),
|
35
|
+
* [
|
36
|
+
* "application/json",
|
37
|
+
* { charset: "UTF-8" },
|
38
|
+
* ]
|
39
|
+
* );
|
40
|
+
* ```
|
41
|
+
*/
|
42
|
+
function parseMediaType(v) {
|
43
|
+
const [base] = v.split(";");
|
44
|
+
const mediaType = base.toLowerCase().trim();
|
45
|
+
const params = {};
|
46
|
+
// Map of base parameter name -> parameter name -> value
|
47
|
+
// for parameters containing a '*' character.
|
48
|
+
const continuation = new Map();
|
49
|
+
v = v.slice(base.length);
|
50
|
+
while (v.length) {
|
51
|
+
v = v.trimStart();
|
52
|
+
if (v.length === 0) {
|
53
|
+
break;
|
54
|
+
}
|
55
|
+
const [key, value, rest] = (0, _util_js_1.consumeMediaParam)(v);
|
56
|
+
if (!key) {
|
57
|
+
if (rest.trim() === ";") {
|
58
|
+
// ignore trailing semicolons
|
59
|
+
break;
|
60
|
+
}
|
61
|
+
throw new TypeError("Invalid media parameter.");
|
62
|
+
}
|
63
|
+
let pmap = params;
|
64
|
+
const [baseName, rest2] = key.split("*");
|
65
|
+
if (baseName && rest2 != null) {
|
66
|
+
if (!continuation.has(baseName)) {
|
67
|
+
continuation.set(baseName, {});
|
68
|
+
}
|
69
|
+
pmap = continuation.get(baseName);
|
70
|
+
}
|
71
|
+
if (key in pmap) {
|
72
|
+
throw new TypeError("Duplicate key parsed.");
|
73
|
+
}
|
74
|
+
pmap[key] = value;
|
75
|
+
v = rest;
|
76
|
+
}
|
77
|
+
// Stitch together any continuations or things with stars
|
78
|
+
// (i.e. RFC 2231 things with stars: "foo*0" or "foo*")
|
79
|
+
let str = "";
|
80
|
+
for (const [key, pieceMap] of continuation) {
|
81
|
+
const singlePartKey = `${key}*`;
|
82
|
+
const v = pieceMap[singlePartKey];
|
83
|
+
if (v) {
|
84
|
+
const decv = (0, _util_js_1.decode2331Encoding)(v);
|
85
|
+
if (decv) {
|
86
|
+
params[key] = decv;
|
87
|
+
}
|
88
|
+
continue;
|
89
|
+
}
|
90
|
+
str = "";
|
91
|
+
let valid = false;
|
92
|
+
for (let n = 0;; n++) {
|
93
|
+
const simplePart = `${key}*${n}`;
|
94
|
+
let v = pieceMap[simplePart];
|
95
|
+
if (v) {
|
96
|
+
valid = true;
|
97
|
+
str += v;
|
98
|
+
continue;
|
99
|
+
}
|
100
|
+
const encodedPart = `${simplePart}*`;
|
101
|
+
v = pieceMap[encodedPart];
|
102
|
+
if (!v) {
|
103
|
+
break;
|
104
|
+
}
|
105
|
+
valid = true;
|
106
|
+
if (n === 0) {
|
107
|
+
const decv = (0, _util_js_1.decode2331Encoding)(v);
|
108
|
+
if (decv) {
|
109
|
+
str += decv;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
else {
|
113
|
+
const decv = decodeURI(v);
|
114
|
+
str += decv;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
if (valid) {
|
118
|
+
params[key] = str;
|
119
|
+
}
|
120
|
+
}
|
121
|
+
return Object.keys(params).length
|
122
|
+
? [mediaType, params]
|
123
|
+
: [mediaType, undefined];
|
124
|
+
}
|
125
|
+
exports.parseMediaType = parseMediaType;
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.typeByExtension = void 0;
|
4
|
+
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
5
|
+
const _db_js_1 = require("./_db.js");
|
6
|
+
/**
|
7
|
+
* Returns the media type associated with the file extension. Values are
|
8
|
+
* normalized to lower case and matched irrespective of a leading `.`.
|
9
|
+
*
|
10
|
+
* When `extension` has no associated type, the function returns `undefined`.
|
11
|
+
*
|
12
|
+
* @example
|
13
|
+
* ```ts
|
14
|
+
* import { typeByExtension } from "https://deno.land/std@$STD_VERSION/media_types/type_by_extension.ts";
|
15
|
+
*
|
16
|
+
* typeByExtension("js"); // `application/json`
|
17
|
+
* typeByExtension(".HTML"); // `text/html`
|
18
|
+
* typeByExtension("foo"); // undefined
|
19
|
+
* typeByExtension("file.json"); // undefined
|
20
|
+
* ```
|
21
|
+
*/
|
22
|
+
function typeByExtension(extension) {
|
23
|
+
extension = extension.startsWith(".") ? extension.slice(1) : extension;
|
24
|
+
// @ts-ignore workaround around denoland/dnt#148
|
25
|
+
return _db_js_1.types.get(extension.toLowerCase());
|
26
|
+
}
|
27
|
+
exports.typeByExtension = typeByExtension;
|