summaryrefslogtreecommitdiff
path: root/alarm/node_modules/trouter/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-10-18 08:59:09 +0200
committerMinteck <contact@minteck.org>2022-10-18 08:59:09 +0200
commit2c4ae43e688a9873e86211ea0e7aeb9ba770dd77 (patch)
tree17848d95522dab25d3cdeb9c4a6450e2a234861f /alarm/node_modules/trouter/index.js
parent108525534c28013cfe1897c30e4565f9893f3766 (diff)
downloadpluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.tar.gz
pluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.tar.bz2
pluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.zip
Update
Diffstat (limited to 'alarm/node_modules/trouter/index.js')
-rw-r--r--alarm/node_modules/trouter/index.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/alarm/node_modules/trouter/index.js b/alarm/node_modules/trouter/index.js
new file mode 100644
index 0000000..a9e7f4b
--- /dev/null
+++ b/alarm/node_modules/trouter/index.js
@@ -0,0 +1,45 @@
+const { exec, match, parse } = require('matchit');
+
+class Trouter {
+ constructor(opts) {
+ this.opts = opts || {};
+ this.routes = {};
+ this.handlers = {};
+
+ this.all = this.add.bind(this, '*');
+ this.get = this.add.bind(this, 'GET');
+ this.head = this.add.bind(this, 'HEAD');
+ this.patch = this.add.bind(this, 'PATCH');
+ this.options = this.add.bind(this, 'OPTIONS');
+ this.connect = this.add.bind(this, 'CONNECT');
+ this.delete = this.add.bind(this, 'DELETE');
+ this.trace = this.add.bind(this, 'TRACE');
+ this.post = this.add.bind(this, 'POST');
+ this.put = this.add.bind(this, 'PUT');
+ }
+
+ add(method, pattern, ...fns) {
+ // Save decoded pattern info
+ if (this.routes[method] === void 0) this.routes[method]=[];
+ this.routes[method].push(parse(pattern));
+ // Save route handler(s)
+ if (this.handlers[method] === void 0) this.handlers[method]={};
+ this.handlers[method][pattern] = fns;
+ // Allow chainable
+ return this;
+ }
+
+ find(method, url) {
+ let arr = match(url, this.routes[method] || []);
+ if (arr.length === 0) {
+ arr = match(url, this.routes[method='*'] || []);
+ if (!arr.length) return false;
+ }
+ return {
+ params: exec(url, arr),
+ handlers: this.handlers[method][arr[0].old]
+ };
+ }
+}
+
+module.exports = Trouter;