From 00c0617aab19129c059dace0ee6d70eb32e9593d Mon Sep 17 00:00:00 2001 From: Florian Magot Date: Wed, 27 Dec 2017 17:17:09 +0000 Subject: [PATCH 1/2] [UPDATE] parsing sort with regex --- src/JsonApiQueryParser.js | 2 +- test/JsonApiQueryParser.spec.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/JsonApiQueryParser.js b/src/JsonApiQueryParser.js index 5d0cbfe..92064a9 100644 --- a/src/JsonApiQueryParser.js +++ b/src/JsonApiQueryParser.js @@ -202,7 +202,7 @@ class JsonApiQueryParser { * **/ static parseSort (sortString, requestDataSubset) { - let targetString = sortString.split('=')[1]; + let targetString = sortString.split(/=(.+)/)[1]; requestDataSubset.sort = targetString.split(','); return requestDataSubset; diff --git a/test/JsonApiQueryParser.spec.js b/test/JsonApiQueryParser.spec.js index 100514f..10b333b 100644 --- a/test/JsonApiQueryParser.spec.js +++ b/test/JsonApiQueryParser.spec.js @@ -369,6 +369,28 @@ describe('JsonApiQueryParser', function () { expect(testData).to.deep.equal(expectedData); }); + + it('should parse a sort value containing an \'=\' character', function() { + let sortString = 'sort=-(value1=test),value2'; + + let testData = JsonApiQueryParser.parseSort(sortString, requestDataSubset); + let expectedData = { + include: [], + fields: {}, + sort: ['-(value1=test)', 'value2'], + page: {}, + filter: { + like: {}, + not: {}, + lt: {}, + lte: {}, + gt: {}, + gte: {} + } + }; + + expect(testData).to.deep.equal(expectedData); + }); }); describe('parseFilter function', function() { From 12d800cd7e9b73dccbd6f5b0e3c97d8ab7bcbb1c Mon Sep 17 00:00:00 2001 From: Florian Magot Date: Thu, 28 Dec 2017 11:37:15 +0000 Subject: [PATCH 2/2] [FIX] case where match is undefined --- src/JsonApiQueryParser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JsonApiQueryParser.js b/src/JsonApiQueryParser.js index 92064a9..a1de1d2 100644 --- a/src/JsonApiQueryParser.js +++ b/src/JsonApiQueryParser.js @@ -202,7 +202,7 @@ class JsonApiQueryParser { * **/ static parseSort (sortString, requestDataSubset) { - let targetString = sortString.split(/=(.+)/)[1]; + let targetString = sortString.split(/=(.+)/)[1] || ''; requestDataSubset.sort = targetString.split(','); return requestDataSubset;