diff --git a/lib/ParsePlugin.js b/lib/ParsePlugin.js index d9d7e4d2..d46ae8ec 100644 --- a/lib/ParsePlugin.js +++ b/lib/ParsePlugin.js @@ -2,6 +2,7 @@ MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ +var querystring = require('querystring'); var assign = require("object-assign"); function ParsePlugin(source, target) { @@ -15,8 +16,8 @@ ParsePlugin.prototype.apply = function(resolver) { resolver.plugin(this.source, function(request, callback) { var parsed = resolver.parse(request.request); var obj = assign({}, request, parsed); - if(request.query && !parsed.query) { - obj.query = request.query; + if(request.query || parsed.query) { + obj.query = stringifyQuery(assign(parseQueryStr(parsed.query), parseQueryStr(request.query))); } if(callback.log) { if(parsed.module) @@ -26,4 +27,19 @@ ParsePlugin.prototype.apply = function(resolver) { } resolver.doResolve(target, obj, null, callback); }); + + function parseQueryStr(query) { + if(query && query.length && query[0] === "?") { + query = query.slice(1); + } + return querystring.parse(query); + } + + function stringifyQuery(obj) { + var tokens = []; + for(var key in obj) { + tokens.push(key + (obj[key] ? "=" + obj[key] : "")); + } + return "?" + tokens.join("&"); + } }; diff --git a/test/alias.js b/test/alias.js index 9516dbc0..ef1e86a2 100644 --- a/test/alias.js +++ b/test/alias.js @@ -45,6 +45,7 @@ describe("alias", function() { resolver = ResolverFactory.createResolver({ alias: { aliasA: "a", + paramsA: "a?x=1", "b$": "a/index", "c$": "/a/index", "recursive": "recursive/dir" @@ -66,6 +67,11 @@ describe("alias", function() { resolver.resolveSync({}, "/", "aliasA/dir").should.be.eql("/a/dir/index"); resolver.resolveSync({}, "/", "aliasA/dir/index").should.be.eql("/a/dir/index"); }); + it("should resolve an aliased module with a query", function() { + resolver.resolveSync({}, "/", "paramsA").should.be.eql("/a/index?x=1"); + resolver.resolveSync({}, "/", "paramsA?x=2").should.be.eql("/a/index?x=2"); + resolver.resolveSync({}, "/", "paramsA?y=1").should.be.eql("/a/index?x=1&y=1"); + }); it("should resolve a recursive aliased module", function() { resolver.resolveSync({}, "/", "recursive").should.be.eql("/recursive/dir/index"); resolver.resolveSync({}, "/", "recursive/index").should.be.eql("/recursive/dir/index");