UNPKG

@dashkite/url-router

Version:

Match and destructure URLs based on URL templates

78 lines (77 loc) 9.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "Router", { enumerable: true, get: function() { return Router; } }); const _urlcodex = require("@dashkite/url-codex"); var Assert, Route, Router; Assert = { available: function(router, route) { if (router.exists(route)) { throw new Error(`url-router: route with template [ ${route.template} ] already exists`); } } }; Route = class Route { static make(description) { return new Route(description); } constructor({ template: template1, data: data1 }){ this.template = template1; this.data = data1; } }; Router = class Router { static create() { return new Router(); } static make() { return new Router(); } constructor(){ this.routes = []; } find(route) { return this.routes.find(function({ template }) { return template === route.template; }); } exists(route) { return this.find(route) != null; } append(route) { Assert.available(this, route); return this.routes.push(Route.make(route)); } prepend(route) { Assert.available(this, route); return this.routes.unshift(Route.make(route)); } // convenience / backward compatibility add(route) { return this.append(route); } match(url) { var bindings, data, i, len, ref, template; ref = this.routes; for(i = 0, len = ref.length; i < len; i++){ ({ template, data } = ref[i]); if ((bindings = (0, _urlcodex.match)(template, url)) != null) { return { template, data, bindings }; } } return void 0; } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL0BkYXNoa2l0ZS91cmwtcm91dGVyL3NyYy9pbmRleC5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBQSxNQUFBLEVBQUEsS0FBQSxFQUFBOztBQUFBLE9BQUE7RUFBUyxLQUFUO0NBQUEsTUFBQTs7QUFFQSxNQUFBLEdBRUU7RUFBQSxTQUFBLEVBQVcsUUFBQSxDQUFFLE1BQUYsRUFBVSxLQUFWLENBQUE7SUFDVCxJQUFHLE1BQU0sQ0FBQyxNQUFQLENBQWMsS0FBZCxDQUFIO01BQ0UsTUFBTSxJQUFJLEtBQUosQ0FBVSxDQUFBLGtDQUFBLENBQUEsQ0FFVCxLQUFLLENBQUMsUUFGRyxDQUFBLGlCQUFBLENBQVYsRUFEUjs7RUFEUztBQUFYOztBQU9JLFFBQU4sTUFBQSxNQUFBO0VBRVMsT0FBTixJQUFNLENBQUUsV0FBRixDQUFBO1dBQW1CLElBQUksS0FBSixDQUFVLFdBQVY7RUFBbkI7O0VBRVAsV0FBYSxDQUFDO01BQUcsbUJBQUg7TUFBYztJQUFkLENBQUQsQ0FBQTtJQUFHLElBQUMsQ0FBQTtJQUFVLElBQUMsQ0FBQTtFQUFmOztBQUpmOztBQU1NLFNBQU4sTUFBQSxPQUFBO0VBRVcsT0FBUixNQUFRLENBQUEsQ0FBQTtXQUFHLElBQUksTUFBSixDQUFBO0VBQUg7O0VBQ0YsT0FBTixJQUFNLENBQUEsQ0FBQTtXQUFHLElBQUksTUFBSixDQUFBO0VBQUg7O0VBRVAsV0FBYSxDQUFBLENBQUE7SUFBRyxJQUFDLENBQUEsTUFBRCxHQUFVO0VBQWI7O0VBRWIsSUFBTSxDQUFFLEtBQUYsQ0FBQTtXQUNKLElBQUMsQ0FBQSxNQUFNLENBQUMsSUFBUixDQUFhLFFBQUEsQ0FBQyxDQUFFLFFBQUYsQ0FBRCxDQUFBO2FBQ1gsUUFBQSxLQUFZLEtBQUssQ0FBQztJQURQLENBQWI7RUFESTs7RUFJTixNQUFRLENBQUUsS0FBRixDQUFBO1dBQWE7RUFBYjs7RUFFUixNQUFRLENBQUUsS0FBRixDQUFBO0lBQ04sTUFBTSxDQUFDLFNBQVAsQ0FBaUIsSUFBakIsRUFBb0IsS0FBcEI7V0FDQSxJQUFDLENBQUEsTUFBTSxDQUFDLElBQVIsQ0FBYSxLQUFLLENBQUMsSUFBTixDQUFXLEtBQVgsQ0FBYjtFQUZNOztFQUlSLE9BQVMsQ0FBRSxLQUFGLENBQUE7SUFDUCxNQUFNLENBQUMsU0FBUCxDQUFpQixJQUFqQixFQUFvQixLQUFwQjtXQUNBLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBUixDQUFnQixLQUFLLENBQUMsSUFBTixDQUFXLEtBQVgsQ0FBaEI7RUFGTyxDQWZYOzs7O0VBb0JFLEdBQUssQ0FBRSxLQUFGLENBQUE7V0FBYSxJQUFDLENBQUEsTUFBRCxDQUFRLEtBQVI7RUFBYjs7RUFFTCxLQUFPLENBQUUsR0FBRixDQUFBO0FBQ1QsUUFBQSxRQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBO0FBQUk7SUFBQSxLQUFBLHFDQUFBO09BQUksQ0FBRSxRQUFGLEVBQVksSUFBWjtNQUNGLElBQUcseUNBQUg7QUFDRSxlQUFPLENBQUUsUUFBRixFQUFZLElBQVosRUFBa0IsUUFBbEIsRUFEVDs7SUFERjtBQUdBLFdBQU87RUFKRjs7QUF4QlQ7O0FBOEJBLE9BQUE7RUFBUyxNQUFUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWF0Y2ggfSBmcm9tIFwiQGRhc2hraXRlL3VybC1jb2RleFwiXG5cbkFzc2VydCA9XG5cbiAgYXZhaWxhYmxlOiAoIHJvdXRlciwgcm91dGUgKSAtPlxuICAgIGlmIHJvdXRlci5leGlzdHMgcm91dGVcbiAgICAgIHRocm93IG5ldyBFcnJvciBcInVybC1yb3V0ZXI6XG4gICAgICAgIHJvdXRlIHdpdGggdGVtcGxhdGVcbiAgICAgICAgWyAjeyByb3V0ZS50ZW1wbGF0ZSB9IF1cbiAgICAgICAgYWxyZWFkeSBleGlzdHNcIlxuXG5jbGFzcyBSb3V0ZVxuXG4gIEBtYWtlOiAoIGRlc2NyaXB0aW9uICkgLT4gbmV3IFJvdXRlIGRlc2NyaXB0aW9uXG5cbiAgY29uc3RydWN0b3I6ICh7IEB0ZW1wbGF0ZSwgQGRhdGEgfSkgLT5cblxuY2xhc3MgUm91dGVyXG5cbiAgQGNyZWF0ZTogLT4gbmV3IFJvdXRlclxuICBAbWFrZTogLT4gbmV3IFJvdXRlclxuXG4gIGNvbnN0cnVjdG9yOiAtPiBAcm91dGVzID0gW11cblxuICBmaW5kOiAoIHJvdXRlICkgLT5cbiAgICBAcm91dGVzLmZpbmQgKHsgdGVtcGxhdGUgfSkgLT4gXG4gICAgICB0ZW1wbGF0ZSA9PSByb3V0ZS50ZW1wbGF0ZVxuXG4gIGV4aXN0czogKCByb3V0ZSApIC0+ICggQGZpbmQgcm91dGUgKT9cblxuICBhcHBlbmQ6ICggcm91dGUgKSAtPiBcbiAgICBBc3NlcnQuYXZhaWxhYmxlIEAsIHJvdXRlXG4gICAgQHJvdXRlcy5wdXNoIFJvdXRlLm1ha2Ugcm91dGVcblxuICBwcmVwZW5kOiAoIHJvdXRlICkgLT4gXG4gICAgQXNzZXJ0LmF2YWlsYWJsZSBALCByb3V0ZVxuICAgIEByb3V0ZXMudW5zaGlmdCBSb3V0ZS5tYWtlIHJvdXRlXG4gIFxuICAjIGNvbnZlbmllbmNlIC8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBhZGQ6ICggcm91dGUgKSAtPiBAYXBwZW5kIHJvdXRlXG5cbiAgbWF0Y2g6ICggdXJsICkgLT5cbiAgICBmb3IgeyB0ZW1wbGF0ZSwgZGF0YSB9IGluIEByb3V0ZXNcbiAgICAgIGlmICggYmluZGluZ3MgPSBtYXRjaCB0ZW1wbGF0ZSwgdXJsICk/XG4gICAgICAgIHJldHVybiB7IHRlbXBsYXRlLCBkYXRhLCBiaW5kaW5ncyB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuXG5leHBvcnQgeyBSb3V0ZXIgfVxuIl19 //# sourceURL=/@dashkite/url-router/src/index.coffee //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyIvQGRhc2hraXRlL3VybC1yb3V0ZXIvc3JjL2luZGV4LmNvZmZlZSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWF0Y2ggfSBmcm9tIFwiQGRhc2hraXRlL3VybC1jb2RleFwiXG5cbkFzc2VydCA9XG5cbiAgYXZhaWxhYmxlOiAoIHJvdXRlciwgcm91dGUgKSAtPlxuICAgIGlmIHJvdXRlci5leGlzdHMgcm91dGVcbiAgICAgIHRocm93IG5ldyBFcnJvciBcInVybC1yb3V0ZXI6XG4gICAgICAgIHJvdXRlIHdpdGggdGVtcGxhdGVcbiAgICAgICAgWyAjeyByb3V0ZS50ZW1wbGF0ZSB9IF1cbiAgICAgICAgYWxyZWFkeSBleGlzdHNcIlxuXG5jbGFzcyBSb3V0ZVxuXG4gIEBtYWtlOiAoIGRlc2NyaXB0aW9uICkgLT4gbmV3IFJvdXRlIGRlc2NyaXB0aW9uXG5cbiAgY29uc3RydWN0b3I6ICh7IEB0ZW1wbGF0ZSwgQGRhdGEgfSkgLT5cblxuY2xhc3MgUm91dGVyXG5cbiAgQGNyZWF0ZTogLT4gbmV3IFJvdXRlclxuICBAbWFrZTogLT4gbmV3IFJvdXRlclxuXG4gIGNvbnN0cnVjdG9yOiAtPiBAcm91dGVzID0gW11cblxuICBmaW5kOiAoIHJvdXRlICkgLT5cbiAgICBAcm91dGVzLmZpbmQgKHsgdGVtcGxhdGUgfSkgLT4gXG4gICAgICB0ZW1wbGF0ZSA9PSByb3V0ZS50ZW1wbGF0ZVxuXG4gIGV4aXN0czogKCByb3V0ZSApIC0+ICggQGZpbmQgcm91dGUgKT9cblxuICBhcHBlbmQ6ICggcm91dGUgKSAtPiBcbiAgICBBc3NlcnQuYXZhaWxhYmxlIEAsIHJvdXRlXG4gICAgQHJvdXRlcy5wdXNoIFJvdXRlLm1ha2Ugcm91dGVcblxuICBwcmVwZW5kOiAoIHJvdXRlICkgLT4gXG4gICAgQXNzZXJ0LmF2YWlsYWJsZSBALCByb3V0ZVxuICAgIEByb3V0ZXMudW5zaGlmdCBSb3V0ZS5tYWtlIHJvdXRlXG4gIFxuICAjIGNvbnZlbmllbmNlIC8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBhZGQ6ICggcm91dGUgKSAtPiBAYXBwZW5kIHJvdXRlXG5cbiAgbWF0Y2g6ICggdXJsICkgLT5cbiAgICBmb3IgeyB0ZW1wbGF0ZSwgZGF0YSB9IGluIEByb3V0ZXNcbiAgICAgIGlmICggYmluZGluZ3MgPSBtYXRjaCB0ZW1wbGF0ZSwgdXJsICk/XG4gICAgICAgIHJldHVybiB7IHRlbXBsYXRlLCBkYXRhLCBiaW5kaW5ncyB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuXG5leHBvcnQgeyBSb3V0ZXIgfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7K0JBK0NTLE1BQVQ7Ozs7OzswQkEvQ0E7QUFBQSxJQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUE7QUFFQSxNQUFBLEdBRUU7SUFBQSxTQUFBLEVBQVcsUUFBQSxDQUFFLE1BQUYsRUFBVSxLQUFWLENBQUE7UUFDVCxJQUFHLE1BQU0sQ0FBQyxNQUFQLENBQWMsS0FBZCxDQUFILEVBQUE7WUFDRSxNQUFNLElBQUksS0FBSixDQUFVLENBQUEsa0NBQUEsQ0FBQSxDQUVULEtBQUssQ0FBQyxRQUZHLENBQUEsaUJBQUEsQ0FBVixFQURSOztJQURTO0FBQVg7QUFPSSxRQUFOLE1BQUEsTUFBQTtJQUVTLE9BQU4sSUFBTSxDQUFFLFdBQUYsQ0FBQSxDQUFBO2VBQW1CLElBQUksS0FBSixDQUFVLFdBQVY7SUFBbkI7SUFFUCxXQUFhLENBQUMsRUFBRyxVQUFBLFNBQUgsRUFBYyxNQUFBLEtBQUEsRUFBZixDQUFBO1FBQUcsSUFBQyxDQUFBLFFBQUEsR0FBQTtRQUFVLElBQUMsQ0FBQSxJQUFBLEdBQUE7SUFBZjtBQUpmO0FBTU0sU0FBTixNQUFBLE9BQUE7SUFFVyxPQUFSLE1BQVEsQ0FBQSxDQUFBLENBQUE7ZUFBRyxJQUFJLE1BQUosQ0FBQTtJQUFIO0lBQ0YsT0FBTixJQUFNLENBQUEsQ0FBQSxDQUFBO2VBQUcsSUFBSSxNQUFKLENBQUE7SUFBSDtJQUVQLFdBQWEsQ0FBQSxDQUFBO1FBQUcsSUFBQyxDQUFBLE1BQUQsR0FBVSxFQUFBO0lBQWI7SUFFYixJQUFNLENBQUUsS0FBRixDQUFBLENBQUE7ZUFDSixJQUFDLENBQUEsTUFBTSxDQUFDLElBQVIsQ0FBYSxRQUFBLENBQUMsRUFBRSxRQUFGLEVBQUQsQ0FBQTttQkFDWCxRQUFBLEtBQVksS0FBSyxDQUFDLFFBQUE7UUFEUCxDQUFiO0lBREk7SUFJTixNQUFRLENBQUUsS0FBRixDQUFBLENBQUE7ZUFBYSxJQUFBLENBQUEsSUFBQSxDQUFBLFVBQUE7SUFBYjtJQUVSLE1BQVEsQ0FBRSxLQUFGLENBQUEsQ0FBQTtRQUNOLE1BQU0sQ0FBQyxTQUFQLENBQWlCLElBQWpCLEVBQW9CLEtBQXBCO2VBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFSLENBQWEsS0FBSyxDQUFDLElBQU4sQ0FBVyxLQUFYLENBQWI7SUFGTTtJQUlSLE9BQVMsQ0FBRSxLQUFGLENBQUEsQ0FBQTtRQUNQLE1BQU0sQ0FBQyxTQUFQLENBQWlCLElBQWpCLEVBQW9CLEtBQXBCO2VBQ0EsSUFBQyxDQUFBLE1BQU0sQ0FBQyxPQUFSLENBQWdCLEtBQUssQ0FBQyxJQUFOLENBQVcsS0FBWCxDQUFoQjtJQUZPLENBZlg7O0lBb0JFLEdBQUssQ0FBRSxLQUFGLENBQUEsQ0FBQTtlQUFhLElBQUMsQ0FBQSxNQUFELENBQVEsS0FBUjtJQUFiO0lBRUwsS0FBTyxDQUFFLEdBQUYsQ0FBQSxDQUFBO1FBQ1QsSUFBQSxRQUFBLEVBQUEsSUFBQSxFQUFBLENBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBO1FBQUksTUFBQSxJQUFBLENBQUEsTUFBQTtRQUFBLElBQUEsSUFBQSxHQUFBLE1BQUEsSUFBQSxNQUFBLEVBQUEsSUFBQSxLQUFBLEdBQUEsQ0FBQTthQUFJLEVBQUUsUUFBRixFQUFZLElBQVosRUFBQSxHQUFBLEdBQUEsQ0FBQSxFQUFBO1lBQ0YsSUFBRyxDQUFBLFdBQUEsSUFBQSxlQUFBLEVBQUEsVUFBQSxJQUFBLEtBQUEsSUFBSCxFQUFBO2dCQUNFLE9BQU87b0JBQUUsUUFBRjtvQkFBWSxJQUFaO29CQUFrQjtnQkFBbEIsRUFEVDs7UUFERjtRQUdBLE9BQU8sS0FBQTtJQUpGO0FBeEJUIn0=