spiderlightning icon indicating copy to clipboard operation
spiderlightning copied to clipboard

Expose fetch's Response class to JavaScript land

Open manekinekko opened this issue 2 years ago • 2 comments

Describe the solution you'd like As a JavaScript developer, I'd usually need to compose content (grab data from a provider) and return static HTML to clients (aka. Server Side Rendering). In order to accomplish this, JavaScript's engines expose a Response() class, part of fetch Web API.

It'd be great if the following example just works with Slight:

const html = `<!DOCTYPE html><h1>Hello World</h1>`;
const options = {
    headers: {
      "content-type": "text/html",
    },
  };
return new Response(html, options);

See specs: https://fetch.spec.whatwg.org/#response-class

Additional context I'd also recommend considering exposing Request and Headers, also part of the fetch Web API.

cc @devigned @squillace

manekinekko avatar Aug 03 '23 13:08 manekinekko

Currently, the js HTTP server example looks like: https://github.com/danbugs/slightjs/blob/4fe13b0107c800aeeeaca423cd68d6612b61ae57/examples/http-server/index.js

function handle_get(req) {
    console.log("I just got a request @ uri: ", req.uri, ", w/ method: ", req.method);
    switch (req.uri) {
        case "/get/hello":
            console.log("hello!");
            break;
        default:
            break;
    }

    return JSON.stringify({ headers: null, body: "Hello, JS Wasm!", status: 200 });
}

The previous code snippet shows a route handler func which takes a request structure, logs some messages, and returns a string of JSON.

To clarify:

  1. the route handler should return a Response type matching the fetch spec
  2. consider exposing the fetch API

Is that accurate?

devigned avatar Aug 03 '23 14:08 devigned

That's correct.

manekinekko avatar Aug 10 '23 13:08 manekinekko