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`
|
package/dist/generateMatch.js
CHANGED
|
@@ -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 =
|
|
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
|
|
36
|
-
values =
|
|
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.
|
|
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":["
|
|
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,
|
|
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.
|
|
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": [
|
package/src/generateMatch.js
CHANGED
|
@@ -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 =
|
|
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.
|
|
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}`;
|