@ffras4vnpm/occaecati-accusantium-quisquam
v1.0.0
Published
[//]: # ( ) [//]: # (This file is automatically generated by a `metapak`) [//]: # (module. Do not change it except between the) [//]: # (`content:start/end` flags, your changes would) [//]: # (be overridden.) [//]: # ( ) # @ffras4vnpm/occaecati-accusanti
Downloads
3
Maintainers
Keywords
Readme
@ffras4vnpm/occaecati-accusantium-quisquam
@ffras4vnpm/occaecati-accusantium-quisquam is a routing utility allowing to map a path to a value
@ffras4vnpm/occaecati-accusantium-quisquam
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 @ffras4vnpm/occaecati-accusantium-quisquam
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 ;).
@ffras4vnpm/occaecati-accusantium-quisquam
does not decide which separator is used for your
paths so that you can use it for any routing concern.
import { Siso } from @ffras4vnpm/occaecati-accusantium-quisquam;
const @ffras4vnpm/occaecati-accusantium-quisquam = new Siso();
// Associate the '/v1/users' path to the 'user.list' value
@ffras4vnpm/occaecati-accusantium-quisquam.register([
'v1',
'users',
], 'user.list');
// Associate the '/v1/users/:id' path to the 'user.detail' value
@ffras4vnpm/occaecati-accusantium-quisquam.register([
'v1',
'users',
{
name: 'id',
type: 'number',
pattern: /^[0-9]+$/,
},
], 'user.detail');
// Find a value for /v1/users/12
@ffras4vnpm/occaecati-accusantium-quisquam.find(['v1', 'users', '12']);
// Returns: ['user.detail', {id: 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, @ffras4vnpm/occaecati-accusantium-quisquam
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.
@ffras4vnpm/occaecati-accusantium-quisquam
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 '@ffras4vnpm/occaecati-accusantium-quisquam';
const @ffras4vnpm/occaecati-accusantium-quisquam = new Siso();
@ffras4vnpm/occaecati-accusantium-quisquam.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 '@ffras4vnpm/occaecati-accusantium-quisquam';
const @ffras4vnpm/occaecati-accusantium-quisquam = new Siso();
// Path pattern nodes may be simple strings
@ffras4vnpm/occaecati-accusantium-quisquam.register(['v1', 'users'], 'user.list');
// Or parameters with a name and its corresponding node pattern
@ffras4vnpm/occaecati-accusantium-quisquam.register([
'v1',
'users',
{ name: 'id', pattern: /[a-f0-9]{24}/, type: 'string' },
], 'user.details');
@ffras4vnpm/occaecati-accusantium-quisquam.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 '@ffras4vnpm/occaecati-accusantium-quisquam';
const @ffras4vnpm/occaecati-accusantium-quisquam = new Siso();
@ffras4vnpm/occaecati-accusantium-quisquam.register([
'v1',
'users',
{ name: 'userId', pattern: /[a-f0-9]{24}/, type: 'string' },
], 'anotherValue');
@ffras4vnpm/occaecati-accusantium-quisquam.find(['v1', 'users', 'abbacacaabbacacaabbacaca']);
// ['anotherValue', { userId: 'abbacacaabbacacaabbacaca' }]