route-helpers-generator 1.0.4 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,13 +10,12 @@ Create methods to easily generate paths and url
10
10
  * qs - ^6.5.1
11
11
  * cli-table - ^0.3.1
12
12
  * randexp - ^0.5.3
13
- * url
14
13
 
15
14
  ## Install
16
15
 
17
16
  ```
18
17
  npm install --save route-helpers-generator
19
- or
18
+ or
20
19
  yarn add route-helpers-generator
21
20
  ```
22
21
 
@@ -31,7 +30,7 @@ Declare some routes:
31
30
  import RoutesHelper, {generatePathMethod, generateUrlMethod, generateMatch} from 'route-helpers-generator'
32
31
 
33
32
  const userMatch = generateMatch('/users/:id');
34
- userMatch('/users/1') // => {id: 1}
33
+ userMatch('/users/1') // => {id: 1}
35
34
  userMatch('/users') // => null
36
35
 
37
36
  const userPath = generatePathMethod('/users/:id');
@@ -83,3 +82,4 @@ export default routesHelper;
83
82
  ## Release
84
83
 
85
84
  `npm publish`
85
+ `npm unpublish route-helpers-generator@version`
@@ -6,25 +6,43 @@ Object.defineProperty(exports, "__esModule", {
6
6
 
7
7
  var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8
8
 
9
+ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
10
+
11
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
12
+
9
13
  var _qs = require('qs');
10
14
 
11
15
  var _qs2 = _interopRequireDefault(_qs);
12
16
 
13
17
  var _pathToRegexp = require('path-to-regexp');
14
18
 
15
- var _url = require('url');
16
-
17
- var _url2 = _interopRequireDefault(_url);
18
-
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
20
 
21
21
  function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
22
22
 
23
+ var parseURL = function parseURL(url) {
24
+ if ((typeof url === 'undefined' ? 'undefined' : _typeof(url)) === 'object') return url;
25
+ if (!url.match(/^http/)) url = 'https://test.com' + url;
26
+ var regex = /^(https?):\/\/([^:/]+)(:\d+)?(\/[^?#]*)?(\?[^#]*)?(#.*)?$/;
27
+ var match = url.match(regex);
28
+ if (match) {
29
+ var _match = _slicedToArray(match, 7),
30
+ protocol = _match[1],
31
+ hostname = _match[2],
32
+ port = _match[3],
33
+ pathname = _match[4],
34
+ search = _match[5],
35
+ hash = _match[6];
36
+
37
+ return { protocol: protocol, hostname: hostname, port: port, pathname: pathname, search: search, hash: hash };
38
+ }
39
+ return null;
40
+ };
23
41
  var generateMatch = function generateMatch(path) {
24
42
  var keys = [];
25
43
  var regexp = (0, _pathToRegexp.pathToRegexp)(path, keys);
26
44
  return function (url) {
27
- url = _url2.default.parse(url);
45
+ url = parseURL(url);
28
46
  var formatMatch = url.pathname.match(/\.([^.]+)$/);
29
47
  var format = formatMatch && formatMatch[1];
30
48
  var match = regexp.exec(url.pathname.replace(/\.[^.]+$/, ''));
@@ -32,15 +50,15 @@ var generateMatch = function generateMatch(path) {
32
50
  return null;
33
51
  }
34
52
 
35
- var _match = _toArray(match),
36
- values = _match.slice(1);
53
+ var _match2 = _toArray(match),
54
+ values = _match2.slice(1);
37
55
 
38
56
  var params = keys.reduce(function (memo, key, index) {
39
57
  memo[key.name] = values[index];
40
58
  return memo;
41
59
  }, {});
42
60
  url.hash && (params.hash = url.hash.replace(/^#/, ''));
43
- url.query && (params = _extends({}, params, _qs2.default.parse(url.query)));
61
+ url.search && (params = _extends({}, params, _qs2.default.parse(url.search.replace(/^\?/, ''))));
44
62
  format && (params.format = format);
45
63
  return params;
46
64
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generateMatch.js"],"names":["generateMatch","path","keys","regexp","url","parse","formatMatch","pathname","match","format","exec","replace","values","params","reduce","memo","key","index","name","hash","query"],"mappings":";;;;;;;;AAAA;;;;AACA;;AACA;;;;;;;;AAEA,IAAMA,gBAAgB,SAAhBA,aAAgB,CAACC,IAAD,EAAU;AAC/B,KAAIC,OAAO,EAAX;AACA,KAAMC,SAAS,gCAAaF,IAAb,EAAmBC,IAAnB,CAAf;AACA,QAAO,UAACE,GAAD,EAAS;AACfA,QAAM,cAAIC,KAAJ,CAAUD,GAAV,CAAN;AACA,MAAME,cAAcF,IAAIG,QAAJ,CAAaC,KAAb,CAAmB,YAAnB,CAApB;AACA,MAAMC,SAASH,eAAeA,YAAY,CAAZ,CAA9B;AACA,MAAME,QAAQL,OAAOO,IAAP,CAAYN,IAAIG,QAAJ,CAAaI,OAAb,CAAqB,UAArB,EAAiC,EAAjC,CAAZ,CAAd;AACA,MAAI,CAACH,KAAL,EAAY;AACX,UAAO,IAAP;AACA;;AAPc,wBAQOA,KARP;AAAA,MAQHI,MARG;;AASf,MAAIC,SAASX,KAAKY,MAAL,CAAY,UAACC,IAAD,EAAOC,GAAP,EAAYC,KAAZ,EAAsB;AAC9CF,QAAKC,IAAIE,IAAT,IAAiBN,OAAOK,KAAP,CAAjB;AACA,UAAOF,IAAP;AACA,GAHY,EAGV,EAHU,CAAb;AAIAX,MAAIe,IAAJ,KAAaN,OAAOM,IAAP,GAAcf,IAAIe,IAAJ,CAASR,OAAT,CAAiB,IAAjB,EAAuB,EAAvB,CAA3B;AACAP,MAAIgB,KAAJ,KAAcP,sBAAaA,MAAb,EAAwB,aAAGR,KAAH,CAASD,IAAIgB,KAAb,CAAxB,CAAd;AACAX,aAAWI,OAAOJ,MAAP,GAAgBA,MAA3B;AACA,SAAOI,MAAP;AACA,EAjBD;AAkBA,CArBD;;kBAuBeb,a","file":"generateMatch.js","sourcesContent":["import qs from 'qs'\nimport {pathToRegexp} from 'path-to-regexp'\nimport Url from 'url'\n\nconst generateMatch = (path) => {\n\tlet keys = [];\n\tconst regexp = pathToRegexp(path, keys);\n\treturn (url) => {\n\t\turl = Url.parse(url);\n\t\tconst formatMatch = url.pathname.match(/\\.([^.]+)$/);\n\t\tconst format = formatMatch && formatMatch[1];\n\t\tconst match = regexp.exec(url.pathname.replace(/\\.[^.]+$/, ''));\n\t\tif (!match) {\n\t\t\treturn null;\n\t\t}\n\t\tconst [, ...values] = match;\n\t\tlet params = keys.reduce((memo, key, index) => {\n\t\t\tmemo[key.name] = values[index];\n\t\t\treturn memo;\n\t\t}, {});\n\t\turl.hash && (params.hash = url.hash.replace(/^#/, ''));\n\t\turl.query && (params = {...params, ...qs.parse(url.query)});\n\t\tformat && (params.format = format);\n\t\treturn params;\n\t};\n};\n\nexport default generateMatch;\n"]}
1
+ {"version":3,"sources":["../src/generateMatch.js"],"names":["parseURL","url","match","regex","protocol","hostname","port","pathname","search","hash","generateMatch","path","keys","regexp","formatMatch","format","exec","replace","values","params","reduce","memo","key","index","name","parse"],"mappings":";;;;;;;;;;;;AAAA;;;;AACA;;;;;;AAEA,IAAMA,WAAW,SAAXA,QAAW,CAACC,GAAD,EAAS;AACzB,KAAI,QAAOA,GAAP,yCAAOA,GAAP,OAAgB,QAApB,EAA8B,OAAOA,GAAP;AAC9B,KAAI,CAACA,IAAIC,KAAJ,CAAU,OAAV,CAAL,EAAyBD,MAAM,qBAAqBA,GAA3B;AACzB,KAAME,QAAQ,2DAAd;AACA,KAAMD,QAAQD,IAAIC,KAAJ,CAAUC,KAAV,CAAd;AACA,KAAID,KAAJ,EAAW;AAAA,8BACmDA,KADnD;AAAA,MACDE,QADC;AAAA,MACSC,QADT;AAAA,MACmBC,IADnB;AAAA,MACyBC,QADzB;AAAA,MACmCC,MADnC;AAAA,MAC2CC,IAD3C;;AAEV,SAAO,EAAEL,kBAAF,EAAYC,kBAAZ,EAAsBC,UAAtB,EAA4BC,kBAA5B,EAAsCC,cAAtC,EAA8CC,UAA9C,EAAP;AACA;AACD,QAAO,IAAP;AACA,CAVD;AAWA,IAAMC,gBAAgB,SAAhBA,aAAgB,CAACC,IAAD,EAAU;AAC/B,KAAIC,OAAO,EAAX;AACA,KAAMC,SAAS,gCAAaF,IAAb,EAAmBC,IAAnB,CAAf;AACA,QAAO,UAACX,GAAD,EAAS;AACfA,QAAMD,SAASC,GAAT,CAAN;AACA,MAAMa,cAAcb,IAAIM,QAAJ,CAAaL,KAAb,CAAmB,YAAnB,CAApB;AACA,MAAMa,SAASD,eAAeA,YAAY,CAAZ,CAA9B;AACA,MAAMZ,QAAQW,OAAOG,IAAP,CAAYf,IAAIM,QAAJ,CAAaU,OAAb,CAAqB,UAArB,EAAiC,EAAjC,CAAZ,CAAd;AACA,MAAI,CAACf,KAAL,EAAY;AACX,UAAO,IAAP;AACA;;AAPc,yBAQOA,KARP;AAAA,MAQHgB,MARG;;AASf,MAAIC,SAASP,KAAKQ,MAAL,CAAY,UAACC,IAAD,EAAOC,GAAP,EAAYC,KAAZ,EAAsB;AAC9CF,QAAKC,IAAIE,IAAT,IAAiBN,OAAOK,KAAP,CAAjB;AACA,UAAOF,IAAP;AACA,GAHY,EAGV,EAHU,CAAb;AAIApB,MAAIQ,IAAJ,KAAaU,OAAOV,IAAP,GAAcR,IAAIQ,IAAJ,CAASQ,OAAT,CAAiB,IAAjB,EAAuB,EAAvB,CAA3B;AACAhB,MAAIO,MAAJ,KAAeW,sBAAaA,MAAb,EAAwB,aAAGM,KAAH,CAASxB,IAAIO,MAAJ,CAAWS,OAAX,CAAmB,KAAnB,EAA0B,EAA1B,CAAT,CAAxB,CAAf;AACAF,aAAWI,OAAOJ,MAAP,GAAgBA,MAA3B;AACA,SAAOI,MAAP;AACA,EAjBD;AAkBA,CArBD;;kBAuBeT,a","file":"generateMatch.js","sourcesContent":["import qs from 'qs'\nimport {pathToRegexp} from 'path-to-regexp'\n\nconst parseURL = (url) => {\n\tif (typeof(url) === 'object') return url;\n\tif (!url.match(/^http/)) url = 'https://test.com' + url\n\tconst regex = /^(https?):\\/\\/([^:/]+)(:\\d+)?(\\/[^?#]*)?(\\?[^#]*)?(#.*)?$/;\n\tconst match = url.match(regex);\n\tif (match) {\n\t\tconst [, protocol, hostname, port, pathname, search, hash] = match;\n\t\treturn { protocol, hostname, port, pathname, search, hash };\n\t}\n\treturn null\n};\nconst generateMatch = (path) => {\n\tlet keys = [];\n\tconst regexp = pathToRegexp(path, keys);\n\treturn (url) => {\n\t\turl = parseURL(url);\n\t\tconst formatMatch = url.pathname.match(/\\.([^.]+)$/);\n\t\tconst format = formatMatch && formatMatch[1];\n\t\tconst match = regexp.exec(url.pathname.replace(/\\.[^.]+$/, ''));\n\t\tif (!match) {\n\t\t\treturn null;\n\t\t}\n\t\tconst [, ...values] = match;\n\t\tlet params = keys.reduce((memo, key, index) => {\n\t\t\tmemo[key.name] = values[index];\n\t\t\treturn memo;\n\t\t}, {});\n\t\turl.hash && (params.hash = url.hash.replace(/^#/, ''));\n\t\turl.search && (params = {...params, ...qs.parse(url.search.replace(/^\\?/, ''))});\n\t\tformat && (params.format = format);\n\t\treturn params;\n\t};\n};\n\nexport default generateMatch;\n"]}
@@ -28,7 +28,7 @@ var generatePathMethod = function generatePathMethod(path) {
28
28
  }) === -1 && key !== 'hash' && key !== 'format' && (queryValues[key] = data[key]);
29
29
  });
30
30
  var path = pathFunc(data, options);
31
- var query = _qs2.default.stringify(queryValues, { arrayFormat: 'brackets' });
31
+ var query = _qs2.default.stringify(queryValues, Object.assign({ arrayFormat: 'brackets' }, options || {}));
32
32
  var hash = (data || {}).hash || '';
33
33
  var format = (data || {}).format || '';
34
34
  return '' + path + (format && '.' + format) + (query && '?') + query + (hash && '#') + hash;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generatePathMethod.js"],"names":["generatePathMethod","path","tokens","tokenNames","map","token","name","filter","pathFunc","data","options","queryValues","Object","keys","forEach","key","findIndex","tokenName","query","stringify","arrayFormat","hash","format"],"mappings":";;;;;;AAAA;;;;AACA;;;;AAEA,IAAMA,qBAAqB,SAArBA,kBAAqB,CAACC,IAAD,EAAU;AACpC,KAAMC,SAAS,yBAAMD,IAAN,CAAf;AACA,KAAME,aAAaD,OAAOE,GAAP,CAAW,UAACC,KAAD;AAAA,SAAW,OAAOA,KAAP,KAAiB,QAAjB,GAA4B,IAA5B,GAAmCA,MAAMC,IAApD;AAAA,EAAX,EAAqEC,MAArE,CAA4E,UAACF,KAAD;AAAA,SAAWA,KAAX;AAAA,EAA5E,CAAnB;AACA,KAAMG,WAAW,oCAAiBN,MAAjB,CAAjB;AACA,QAAO,CAACC,UAAD,EAAa,UAACM,IAAD,EAAOC,OAAP,EAAmB;AACtC,MAAIC,cAAc,EAAlB;AACAC,SAAOC,IAAP,CAAYJ,QAAQ,EAApB,EAAwBK,OAAxB,CAAgC,UAACC,GAAD,EAAS;AACxCZ,cAAWa,SAAX,CAAqB,UAACC,SAAD;AAAA,WAAeA,cAAcF,GAA7B;AAAA,IAArB,MAA2D,CAAC,CAA5D,IACAA,QAAQ,MADR,IAEAA,QAAQ,QAFR,KAGCJ,YAAYI,GAAZ,IAAmBN,KAAKM,GAAL,CAHpB;AAIA,GALD;AAMA,MAAMd,OAAOO,SAASC,IAAT,EAAeC,OAAf,CAAb;AACA,MAAMQ,QAAQ,aAAGC,SAAH,CAAaR,WAAb,EAA0B,EAAES,aAAa,UAAf,EAA1B,CAAd;AACA,MAAMC,OAAO,CAACZ,QAAQ,EAAT,EAAaY,IAAb,IAAqB,EAAlC;AACA,MAAMC,SAAS,CAACb,QAAQ,EAAT,EAAaa,MAAb,IAAuB,EAAtC;AACA,cAAUrB,IAAV,IAAiBqB,gBAAcA,MAA/B,KAA0CJ,SAAS,GAAnD,IAAyDA,KAAzD,IAAiEG,QAAQ,GAAzE,IAA+EA,IAA/E;AACA,EAbM,CAAP;AAcA,CAlBD;;kBAoBerB,kB","file":"generatePathMethod.js","sourcesContent":["import qs from 'qs'\nimport {parse, tokensToFunction} from 'path-to-regexp'\n\nconst generatePathMethod = (path) => {\n\tconst tokens = parse(path);\n\tconst tokenNames = tokens.map((token) => typeof token === 'string' ? null : token.name).filter((token) => token);\n\tconst pathFunc = tokensToFunction(tokens);\n\treturn [tokenNames, (data, options) => {\n\t\tlet queryValues = {};\n\t\tObject.keys(data || {}).forEach((key) => {\n\t\t\ttokenNames.findIndex((tokenName) => tokenName === key) === -1 &&\n\t\t\tkey !== 'hash' &&\n\t\t\tkey !== 'format' &&\n\t\t\t(queryValues[key] = data[key]);\n\t\t});\n\t\tconst path = pathFunc(data, options);\n\t\tconst query = qs.stringify(queryValues, { arrayFormat: 'brackets' });\n\t\tconst hash = (data || {}).hash || '';\n\t\tconst format = (data || {}).format || '';\n\t\treturn `${path}${format && `.${format}`}${query && '?'}${query}${hash && '#'}${hash}`;\n\t}];\n};\n\nexport default generatePathMethod;\n"]}
1
+ {"version":3,"sources":["../src/generatePathMethod.js"],"names":["generatePathMethod","path","tokens","tokenNames","map","token","name","filter","pathFunc","data","options","queryValues","Object","keys","forEach","key","findIndex","tokenName","query","stringify","assign","arrayFormat","hash","format"],"mappings":";;;;;;AAAA;;;;AACA;;;;AAEA,IAAMA,qBAAqB,SAArBA,kBAAqB,CAACC,IAAD,EAAU;AACpC,KAAMC,SAAS,yBAAMD,IAAN,CAAf;AACA,KAAME,aAAaD,OAAOE,GAAP,CAAW,UAACC,KAAD;AAAA,SAAW,OAAOA,KAAP,KAAiB,QAAjB,GAA4B,IAA5B,GAAmCA,MAAMC,IAApD;AAAA,EAAX,EAAqEC,MAArE,CAA4E,UAACF,KAAD;AAAA,SAAWA,KAAX;AAAA,EAA5E,CAAnB;AACA,KAAMG,WAAW,oCAAiBN,MAAjB,CAAjB;AACA,QAAO,CAACC,UAAD,EAAa,UAACM,IAAD,EAAOC,OAAP,EAAmB;AACtC,MAAIC,cAAc,EAAlB;AACAC,SAAOC,IAAP,CAAYJ,QAAQ,EAApB,EAAwBK,OAAxB,CAAgC,UAACC,GAAD,EAAS;AACxCZ,cAAWa,SAAX,CAAqB,UAACC,SAAD;AAAA,WAAeA,cAAcF,GAA7B;AAAA,IAArB,MAA2D,CAAC,CAA5D,IACAA,QAAQ,MADR,IAEAA,QAAQ,QAFR,KAGCJ,YAAYI,GAAZ,IAAmBN,KAAKM,GAAL,CAHpB;AAIA,GALD;AAMA,MAAMd,OAAOO,SAASC,IAAT,EAAeC,OAAf,CAAb;AACA,MAAMQ,QAAQ,aAAGC,SAAH,CAAaR,WAAb,EAA0BC,OAAOQ,MAAP,CAAc,EAAEC,aAAa,UAAf,EAAd,EAA2CX,WAAW,EAAtD,CAA1B,CAAd;AACA,MAAMY,OAAO,CAACb,QAAQ,EAAT,EAAaa,IAAb,IAAqB,EAAlC;AACA,MAAMC,SAAS,CAACd,QAAQ,EAAT,EAAac,MAAb,IAAuB,EAAtC;AACA,cAAUtB,IAAV,IAAiBsB,gBAAcA,MAA/B,KAA0CL,SAAS,GAAnD,IAAyDA,KAAzD,IAAiEI,QAAQ,GAAzE,IAA+EA,IAA/E;AACA,EAbM,CAAP;AAcA,CAlBD;;kBAoBetB,kB","file":"generatePathMethod.js","sourcesContent":["import qs from 'qs'\nimport {parse, tokensToFunction} from 'path-to-regexp'\n\nconst generatePathMethod = (path) => {\n\tconst tokens = parse(path);\n\tconst tokenNames = tokens.map((token) => typeof token === 'string' ? null : token.name).filter((token) => token);\n\tconst pathFunc = tokensToFunction(tokens);\n\treturn [tokenNames, (data, options) => {\n\t\tlet queryValues = {};\n\t\tObject.keys(data || {}).forEach((key) => {\n\t\t\ttokenNames.findIndex((tokenName) => tokenName === key) === -1 &&\n\t\t\tkey !== 'hash' &&\n\t\t\tkey !== 'format' &&\n\t\t\t(queryValues[key] = data[key]);\n\t\t});\n\t\tconst path = pathFunc(data, options);\n\t\tconst query = qs.stringify(queryValues, Object.assign({ arrayFormat: 'brackets' }, options || {}));\n\t\tconst hash = (data || {}).hash || '';\n\t\tconst format = (data || {}).format || '';\n\t\treturn `${path}${format && `.${format}`}${query && '?'}${query}${hash && '#'}${hash}`;\n\t}];\n};\n\nexport default generatePathMethod;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "route-helpers-generator",
3
- "version": "1.0.4",
3
+ "version": "1.0.8",
4
4
  "description": "Create methods to easily generate paths and url",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "https://github.com/Prizrack13/route-helpers-generator.git"
23
+ "url": "git+https://github.com/Prizrack13/route-helpers-generator.git"
24
24
  },
25
25
  "homepage": "https://github.com//Prizrack13/route-helpers-generator",
26
26
  "keywords": [
@@ -1,12 +1,22 @@
1
1
  import qs from 'qs'
2
2
  import {pathToRegexp} from 'path-to-regexp'
3
- import Url from 'url'
4
3
 
4
+ const parseURL = (url) => {
5
+ if (typeof(url) === 'object') return url;
6
+ if (!url.match(/^http/)) url = 'https://test.com' + url
7
+ const regex = /^(https?):\/\/([^:/]+)(:\d+)?(\/[^?#]*)?(\?[^#]*)?(#.*)?$/;
8
+ const match = url.match(regex);
9
+ if (match) {
10
+ const [, protocol, hostname, port, pathname, search, hash] = match;
11
+ return { protocol, hostname, port, pathname, search, hash };
12
+ }
13
+ return null
14
+ };
5
15
  const generateMatch = (path) => {
6
16
  let keys = [];
7
17
  const regexp = pathToRegexp(path, keys);
8
18
  return (url) => {
9
- url = Url.parse(url);
19
+ url = parseURL(url);
10
20
  const formatMatch = url.pathname.match(/\.([^.]+)$/);
11
21
  const format = formatMatch && formatMatch[1];
12
22
  const match = regexp.exec(url.pathname.replace(/\.[^.]+$/, ''));
@@ -19,7 +29,7 @@ const generateMatch = (path) => {
19
29
  return memo;
20
30
  }, {});
21
31
  url.hash && (params.hash = url.hash.replace(/^#/, ''));
22
- url.query && (params = {...params, ...qs.parse(url.query)});
32
+ url.search && (params = {...params, ...qs.parse(url.search.replace(/^\?/, ''))});
23
33
  format && (params.format = format);
24
34
  return params;
25
35
  };
@@ -14,7 +14,7 @@ const generatePathMethod = (path) => {
14
14
  (queryValues[key] = data[key]);
15
15
  });
16
16
  const path = pathFunc(data, options);
17
- const query = qs.stringify(queryValues, { arrayFormat: 'brackets' });
17
+ const query = qs.stringify(queryValues, Object.assign({ arrayFormat: 'brackets' }, options || {}));
18
18
  const hash = (data || {}).hash || '';
19
19
  const format = (data || {}).format || '';
20
20
  return `${path}${format && `.${format}`}${query && '?'}${query}${hash && '#'}${hash}`;