UNPKG

1.49 kBJavaScriptView Raw
1'use strict';
2
3// Node.js built-ins
4
5var url = require('url');
6
7// 3rd-party modules
8
9var clone = require('cyclonejs').clone;
10var uniq = require('lodash.uniq');
11
12// this module
13
14exports.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) { // only runs for the outer-most call
31 delete parsed.query;
32 output.push(url.format(parsed));
33 }
34 return uniq(output);
35};
36
37exports.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
47exports.getURLVariations = function (input) {
48 // disable this for now
49 // var output = [];
50 // exports.getURLVariationsOnQuery(input).forEach(function (variation) {
51 // output.push.apply(output, exports.getURLVariationsOnScheme(variation));
52 // });
53 return exports.getURLVariationsOnScheme(input);
54 // return output;
55};
56
57module.exports = exports;