Neanderthals Paint Mammals

    fastify-early-hints
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.3 • Public • Published

    Fastify Early Hints

    js-standard-style ContinuousIntegration

    Draft proposal of plugin handling the HTTP 103 code. Based on : https://github.com/fastify/fastify/issues/2683

    Install

    npm i fastify-early-hints
    

    Usage

    • eh.add: Every call writes to the socket and returns a promise. Altought all the promises created throught the reply lifecycle are awaited in the onSend hook.
    const Fastify = require("fastify");
    const eh = require("fastify-early-hints");
     
    const fastify = Fastify({ logger: true });
    fastify.register(eh);
     
    fastify.get("/", async (request, reply) => {
      reply.eh.add([
        "Link: </style.css>; rel=preload; as=style",
        "Link: </script.js>; rel=preload; as=script",
      ]);
      await reply.eh.add([
        { href: "//example.com", rel: "preload", as: "style" },
        { href: "//example.com", rel: "preload", as: "style", cors: true },
        { href: "//example.com", rel: "preconnect" },
        { href: "//example2.com", rel: "preconnect", cors: true },
        { href: "//example3.com", rel: "preconnect", cors: "use-credentials" },
      ]);
      return { hello: "world" };
    });
     
    const start = async () => {
      try {
        await fastify.listen(3000);
        fastify.log.info(`server listening on ${fastify.server.address().port}`);
      } catch (err) {
        fastify.log.error(err);
        process.exit(1);
      }
    };
    start();

    Result

    $ curl -D - http://localhost:3000    
    HTTP/1.1 103 Early Hints
    Link: </style.css>; rel=preload; as=style
    Link: </script.js>; rel=preload; as=script
    
    HTTP/1.1 103 Early Hints
    Link: </style.css>; rel=preload; as=style
    Link: </script.js>; rel=preload; as=script
    Link: <//example.com>; rel=preload; as=style
    Link: <//example.com>; rel=preload; as=style; crossorigin
    Link: <//example.com>; rel=preconnect
    Link: <//example2.com>; rel=preconnect; crossorigin
    Link: <//example3.com>; rel=preconnect; crossorigin=use-credentials
    
    HTTP/1.1 200 OK
    content-type: application/json; charset=utf-8
    content-length: 17
    Date: Thu, 12 Nov 2020 22:45:54 GMT
    Connection: keep-alive
    
    {"hello":"world"}
    

    Todo

    • Handling different cases combinations
    • improve tests

    References

    License

    Licensed under MIT.

    Install

    npm i fastify-early-hints

    DownloadsWeekly Downloads

    9

    Version

    0.0.3

    License

    MIT

    Unpacked Size

    69.2 kB

    Total Files

    24

    Last publish

    Collaborators

    • zekth