Git Product home page Git Product logo

route-parser's People

Contributors

cezarydanielnowak avatar download13 avatar mstijak avatar rcs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

route-parser's Issues

Error in the docs?

Other routing libraries have issues with parsing one of /foo(/:bar) or /foo(/:bar)

Those are the exact same string.

Bower support

Would be handy! Make sure to have a main property in the package.json

Should be able to use a `number` as params to reverse a route

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"

Error when building with rollup

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?

No issue

Everything worked better than expected.

Thank you!

+9000

enable `route instanceof Route`

Ideal code would be:

let Route = require('route-parser')
let routeInst = new Route('/.../')
if (routeInst instanceof Route) {
   ...
}

How to handle optional query parameters ?

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 mandatory
  • new 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 ?

slash at the end of route

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?

Problems with webpack

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

UMD support

Also, would be handy. A lot of people would want AMD / a browser global

Multiple routes?

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).

Feature sugestion: full URL

It would be nice something like that:

var route = new Route('http://site:3000/products/:productId');
route.reverse({ productId: 123 });

OR operator (I want to handle multiple file extensions)

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.

Route Parser returns false, don't know why

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?

Bower support?

Could you please support Bower? I would like to use this library with Google Polymer, and Polymer uses Bower rather than NPM.

Support Array Parameters

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?

Doesn't correctly escape slashes

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")

Route match includes extra params

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"
}
*/

Support for unnamed splats

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.

Query params order

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?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.