"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.extendRequestPrototype = void 0;
const body_1 = require("./utils/body");
const cookie_1 = require("./utils/cookie");
function extendRequestPrototype() {
    if (!!Request.prototype.param) {
        // already extended
        return;
    }
    Request.prototype.param = function (key) {
        if (this.paramData) {
            if (key) {
                return this.paramData[key];
            }
            else {
                return this.paramData;
            }
        }
        return null;
    };
    Request.prototype.header = function (name) {
        if (name) {
            return this.headers.get(name);
        }
        else {
            const result = {};
            for (const [key, value] of this.headers) {
                result[key] = value;
            }
            return result;
        }
    };
    Request.prototype.query = function (key) {
        const url = new URL(this.url);
        if (key) {
            return url.searchParams.get(key);
        }
        else {
            const result = {};
            for (const key of url.searchParams.keys()) {
                result[key] = url.searchParams.get(key) || '';
            }
            return result;
        }
    };
    Request.prototype.queries = function (key) {
        const url = new URL(this.url);
        if (key) {
            return url.searchParams.getAll(key);
        }
        else {
            const result = {};
            for (const key of url.searchParams.keys()) {
                result[key] = url.searchParams.getAll(key);
            }
            return result;
        }
    };
    Request.prototype.cookie = function (key) {
        const cookie = this.headers.get('Cookie') || '';
        const obj = (0, cookie_1.parse)(cookie);
        if (key) {
            const value = obj[key];
            return value;
        }
        else {
            return obj;
        }
    };
    Request.prototype.parseBody = function () {
        if (!this.parsedBody) {
            this.parsedBody = (0, body_1.parseBody)(this);
        }
        return this.parsedBody;
    };
}
exports.extendRequestPrototype = extendRequestPrototype;