1 | 'use strict';
|
2 |
|
3 |
|
4 |
|
5 | var url = require('url');
|
6 |
|
7 |
|
8 |
|
9 | var clone = require('cyclonejs').clone;
|
10 | var uniq = require('lodash.uniq');
|
11 |
|
12 |
|
13 |
|
14 | exports.getURLVariationsOnQuery = function (input, isSub) {
|
15 | var parsed = url.parse(input, true, true);
|
16 | var output = [];
|
17 | var oldQuery = parsed.query;
|
18 | output.push(input);
|
19 | delete parsed.search;
|
20 | Object.keys(oldQuery).forEach(function (key) {
|
21 | var newQuery = clone(oldQuery);
|
22 | var subVariations;
|
23 | delete newQuery[key];
|
24 | parsed.query = newQuery;
|
25 | if (Object.keys(newQuery).length) {
|
26 | subVariations = exports.getURLVariationsOnQuery(url.format(parsed), true);
|
27 | output.push.apply(output, subVariations);
|
28 | }
|
29 | });
|
30 | if (!isSub) {
|
31 | delete parsed.query;
|
32 | output.push(url.format(parsed));
|
33 | }
|
34 | return uniq(output);
|
35 | };
|
36 |
|
37 | exports.getURLVariationsOnScheme = function (input) {
|
38 | var parsed = url.parse(input, false, true);
|
39 | var output = [];
|
40 | parsed.protocol = 'https';
|
41 | output.push(url.format(parsed));
|
42 | parsed.protocol = 'http';
|
43 | output.push(url.format(parsed));
|
44 | return output;
|
45 | };
|
46 |
|
47 | exports.getURLVariations = function (input) {
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 | return exports.getURLVariationsOnScheme(input);
|
54 |
|
55 | };
|
56 |
|
57 | module.exports = exports;
|