node-web-mvc
Version:
node spring mvc
46 lines (45 loc) • 1.63 kB
JavaScript
;
/**
* @module GzipResourceResolver
* @description gzip资源解析器
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const GzipResource_1 = __importDefault(require("./GzipResource"));
const HttpHeaders_1 = __importDefault(require("../http/HttpHeaders"));
class GzipResourceTransformer {
constructor(config) {
this.config = config;
}
isAcceptable(resource, request) {
var _a;
if (!this.config.gzipped) {
// 如果没有开启gzip
return false;
}
const acceptEncoding = request.getHeaderValue(HttpHeaders_1.default.ACCEPT_ENCODING).join(',');
if (!/gzip/.test(acceptEncoding)) {
// 如果客户端不支持gzip
return false;
}
if (resource instanceof GzipResource_1.default) {
// 如果当前强制返回GzipResource
return false;
}
// 判定返回内容是否在白名单中
return (_a = this.config.mimeTypes) === null || _a === void 0 ? void 0 : _a.find((m) => m.isCompatibleWith(resource.mediaType));
}
async transform(request, resource, chain) {
resource = await chain.transform(request, resource);
if (!resource) {
return resource;
}
if (!this.isAcceptable(resource, request)) {
return resource;
}
return new GzipResource_1.default(resource);
}
}
exports.default = GzipResourceTransformer;