@@ -1,5 +0,1 @@ | ||
| // export abstract class Err { | ||
| // abstract readonly _tag: string; | ||
| // constructor(readonly message: string) {} | ||
| // } | ||
| export class HttpError { | ||
@@ -10,4 +6,3 @@ constructor(message, originalError) { | ||
| this._tag = "HttpError"; | ||
| // super(message); | ||
| } | ||
| } |
+12
-12
| import * as Predicate from "@effect/data/Predicate"; | ||
| import * as Effect from "@effect/io/Effect"; | ||
| import { HttpError } from "./exception.js"; | ||
| import { Res } from "./types.js"; | ||
| export declare class JsonParseError { | ||
| export declare class DecodeError { | ||
| readonly response: Response; | ||
| readonly message: string; | ||
| readonly _tag = "JsonParseError"; | ||
| constructor(response: Response, message: string); | ||
| readonly message?: string | undefined; | ||
| readonly _tag = "DecodeError"; | ||
| constructor(response: Response, message?: string | undefined); | ||
| } | ||
| export declare class StatusError { | ||
| readonly response: Response; | ||
| readonly message: string; | ||
| readonly message?: string | undefined; | ||
| readonly _tag = "StatusError"; | ||
| constructor(response: Response, message: string); | ||
| constructor(response: Response, message?: string | undefined); | ||
| } | ||
| export declare function toJson<T>(): <R, E, A extends Response>(fx: Effect.Effect<R, E, A>) => Effect.Effect<R, JsonParseError | E, T>; | ||
| export declare const toText: () => <R, E, A extends Response>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, HttpError | E, string>; | ||
| export declare const toArrayBuffer: () => <R, E, A extends Response>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, HttpError | E, ArrayBuffer>; | ||
| export declare const toBlob: () => <R, E, A extends Response>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, HttpError | E, Blob>; | ||
| export declare const toText: <R, E, A extends Response>(fx: Effect.Effect<R, E, A>) => Effect.Effect<R, DecodeError | E, string>; | ||
| export declare const toJson: <R, E, A extends Response>(fx: Effect.Effect<R, E, A>) => Effect.Effect<R, DecodeError | E, any>; | ||
| export declare const toJsonT: <T>() => <R, E, A extends Response>(fx: Effect.Effect<R, E, A>) => Effect.Effect<R, DecodeError | E, T>; | ||
| export declare const toArrayBuffer: <R, E, A extends Response>(fx: Effect.Effect<R, E, A>) => Effect.Effect<R, DecodeError | E, ArrayBuffer>; | ||
| export declare const toBlob: <R, E, A extends Response>(fx: Effect.Effect<R, E, A>) => Effect.Effect<R, DecodeError | E, Blob>; | ||
| export declare function filterStatus<A extends Res>(func: Predicate.Predicate<number>): <R, E>(fx: Effect.Effect<R, E, A>) => Effect.Effect<R, StatusError | E, A>; | ||
| export declare function filterStatusOk(): <R, E>(fx: Effect.Effect<R, E, Response>) => Effect.Effect<R, StatusError | E, Response>; | ||
| export declare function filterStatusOk<R, E, A extends Res>(fx: Effect.Effect<R, E, A>): Effect.Effect<R, StatusError | E, A>; |
+13
-24
| import { pipe } from "@effect/data/Function"; | ||
| import * as Effect from "@effect/io/Effect"; | ||
| import { HttpError } from "./exception.js"; | ||
| export class JsonParseError { | ||
| export class DecodeError { | ||
| constructor(response, message) { | ||
| this.response = response; | ||
| this.message = message; | ||
| this._tag = "JsonParseError"; | ||
| // super(message); | ||
| this._tag = "DecodeError"; | ||
| } | ||
@@ -17,26 +15,17 @@ } | ||
| this._tag = "StatusError"; | ||
| // super(message); | ||
| } | ||
| } | ||
| export function toJson() { | ||
| function to(tryer, catcher) { | ||
| return (fx) => { | ||
| return pipe(fx, Effect.flatMap((res) => { | ||
| return Effect.tryPromise({ | ||
| try: () => res.json(), | ||
| catch: () => new JsonParseError(res, "Unable to parse JSON"), | ||
| }); | ||
| })); | ||
| }; | ||
| } | ||
| function to(fn) { | ||
| return () => (effect) => { | ||
| return pipe(effect, Effect.flatMap((res) => Effect.tryPromise({ | ||
| try: () => fn(res), | ||
| catch: (e) => new HttpError("Decode error", e), | ||
| return pipe(fx, Effect.flatMap((res) => Effect.tryPromise({ | ||
| try: () => tryer(res), | ||
| catch: (e) => catcher(res, e), | ||
| }))); | ||
| }; | ||
| } | ||
| export const toText = to((res) => res.text()); | ||
| export const toArrayBuffer = to((res) => res.arrayBuffer()); | ||
| export const toBlob = to((res) => res.blob()); | ||
| export const toText = to((res) => res.text(), (res) => new DecodeError(res, "Unable to decode Text")); | ||
| export const toJson = to((res) => res.json(), (res) => new DecodeError(res, "Unable to decode JSON")); | ||
| export const toJsonT = () => to((res) => res.json(), (res) => new DecodeError(res, "Unable to decode JSON")); | ||
| export const toArrayBuffer = to((res) => res.arrayBuffer(), (res) => new DecodeError(res, "Unable to decode to ArrayBuffer")); | ||
| export const toBlob = to((res) => res.blob(), (res) => new DecodeError(res, "Unable to decode to Blob")); | ||
| export function filterStatus(func) { | ||
@@ -47,4 +36,4 @@ return (fx) => { | ||
| } | ||
| export function filterStatusOk() { | ||
| return filterStatus((status) => status >= 200 && status < 300); | ||
| export function filterStatusOk(fx) { | ||
| return pipe(fx, Effect.filterOrElse((res) => res.ok, (res) => Effect.fail(new StatusError(res)))); | ||
| } |
+1
-1
| { | ||
| "name": "http-kit", | ||
| "version": "0.2.2", | ||
| "version": "0.3.0", | ||
| "type": "module", | ||
@@ -5,0 +5,0 @@ "description": "Platform agnostic fetch kit for the Effect package", |
19120
-0.15%380
-4.04%