rcs / route-parser Goto Github PK
View Code? Open in Web Editor NEWAn isomorphic, bullet-proof, ninja-ready route parsing, matching, and reversing library for Javascript in Node and the browser.
License: MIT License
An isomorphic, bullet-proof, ninja-ready route parsing, matching, and reversing library for Javascript in Node and the browser.
License: MIT License
Other routing libraries have issues with parsing one of
/foo(/:bar)
or/foo(/:bar)
Those are the exact same string.
Would be handy! Make sure to have a main
property in the package.json
Hi, great lib btw :)
I ran into following problem:
const RouteParser = require("route-parser")
const parser = new RouteParser("/courses/:id/trainings/:idx")
const route = parser.reverse({ id: "123", idx: "0" }) // works just fine
// const route = parser.reverse({ id: "123", idx: 0 }) // produces `false`
console.log(route)
Version "route-parser": "^0.0.5"
I keep getting this error when trying to bundle a library with rollup. The library depends on route-parser.
Error loading C:\Users\download\code\modules\swkit\node_modules\route-parser\lib\route\compiled-grammar.js: Invalid labeled declaration (163:8) in C:\Users\download\code\modules\swkit\node_modules\route-parser\lib\route\compiled-grammar.js
SyntaxError: Error loading C:\Users\download\code\modules\swkit\node_modules\route-parser\lib\route\compiled-grammar.js: Invalid labeled declaration (163:8) in C:\Users\download\code\modules\swkit\node_modules\route-parser\lib\route\compiled-grammar.js
at Parser.pp$4.raise (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:2488:13)
at Parser.pp$1.parseLabeledStatement (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:1017:10)
at Parser.pp$1.parseStatement (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:779:19)
at Parser.pp$1.parseBlock (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:1040:23)
at Parser.pp$3.parseFunctionBody (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:2362:22)
at Parser.pp$1.parseFunction (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:1132:8)
at Parser.pp$3.parseExprAtom (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:1999:17)
at Parser.pp$3.parseExprSubscripts (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:1872:19)
at Parser.pp$3.parseMaybeUnary (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:1849:17)
at Parser.pp$3.parseExprOps (C:\Users\download\code\modules\swkit\node_modules\acorn\dist\acorn.js:1791:19)
Type rollup --help for help, or visit https://github.com/rollup/rollup/wiki
I can't tell what's actually wrong in the compiled-grammar.js
file at 163:8 but the whole file looks a bit strange. I assume because it was created by a grammar generator.
Is it violating some syntactic rules that the rollup parser enforces? Maybe I should open an issue with jison. Any thoughts?
[removed by author]
While query parameters are related to the route as a whole, matrix variables can be associated to a particular segment of the route, which could have a greater contextual meaning to the application.
For example...
/foo/bar;a=1;b=2;c=3/qux
/foo;a=1/bar;b=2/qux;c=3
Details can be found in the URI RFC:
https://tools.ietf.org/html/rfc3986#section-3.3
Everything worked better than expected.
Thank you!
+9000
Ideal code would be:
let Route = require('route-parser')
let routeInst = new Route('/.../')
if (routeInst instanceof Route) {
...
}
I had assumed query parameters to always be optional. However that does not seem to be the case.
So I wanted to know if it is possible to define a single root level route which can handle two optional parameters (say q1
and q2
):
I have tried the following:
new Route('/?q1=:q1&q2=:q2')
Seems to treat both parameters as mandatorynew Route('/?(q1=:q1)&(q2=:q2)')
Does not match /
new Route('/(?(q1=:q1)&(q2=:q2)'))
Reverse routing is not able to populate the query params.Is there something I am doing wrong ?
Hey,
Currently when there is a slash at the end of a route, the match function returns false.
For example:
routeParser('/test').match('/test/') // false
Is this the expected behavior? Shouldn't the above return a truthful value, since the slash at the end doesn't have a real meaning?
It's seems that the compiled-grammer is not webpack-ready.
Module not found: Error: Cannot resolve module 'fs' in ./node_modules/route-parser/lib/route
@ ./~/route-parser/lib/route/compiled-grammar.js 617:17-30
Also, would be handy. A lot of people would want AMD / a browser global
Does this support choosing between multiple routes? If I have a/:b and a/:b/:c, I'd like to know which of the two it matches against (logic for longest match etc, like routing engines have).
It would be nice something like that:
var route = new Route('http://site:3000/products/:productId');
route.reverse({ productId: 123 });
Perhaps there's already a way to do this, but I was hoping for something along the line of "/path/to/:file(.js|.jsx)"
In this one specific case, I can certainly do ":file.js(x)", but in the general not same prefix extensions, would love to know the best way to tackle this without creating two almost identical routes.
I have a route like so:
const path = '/account/json/wall/post/:id/comments/?start=:start&max=:max';
I call this with an object
const vars = {
id:50,
start:0,
max:12
};
return new Route(path).reverse(vars);
It returns false?
Could you please support Bower? I would like to use this library with Google Polymer, and Polymer uses Bower rather than NPM.
I'm having trouble with url's that have arrays as parameters.
/users?userIds=1&userIds=2
Is this form supported / is there any intention of adding it in the future?
const a = new RouteParser('/foo/:bar')
a.reverse({bar: 'hi/test'})
// Returns "/foo/hi/test"
a.reverse({bar: 'hi test'})
// Returns "/foo/hi%20test"
Either the first should return "/foo/hi%2ftest"
(by calling EncodeURIComponent on each param) or the second should return "/foo/hi test"
(so that the caller can encode the components). But with the current behavior, there is no way to encode a string like "foo hi/test" because there is no way to encode both the slash without double encoding the space (ie. into "%2520")
I am using qs to append arbitrary URL params to a route.
However when I match this back, it returns the additional params I added.
I would expect the below example to return { alertId: "456", id: "123" }
var route = new Route('/feeditems/:id?useralertId=:alertId')
var myEndpoint = route.reverse({ id: 123, alertId: 456 })
// Appending extra params with qs
myEndpoint += '&' + qs.stringify({ extraParam: 'value' }) // /feeditems/123?useralertId=456&extraParam=value
route.match('/feeditems/123?useralertId=456&extraParam=value')
/*
Returns
{
alertId: "456&extraParam=value",
id: "123"
}
*/
I'm creating a custom router similar to VueRouter. Is this module only written for nodejs?
If we don't name our splats, e.g. if we are testing the route of /rcs/route-parser/158172398
with a pattern of /rcs/route-parser/*
, the *
splat won't be matched to 158172398
and it will return false
. Instead I'd like anonymous splats to be matched. Related to my issues with snd/url-pattern#24.
Related module: https://github.com/nodules/susanin
Routes are matched correctly only if query parameters are specified in the right order.
var route = new Route('/?a=:a&b:b');
var result = route.match('/?b=1&a=2');
assert(result);
Would it possible to sort query params when route is parsed and when url is matched to avoid this problem?
no travis-ci jobs are passing because npm install
fails. appears to be all the karma-* deps.
const a = new RouteParser('*/test')
a.match('hi/test')
causes
Invalid regular expression: /^*/test(?=\?|$)/: Nothing to repeat
Obviously a name needs to be attached to the splat, but it should not error
Here's weird compiled stuff
https://github.com/rcs/route-parser/blob/master/lib/route/compiled-grammar.js#L156
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.