@saez-juan/fetcher
v1.1.0
Published
Wrapper seguro alrededor de `fetch` (Bun/WHATWG) que devuelve `Result` en vez de lanzar excepciones. Incluye helpers para parsear JSON, texto y para reenviar respuestas con el esquema de `Result`.
Readme
@saez-juan/fetcher
Wrapper seguro alrededor de fetch (Bun/WHATWG) que devuelve Result en vez de lanzar excepciones. Incluye helpers para parsear JSON, texto y para reenviar respuestas con el esquema de Result.
Instalacion
bun add @saez-juan/fetcherIdea principal
fetcherenvuelvefetchy devuelveResultpara modelar exito/error como valores.- Evita excepciones en el flujo normal y promueve manejo explicito de errores.
- Helpers incluidos:
fetcher.json,fetcher.text,fetcher.forward.
API
fetcher(input, init?) => AsyncResult<Response>fetcher.json<T>(input, init?) => AsyncResult<T>fetcher.text(input, init?) => AsyncResult<string>fetcher.forward<T>(input, init?) => AsyncResult<T>
Notas:
init.fetch?: (typeof fetch)permite inyectar tu propia implementacion (util en tests).init.headersadmiteRecord<string, string>o un diccionario tipado.
Uso basico
import fetcher from "@saez-juan/fetcher";
// Realiza una request y maneja el resultado sin excepciones
const res = await fetcher("https://api.example.com/ping");
if (res.isErr) {
console.error(res.error);
return;
}
const response = res.value;
console.log("status:", response.status);JSON helper
import fetcher from "@saez-juan/fetcher";
type Ping = { ok: boolean };
const res = await fetcher.json<Ping>("https://api.example.com/ping");
if (res.isErr) {
return console.error(res.error);
}
console.log("ok:", res.value.ok);Text helper
import fetcher from "@saez-juan/fetcher";
const res = await fetcher.text("https://example.com/robots.txt");
if (res.isErr) return console.error(res.error);
console.log(res.value);Forward helper (reenviar Result)
import fetcher from "@saez-juan/fetcher";
// Espera un body con forma { success: boolean; data?: unknown; error?: ResultError }
const res = await fetcher.forward<number>(
"https://api.example.com/price?id=SKU123"
);
if (res.isErr) {
return console.error(res.error);
}
console.log("price:", res.value);Inyeccion de fetch (tests y entornos)
import fetcher from "@saez-juan/fetcher";
const res = await fetcher("/endpoint", {
fetch: (input, init) => {
return Promise.resolve(new Response(JSON.stringify({ ok: true })));
}
});
if (res.isOk) {
console.log(await res.value.json());
}Hecho por Juan Saez
