'use strict';

/**
 *
 *
 * @author Mai
 * @date
 * @version
 */

const isJSON = require('koa-is-json');
const zlib = require('zlib');

module.exports = options => {
    return async function gzip(ctx, next) {
        await next();

        // 后续中间件执行完成后将响应体转换成 gzip
        let body = ctx.body;
        if (!body) return;
        if (isJSON(body)) return;

        // 支持 options.threshold
        if (options.threshold && ctx.length < options.threshold) return;

        //if (isJSON(body)) body = JSON.stringify(body);

        // 设置 gzip body，修正响应头
        const stream = zlib.createGzip();
        stream.end(body);
        ctx.body = stream;
        ctx.set('Content-Encoding', 'gzip');
    };
};