pasrel
v0.1.0
Published
A typed, composable and functional web server framework
Downloads
0
Readme
pasrel
A typed, composable and functional web server framework totally ripped off seanmonstar's warp
pasrel
is yet another Node.js web server framework. However, unlike most other frameworks, it doesn't use express-like route handlers or LoopBack-like controllers. The basic building blocks of the framework are Filter
s, small functions that can be combined in different ways to create routes, ~~totally ripped off~~ strongly inspired by warp.
pasrel
is fully written in TypeScript and leverages its powerful type system (with some help from ts-toolbelt) to provide type safety and excellent editor support. It can be used with both TypeScript and JavaScript but TypeScript is highly recommended since filters can be hard to reason about and error prone without types.
Disclaimer
You shouldn't use pasrel
in production, it hasn't been extensively tested and, at this stage, is just a fun pet project of mine to play around with various stuff.
Features
Out of the box, there are provided filters for
- Path routing and parameter extraction
- Header requirement and extration
- Query string extraction
- JSON and form bodies
- Multipart form data
- Query string and JSON body validation
- Static files and directories
- Logging
- Content type negotiation
- Basic and Bearer authentication
- Temporary and permanent redirections
You can easily create new filters by combining existing ones or from scratch.
Example
import * as path from "pasrel/filters/path";
import * as reply from "pasrel/reply";
import { serve } from "pasrel";
// GET /hello/World => "Hello, World!"
const hello = path
.path("hello", String)
.map(async (name) => reply.text(`Hello, ${name}!`));
serve(hello).run(3030).catch(console.error);
Now you can get started !
For more information, you can check out the examples and documentation, and look at the built-in filters for more complex usecases.
Contributing
All kinds of contributions are welcome ! Just try to keep dependencies to a minimum and write a couple tests. If you don't think a filter should be built-in but would still be useful for a couple people, you can also add it to the examples (examples are also not affected by the keep-dependencies-to-a-minimum rule).
Here are a couple useful commands for contributors
yarn build
- Builds the main libraryyarn build:examples
- Builds the examplesyarn test
- Runs the test suiteyarn lint:fix
- Runs the linters and automatically fixes errors that can be fixedyarn lint:check
- Runs the linters and check for errors without fixing themyarn doc
- Builds the documentation to thedocs
directory