@http4t/core
Advanced tools
Comparing version 0.0.142 to 0.0.143
@@ -1,4 +0,5 @@ | ||
import { HttpBody, Data, HttpMessage, HttpRequest, HttpResponse } from "./contract"; | ||
import { Data, HttpBody, HttpMessage, HttpRequest, HttpResponse } from "./contract"; | ||
export declare class JsonBody<T = any> implements AsyncIterable<Data> { | ||
readonly data: Readonly<T>; | ||
readonly ifYouAreSeeingThisInATestAssertion = "You probably forgot to call toJSON(message) on your HttpMessage, which would have called Symbol.asyncIterator on this body"; | ||
constructor(data: Readonly<T>); | ||
@@ -5,0 +6,0 @@ [Symbol.asyncIterator](): AsyncIterator<Data>; |
@@ -71,2 +71,3 @@ "use strict"; | ||
this.data = data; | ||
this.ifYouAreSeeingThisInATestAssertion = "You probably forgot to call toJSON(message) on your HttpMessage, which would have called Symbol.asyncIterator on this body"; | ||
} | ||
@@ -73,0 +74,0 @@ JsonBody.prototype[Symbol.asyncIterator] = function () { |
46
json.ts
import {bufferText} from "./bodies"; | ||
import {HttpBody, Data, HttpMessage, HttpRequest, HttpResponse, isMessage} from "./contract"; | ||
import {Data, HttpBody, HttpMessage, HttpRequest, HttpResponse, isMessage} from "./contract"; | ||
import {modify} from "./util/objects"; | ||
async function* yieldStringify(data: object): AsyncIterable<Data> { | ||
yield typeof data ==='undefined' ? "" : JSON.stringify(data) | ||
yield typeof data === 'undefined' ? "" : JSON.stringify(data) | ||
} | ||
export class JsonBody<T = any> implements AsyncIterable<Data> { | ||
constructor(public readonly data: Readonly<T>) { | ||
} | ||
[Symbol.asyncIterator](): AsyncIterator<Data> { | ||
return yieldStringify(this.data)[Symbol.asyncIterator](); | ||
} | ||
public readonly ifYouAreSeeingThisInATestAssertion = | ||
"You probably forgot to call toJSON(message) on your HttpMessage, which would have called Symbol.asyncIterator on this body"; | ||
toJSON() { | ||
return this.data; | ||
} | ||
constructor(public readonly data: Readonly<T>) { | ||
} | ||
[Symbol.asyncIterator](): AsyncIterator<Data> { | ||
return yieldStringify(this.data)[Symbol.asyncIterator](); | ||
} | ||
toJSON() { | ||
return this.data; | ||
} | ||
} | ||
@@ -31,3 +35,3 @@ | ||
export function jsonBody<T>(data: T): JsonBody<T> { | ||
return new JsonBody(data); | ||
return new JsonBody(data); | ||
} | ||
@@ -46,8 +50,8 @@ | ||
export async function bodyJson<T>(value: HttpBody | HttpMessage): Promise<T | undefined> { | ||
const body = isMessage(value) ? value.body : value; | ||
if (body instanceof JsonBody) | ||
return body.data; | ||
const text = await bufferText(body); | ||
if(text === "") return undefined; | ||
return JSON.parse(text); | ||
const body = isMessage(value) ? value.body : value; | ||
if (body instanceof JsonBody) | ||
return body.data; | ||
const text = await bufferText(body); | ||
if (text === "") return undefined; | ||
return JSON.parse(text); | ||
} | ||
@@ -62,7 +66,7 @@ | ||
export async function parseJson<T extends HttpRequest | HttpResponse>(message: T): Promise<T> { | ||
if (message.body instanceof JsonBody) | ||
return message; | ||
if (message.body instanceof JsonBody) | ||
return message; | ||
const parsed = bodyJson(message.body); | ||
return modify(message, {body: jsonBody(parsed)} as any); | ||
const parsed = bodyJson(message.body); | ||
return modify(message, {body: jsonBody(parsed)} as any); | ||
} |
@@ -1,3 +0,6 @@ | ||
import { HeaderName, HeaderValue, HttpBody, HttpMessage } from "./contract"; | ||
import { HeaderName, HeaderValue, HttpBody, HttpMessage, HttpRequest, HttpResponse } from "./contract"; | ||
export declare function setHeader<T extends HttpMessage>(message: T, name: HeaderName, value: HeaderValue): T; | ||
export declare function setBody<T extends HttpMessage>(message: T, body: HttpBody): T; | ||
export declare function isResponse(message: HttpMessage): message is HttpResponse; | ||
export declare function isRequest(message: HttpMessage): message is HttpRequest; | ||
export declare function toJSON<T extends HttpMessage>(message: T): Promise<T>; |
"use strict"; | ||
var __assign = (this && this.__assign) || function () { | ||
__assign = Object.assign || function(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | ||
t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __generator = (this && this.__generator) || function (thisArg, body) { | ||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | ||
function verb(n) { return function (v) { return step([n, v]); }; } | ||
function step(op) { | ||
if (f) throw new TypeError("Generator is already executing."); | ||
while (_) try { | ||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | ||
if (y = 0, t) op = [op[0] & 2, t.value]; | ||
switch (op[0]) { | ||
case 0: case 1: t = op; break; | ||
case 4: _.label++; return { value: op[1], done: false }; | ||
case 5: _.label++; y = op[1]; op = [0]; continue; | ||
case 7: op = _.ops.pop(); _.trys.pop(); continue; | ||
default: | ||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | ||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | ||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | ||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | ||
if (t[2]) _.ops.pop(); | ||
_.trys.pop(); continue; | ||
} | ||
op = body.call(thisArg, _); | ||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | ||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | ||
} | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.setBody = exports.setHeader = void 0; | ||
exports.toJSON = exports.isRequest = exports.isResponse = exports.setBody = exports.setHeader = void 0; | ||
var h = require("./headers"); | ||
var headers_1 = require("./headers"); | ||
var objects_1 = require("./util/objects"); | ||
var bodies_1 = require("./bodies"); | ||
function setHeader(message, name, value) { | ||
@@ -15,2 +63,26 @@ return objects_1.modify(message, { headers: h.setHeader(message.headers, headers_1.header(name, value)) }); | ||
exports.setBody = setBody; | ||
function isResponse(message) { | ||
return message.hasOwnProperty("status"); | ||
} | ||
exports.isResponse = isResponse; | ||
function isRequest(message) { | ||
return message.hasOwnProperty("method"); | ||
} | ||
exports.isRequest = isRequest; | ||
/* turns streaming bodies into text bodies so that messages are directly json serialisable */ | ||
function toJSON(message) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var _a, _b; | ||
return __generator(this, function (_c) { | ||
switch (_c.label) { | ||
case 0: | ||
_a = [__assign({}, message)]; | ||
_b = {}; | ||
return [4 /*yield*/, bodies_1.bufferText(message.body)]; | ||
case 1: return [2 /*return*/, __assign.apply(void 0, _a.concat([(_b.body = _c.sent(), _b)]))]; | ||
} | ||
}); | ||
}); | ||
} | ||
exports.toJSON = toJSON; | ||
//# sourceMappingURL=messages.js.map |
@@ -1,5 +0,6 @@ | ||
import {HeaderName, HeaderValue, HttpBody, HttpMessage} from "./contract"; | ||
import {HeaderName, HeaderValue, HttpBody, HttpMessage, HttpRequest, HttpResponse} from "./contract"; | ||
import * as h from "./headers"; | ||
import {header} from "./headers"; | ||
import {modify} from "./util/objects"; | ||
import {bufferText} from "./bodies"; | ||
@@ -12,2 +13,15 @@ export function setHeader<T extends HttpMessage>(message: T, name: HeaderName, value: HeaderValue): T { | ||
return modify(message, {body} as Partial<T>); | ||
} | ||
export function isResponse(message: HttpMessage): message is HttpResponse { | ||
return message.hasOwnProperty("status"); | ||
} | ||
export function isRequest(message: HttpMessage): message is HttpRequest { | ||
return message.hasOwnProperty("method"); | ||
} | ||
/* turns streaming bodies into text bodies so that messages are directly json serialisable */ | ||
export async function toJSON<T extends HttpMessage>(message: T): Promise<T> { | ||
return {...message, body: await bufferText(message.body)} | ||
} |
{ | ||
"name": "@http4t/core", | ||
"version": "0.0.142", | ||
"version": "0.0.143", | ||
"license": "Apache-2.0" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
146496
2664