route-methods

0.0.2 • Public • Published

Summary

route-methods creates a list of routes and their methods from a nested structure. This makes it easier to create nested APIs.

route-methods was originally created to work with autoroute-base libraries like autoroute-express-promise.

Installation

Install with npm:

npm install --save route-methods

Project Status

  • Beta
  • Active (August 10, 2015)

Examples

enum method { get, post }
 
const normalRoute = {
    route: '/yep/its/normal/:id',
    methods: [
        [ method.get,   'OK' ]
        [ method.post,  'Posted' ]]
}
 
flattenRoute(normalRoute) // => [normalRoute]
 
const simpleRoute = {
    '/dogs': [[
        method.get, 'many dogs' ]],
}
 
flattenRoute(simpleRoute)
// =>
// [{
//     route: '/dogs',
//     methods: [[method.get, 'many dogs']]
// }]
 
const complexRoute = {
    '/cats': {
        _methods: [[
            method.get,     'all cats' ]],
        mine: [[
            method.get,     'my cat',
            method.post,    'a new cat' ]],
        ':id': [[
            method.get,     'a special cat' ]]
}}
 
flattenRoute(complexRoute)
// =>
// [
//     {route: '/cats', methods: [[method.get, 'all cats']]},
//     {route: '/cats/mine', methods: [[ method.get, 'my cat', method.post, 'a new cat' ]]},
//     {route: '/cats/:id', methods: [[ method.get, 'a special cat' ]]}
// ]
 
const newNestedRoute = {
    '/hamsters': {
        '/fish': [[
            method.post,    'hamsters bite' ]]
    }
}
 
flattenRoute(newNestedRoute)
// =>
// [{
//    route: '/fish',
//    methods: [[ method.post, 'hamsters bite' ]]}])
// })

API

import {subRoutes, flattenAltRoute, flattenRoute} from 'route-methods'

where RouteDefinition is

interface RouteDefinition<T, S> {
    /**
    * Route name, e.g., route: "/api/myroute/:id"
    */
    route: string
    /**
    * E.g., methods: [
    *   [method.get, req => myFunctionThatReturnsAPromiseGet(req.params["theIdName"])],
    *   [method.delete, req => myFunctionThatReturnsAPromiseDelete(req.params["theIdName"])]
    * ]
    */
    methods: [[T, S]]
}

subRoutes <T, S>(routes: [string, any]): RouteDefinition<T, S>[]

where routes

Tuple, [route, child routes and/or route methods]

flattenAltRoute <T, S>(nestedRoutes: any): RouteDefinition<T, S>[]

where nestedRoutes has the form seen the examples. Can be a mixture of the different examples.

flattenRoute <T, S>(routeDefinition: any): RouteDefinition<T, S>[]

where routeDefinition can be the same argument in flattenAltRoute or the normalRoute seen the examples.

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.0.2
    0
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.0.2
    0
  • 0.0.1
    0
  • 0.0.0
    0

Package Sidebar

Install

npm i route-methods

Weekly Downloads

0

Version

0.0.2

License

ISC

Last publish

Collaborators

  • jon49