@inextremis/hermes
v0.1.0
Published
A JavaScript router
Readme
Hermes
Hermes is a JavaScript router.
Last release: 0.1.0 (2025-08-27)
License: MIT (https://opensource.org/license/mit)
Author: Grand Sage InExtremis ([email protected])
This project adheres to Semantic Versioning.
This project follows the ISO 8601 standard to represent the dates.
Table of content
1 - Installation
This is a Node.js module available through the npm registry.
Before installing, download and install Node.js.
If this is a brand new project, make sure to create a package.json first with
the npm init command.
Installation is done using the npm install command:
$ npm install @inextremis/hermes2 - How Hermes works
Here is a simple example.
Let's imagine that we develop a mailbox application. It has 3 views: Inbox, Sent mails and Mail editor.
That would be the HTML code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>InExtremis mailbox</title>
</head>
<body>
<div id="inbox"> ... </div>
<div id="sent-mails" hidden> ... </div>
<div id="mail-editor" hidden> ... </div>
<script type="module" src="/app/index.js"></script>
</body>
</html>But we don't want the 3 views to be displayed at the same time.
When the pathname of the URL is /inbox, we want the Inbox view to be displayed.
When the pathname of the URL is /sent-mails, we want the Sent mails view to be displayed.
When the pathname of the URL is /send-mail, we want the Mail editor view to be displayed.
First, we have to define 3 controllers.
/app/controllers.js
import Hermes from '@inextremis/hermes';
export const displayInbox = Hermes.createController(function (req, res)
{
document.getElementById('inbox').hidden = false;
document.getElementById('sent-mails').hidden = true;
document.getElementById('mail-editor').hidden = true;
});
export const displaySentMails = Hermes.createController(function (req, res)
{
document.getElementById('inbox').hidden = true;
document.getElementById('sent-mails').hidden = false;
document.getElementById('mail-editor').hidden = true;
});
export const displayMailEditor = Hermes.createController(function (req, res)
{
document.getElementById('inbox').hidden = true;
document.getElementById('sent-mails').hidden = true;
document.getElementById('mail-editor').hidden = false;
});Then, we have to create a router to connect controllers and pathnames.
/app/router.js
import Hermes from '@inextremis/hermes';
import { displayInbox, displaySentMails, displayMailEditor } from "./controller.ts";
const router = Hermes.createRouter();
router.use('/inbox', displayInbox);
router.use('/sent-mails', displaySentMails);
router.use('/send-mail', displayMailEditor);
export default router;Finally, we have to:
- create a request from the URL of the page,
- create a response object (which is useless for now),
- run the router a first time and run it again whenever the URL is updated.
/app/index.js
import Hermes from '@inextremis/hermes';
import router from "./router.ts";
let req = Hermes.createRequest(window.location.ref);
let res = Hermes.createResponse();
router.run(req, res);
window.addEventListener('popstate', function (event)
{
req = Hermes.createRequest(window.location.ref);
router.run(req, res);
});3 - Documentation
Classes:
TypeScript interface:
