mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 07:44:48 -05:00
112 lines
3.4 KiB
JavaScript
112 lines
3.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.HonoContext = void 0;
|
|
const cookie_1 = require("./utils/cookie");
|
|
const url_1 = require("./utils/url");
|
|
class HonoContext {
|
|
constructor(req, env = undefined, executionCtx = undefined, notFoundHandler = () => new Response()) {
|
|
this._status = 200;
|
|
this._pretty = false;
|
|
this._prettySpace = 2;
|
|
this._executionCtx = executionCtx;
|
|
this.req = req;
|
|
this.env = env ? env : {};
|
|
this.notFoundHandler = notFoundHandler;
|
|
this.finalized = false;
|
|
}
|
|
get event() {
|
|
if (this._executionCtx instanceof FetchEvent) {
|
|
return this._executionCtx;
|
|
}
|
|
else {
|
|
throw Error('This context has no FetchEvent');
|
|
}
|
|
}
|
|
get executionCtx() {
|
|
if (this._executionCtx) {
|
|
return this._executionCtx;
|
|
}
|
|
else {
|
|
throw Error('This context has no ExecutionContext');
|
|
}
|
|
}
|
|
get res() {
|
|
return (this._res || (this._res = new Response()));
|
|
}
|
|
set res(_res) {
|
|
this._res = _res;
|
|
this.finalized = true;
|
|
}
|
|
header(name, value) {
|
|
this._headers || (this._headers = {});
|
|
this._headers[name.toLowerCase()] = value;
|
|
if (this.finalized) {
|
|
this.res.headers.set(name, value);
|
|
}
|
|
}
|
|
status(status) {
|
|
this._status = status;
|
|
}
|
|
set(key, value) {
|
|
this._map || (this._map = {});
|
|
this._map[key] = value;
|
|
}
|
|
get(key) {
|
|
if (!this._map) {
|
|
return undefined;
|
|
}
|
|
return this._map[key];
|
|
}
|
|
pretty(prettyJSON, space = 2) {
|
|
this._pretty = prettyJSON;
|
|
this._prettySpace = space;
|
|
}
|
|
newResponse(data, status, headers = {}) {
|
|
const _headers = { ...this._headers };
|
|
if (this._res) {
|
|
this._res.headers.forEach((v, k) => {
|
|
_headers[k] = v;
|
|
});
|
|
}
|
|
return new Response(data, {
|
|
status: status || this._status || 200,
|
|
headers: { ..._headers, ...headers },
|
|
});
|
|
}
|
|
body(data, status = this._status, headers = {}) {
|
|
return this.newResponse(data, status, headers);
|
|
}
|
|
text(text, status = this._status, headers = {}) {
|
|
headers['content-type'] = 'text/plain; charset=UTF-8';
|
|
return this.body(text, status, headers);
|
|
}
|
|
json(object, status = this._status, headers = {}) {
|
|
const body = this._pretty
|
|
? JSON.stringify(object, null, this._prettySpace)
|
|
: JSON.stringify(object);
|
|
headers['content-type'] = 'application/json; charset=UTF-8';
|
|
return this.body(body, status, headers);
|
|
}
|
|
html(html, status = this._status, headers = {}) {
|
|
headers['content-type'] = 'text/html; charset=UTF-8';
|
|
return this.body(html, status, headers);
|
|
}
|
|
redirect(location, status = 302) {
|
|
if (!(0, url_1.isAbsoluteURL)(location)) {
|
|
const url = new URL(this.req.url);
|
|
url.pathname = location;
|
|
location = url.toString();
|
|
}
|
|
return this.newResponse(null, status, {
|
|
Location: location,
|
|
});
|
|
}
|
|
cookie(name, value, opt) {
|
|
const cookie = (0, cookie_1.serialize)(name, value, opt);
|
|
this.header('set-cookie', cookie);
|
|
}
|
|
notFound() {
|
|
return this.notFoundHandler(this);
|
|
}
|
|
}
|
|
exports.HonoContext = HonoContext;
|