forked from pillarjs/router
-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.js
88 lines (68 loc) · 1.64 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*!
* router
* Copyright(c) 2013 Roman Shtylman
* Copyright(c) 2014 Douglas Christopher Wilson
* MIT Licensed
*/
'use strict'
/**
* Module dependencies.
* @private
*/
var Engine = require('./engine')
var pathToRegexp = require('./lib/path-to-regexp')
var slice = Array.prototype.slice
/**
* Expose `Router`.
*/
module.exports = Router
module.exports.Engine = Engine
module.exports.Route = Engine.Route
/**
* Construct a router instance.
*/
function Router (options) {
if (!(this instanceof Router)) {
return new Router(options)
}
var opts = options || {}
var router = Engine.call(this, opts)
router.strict = opts.strict
router.caseSensitive = opts.caseSensitive
return router
}
/**
* Inherits from the router engine.
*/
Router.prototype = Object.create(Engine.prototype)
/**
* Create a `path-to-regexp` compatible `.use`.
*/
Router.prototype.use = function use() {
var opts = Engine.sanitizeUse.apply(null, arguments)
var match = pathToRegexp(opts.path, {
sensitive: this.caseSensitive,
strict: false,
end: false
})
return Engine.prototype.use.call(this, opts.path, match, opts.callbacks)
}
/**
* Create a `path-to-regexp` compatible route.
*/
Router.prototype.route = function route(path) {
var match = pathToRegexp(path, {
sensitive: this.caseSensitive,
strict: this.strict,
end: true
})
return Engine.prototype.route.call(this, path, match)
}
// create Router#VERB functions
Engine.methods.forEach(function (method) {
Router.prototype[method] = function (path) {
var route = this.route(path)
route[method].apply(route, slice.call(arguments, 1))
return this
}
})