// application/static/js/components/request.js class Request { constructor() { } async request(method, url, headers = {}, payload = null, stream = false) { try { const response = await fetch(url, { method: method, headers: headers, body: payload }); if (!response.ok) { // It's good practice to handle non-OK responses. throw new Error(`Request failed: ${response.status} - ${await response.text()}`); } if (stream) { return this.handleStream(response); // This is correct } else { // Create an async generator that yields the entire body as a single chunk. return (async function*() { const text = await response.text(); yield text; })(); // Immediately-invoked function expression (IIFE) } } catch (error) { console.error("Request error:", error); // Log the error throw error; // Re-throw the error so the caller can handle it } } async *handleStream(response) { const reader = response.body.getReader(); const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) { break; } const chunk = decoder.decode(value, { stream: true }); yield chunk; } } } const requests = new Request(); export default requests;