@hint/utils-create-server

hint create server util

Stats

stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
3,155302Jun 19, 2021Feb 16, 2017Minified + gzip package size for @hint/utils-create-server in KB

Readme

Create Server (@hint/utils-create-server)

Create a server to run tests

Installation

This package is installed automatically when using npm create hint, no need to do anything from your side.

Architecture

The test web server can run in a different thread (default) or the same one (when in CI or if indicated by the user ) as the tests. The following is a summary on the benefits of each one:

  • Independent:
    • Better isolation
    • Improve the debugging experience (website can load even if the execution is stopped in a breakpoint)
  • Same thread:
    • Less resources needed
    • Faster execution

There main pieces are:

  • index.ts: This is what modules consume. Depending on the configuration or the environment it will use one type of server or another.
  • same-thread-server.ts: The real web server. It uses express and listens to the messages sent by index.ts. This will also be the class used when running in CI. If spawned then it will listen for IPC messages for the configuration.
  • independent-thread-server.ts: It is a "wrapper" on top of same-thread-server.ts. It spawns that process and handles the communication with it asynchronously.

When using a different process, each message sent needs a response to confirm the action has been completed, i.e. if it sends a start message it should receive a start message as well. In the case of same thread all the methods are async as well so both servers implement the same interface and the code does not need to special handle one or the other.

The following is an example of messages used:

{
    "webhint": {
        "type": "start"
    }
}

Please note that all messages are "scoped" to webhint to avoid collision with other possible messages.

IPC serializes the messages to JSON. Unfortunatelly it does not accept replacer/reviver functions. The server configuration accepts Buffers so in order to send the right data we need to manually (de)serialize the messages in both ends.

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.