
Research
Node.js Fixes AsyncLocalStorage Crash Bug That Could Take Down Production Servers
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.
@hatsy/router
Advanced tools
This module contains a Routing capability that extends request processing context with request routing means.
The latter has the following properties:
fullRoute original route.route matching route. E.g. a tail section of original route.routeMatch a successful match of the route(s) against the pattern(s).The @hatsy/route-match library performs route parsing and matching.
Once Routing capability applied the request processing can be dispatched by matching route by one of the dispatchers.
import { httpListener } from '@hatsy/hatsy';
import { dispatchByName, Routing } from '@hatsy/router';
import { createServer } from 'http';
const server = createServer(httpListener(
Routing.for(dispatchByName({
api: apiHandler, // Handle API request under `/api` route
assets: assetsHandler, // Serve static assets under `/assets` route
})),
));
server.listen(8080);
dispatchByName() function accepts a map of request processing handlers under route entry names the handler should
serve. The handler receives a request processing context with the rest of the route.
import { httpListener } from '@hatsy/hatsy';
import { dispatchByPattern, Routing } from '@hatsy/router';
import { createServer } from 'http';
const server = createServer(httpListener(
Routing.for(dispatchByPattern([
{ on: 'api/v{apiVersion}/**', to: apiHandler },
{ on: '**/*.html', to: pageHandler },
{ on: 'assets/**', to: assetsHandler },
])),
));
server.listen(8080);
dispatchByPatttern() function accepts dispatch patterns containing a route pattern and handler that serves
the matching route. The handler receives a request processing context with matching route tail.
The route format is URLRoute by default, while route patterns parsed by simpleRoutePattern().
This can be changed by configuring Routing capability.
import { httpListener } from '@hatsy/hatsy';
import { matrixRoute, matrixRoutePattern } from '@hatsy/route-match';
import { dispatchByPattern, Routing } from '@hatsy/router';
import { createServer } from 'http'; import { matrixRoute } from './matrix-route';
const server = createServer(httpListener(
Routing
.with({
buildRoute: ({ requestAddresses: { url } }) => matrixRoute(url),
routePattern: pattern => matrixRoutePattern(pattern),
}).for(dispatchByPattern([
{ on: 'api;v/**', to: apiHandler }, // API version as matrix attribute
{ on: '**/*.html', to: pageHandler },
{ on: 'assets/**', to: assetsHandler },
])),
));
server.listen(8080);
FAQs
Hatsy router
The npm package @hatsy/router receives a total of 18 weekly downloads. As such, @hatsy/router popularity was classified as not popular.
We found that @hatsy/router demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.

Research
/Security News
A malicious Chrome extension steals newly created MEXC API keys, exfiltrates them to Telegram, and enables full account takeover with trading and withdrawal rights.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.