UNPKG

node-web-mvc

Version:
46 lines (45 loc) 1.63 kB
"use strict"; /** * @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;