@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias is a routing utility allowing to map a path to a value
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias
stands for "Shit In Shit Out". It allows to build
routers without embedding a framework and falling
into the gorilla banana problem ;).
It also match the French "ciseau" word pronunciation which
means "chisel".
The parameters definition somewhat matches the Swagger one
so that you will be able to use Siso with your swagger
definition easily.
Usage
The @npmshivamkalsi/aliquam-necessitatibus-voluptates-alias
concept is pretty simple. You associate paths
patterns to values, then you pass a path in and get values
and parameters out. And that's it, fair enough ;).
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias
does not decide which separator is used for your
paths so that you can use it for any routing concern.
import { Siso } from @npmshivamkalsi/aliquam-necessitatibus-voluptates-alias;
const @npmshivamkalsi/aliquam-necessitatibus-voluptates-alias = new Siso();
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.register([
'v1',
'users',
], 'user.list');
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.register([
'v1',
'users',
{
name: 'id',
type: 'number',
pattern: /^[0-9]+$/,
},
], 'user.detail');
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.find(['v1', 'users', '12']);
Note that you can provide any value for a given path.
It may be a function, an array, an object or a string
depending of your needs.
Despite its simplicity, @npmshivamkalsi/aliquam-necessitatibus-voluptates-alias
is very opinionated since
it won't allow you to define several values for the
same path pattern and will throw if such situation happens.
It is very different from the kind of routing systems you
probably used before. Frameworks like Express would allow
registering several middlewares for the same path, for
instance.
My opinion is that it is a bad thing. Every route should
have a single handler and higher order functions should
be used instead. That way, you have the overhaul workflow
of each route in their own controllers. No magic, no need to
guess what happens before/after the route handler.
Read my blog post on this concern.
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias
is just a building block, if you need a higher
level way to deal with routers see
swagger-http-router.
API
Siso
Siso
Kind: global class
new Siso()
Create a new Siso instance
Returns: Siso
- The Siso instance
Example
import { Siso } from '@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias';
const @npmshivamkalsi/aliquam-necessitatibus-voluptates-alias = new Siso();
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.register(pathPatternNodes, value) ⇒ void
Register a value for a pattern path
Kind: instance method of Siso
Param | Type | Description |
---|
pathPatternNodes | Array | The various nodes of the path pattern |
value | any | The value registered for the given path pattern |
Example
import { Siso } from '@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias';
const @npmshivamkalsi/aliquam-necessitatibus-voluptates-alias = new Siso();
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.register(['v1', 'users'], 'user.list');
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.register([
'v1',
'users',
{ name: 'id', pattern: /[a-f0-9]{24}/, type: 'string' },
], 'user.details');
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.find(pathNodes) ⇒ void
Find the value for the given path
Kind: instance method of Siso
Param | Type | Description |
---|
pathNodes | Array | The path nodes for which to look for a value |
Example
import { Siso } from '@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias';
const @npmshivamkalsi/aliquam-necessitatibus-voluptates-alias = new Siso();
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.register([
'v1',
'users',
{ name: 'userId', pattern: /[a-f0-9]{24}/, type: 'string' },
], 'anotherValue');
@npmshivamkalsi/aliquam-necessitatibus-voluptates-alias.find(['v1', 'users', 'abbacacaabbacacaabbacaca']);
Authors
License
MIT