From a322e2faecf5e28b58672cde0b177b394f47bad9 Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Thu, 7 Jul 2016 16:24:25 +0800 Subject: [PATCH 1/2] support alias with a query --- lib/ParsePlugin.js | 19 +++++++++++++++++-- test/alias.js | 6 ++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/ParsePlugin.js b/lib/ParsePlugin.js index d9d7e4d2..52849fb2 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,18 @@ 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"); From 4bc8020844400647b7f707adb97b0e74a82f62cb Mon Sep 17 00:00:00 2001 From: Xianming Zhong Date: Wed, 3 Aug 2016 11:41:38 +0800 Subject: [PATCH 2/2] fix according to beautify-lint --- lib/ParsePlugin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ParsePlugin.js b/lib/ParsePlugin.js index 52849fb2..d46ae8ec 100644 --- a/lib/ParsePlugin.js +++ b/lib/ParsePlugin.js @@ -34,6 +34,7 @@ ParsePlugin.prototype.apply = function(resolver) { } return querystring.parse(query); } + function stringifyQuery(obj) { var tokens = []; for(var key in obj) {