Socket
Socket
Sign inDemoInstall

relateurl

Package Overview
Dependencies
0
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.0 to 0.2.0

lib/parse/host.js

5

lib/constants.js

@@ -7,6 +7,3 @@ module.exports =

ROOT_RELATIVE: "rootRelative",
SHORTEST: "shortest",
// Remove Empty Queries
WHEN_RELATIVE: "whenRelative"
SHORTEST: "shortest"
};

21

lib/format.js
var constants = require("./constants");
var relationUtils = require("./util/relation");
var resourceUtils = require("./util/resource");

@@ -9,3 +7,3 @@

{
if (urlObj.auth && !options.removeAuth && (relationUtils.max(urlObj.extra.relation,"host") || options.output==constants.ABSOLUTE))
if (urlObj.auth && !options.removeAuth && (urlObj.extra.relation.maximumHost || options.output==constants.ABSOLUTE))
{

@@ -34,4 +32,3 @@ return urlObj.auth + "@";

{
// TODO :: do we need to check if host.full exists?
if (urlObj.host.full && (relationUtils.max(urlObj.extra.relation,"auth") || options.output==constants.ABSOLUTE))
if (urlObj.host.full && (urlObj.extra.relation.maximumAuth || options.output==constants.ABSOLUTE))
{

@@ -55,3 +52,3 @@ return urlObj.host.full;

if (relationUtils.max(urlObj.extra.relation,"port") || options.output==constants.ABSOLUTE || options.output==constants.ROOT_RELATIVE)
if (urlObj.extra.relation.maximumHost || options.output==constants.ABSOLUTE || options.output==constants.ROOT_RELATIVE)
{

@@ -77,3 +74,3 @@ str += absolutePath;

{
if (urlObj.port && !urlObj.extra.portIsDefault && relationUtils.max(urlObj.extra.relation,"host"))
if (urlObj.port && !urlObj.extra.portIsDefault && urlObj.extra.relation.maximumHost)
{

@@ -90,3 +87,5 @@ return ":" + urlObj.port;

{
return urlObj.query.string[ options.removeEmptyQueries ? "stripped" : "full" ];
var stripQuery = options.removeEmptyQueries && urlObj.extra.relation.minimumPort;
return urlObj.query.string[ stripQuery ? "stripped" : "full" ];
}

@@ -102,3 +101,3 @@

{
if ( options.removeDirectoryIndexes && resourceUtils.isDefaultIndex(resource,options) )
if ( options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex )
{

@@ -120,5 +119,5 @@ resource = "";

if (relationUtils.max(urlObj.extra.relation,"host") || options.output==constants.ABSOLUTE)
if (urlObj.extra.relation.maximumHost || options.output==constants.ABSOLUTE)
{
if (!urlObj.extra.relation || !options.schemeRelative || options.output==constants.ABSOLUTE)
if (!urlObj.extra.relation.minimumScheme || !options.schemeRelative || options.output==constants.ABSOLUTE)
{

@@ -125,0 +124,0 @@ str += urlObj.scheme + "://";

var constants = require("./constants");
var formatUrl = require("./format");
var getOptions = require("./options");
var objUtils = require("./util/object");
var parseUrl = require("./parse");
var relateUrl = require("./relate");
var util = require("./util");

@@ -26,3 +26,3 @@

this.from = from ? parseUrl(from,this.instanceOptions) : null;
this.from = parseUrl.from(from, this.instanceOptions, null);
}

@@ -38,3 +38,3 @@

// relate(to,options)
if ( util.object.isObject(to) )
if ( objUtils.isObject(to) )
{

@@ -53,3 +53,3 @@ options = to;

options = getOptions(options, this.instanceOptions);
from = from ? parseUrl(from,options) : this.from;
from = parseUrl.from(from, options, this.from);

@@ -65,11 +65,7 @@ if (!from || !from.href)

from.path.absolute.array = util.path.resolveDotSegments(from.path.absolute.array);
from.path.absolute.string = "/" + util.path.join(from.path.absolute.array);
util.port.findDefault(from, options);
to = parseUrl.to(to, options);
to = parseUrl(to, options);
if (to.valid===false) return to.href;
to = relateUrl(from, to, options);//util.devlog(from);util.devlog(to);
to = relateUrl(from, to, options);
to = formatUrl(to, options);

@@ -97,3 +93,6 @@

{
RelateUrl[i] = constants[i];
if ( constants.hasOwnProperty(i) )
{
RelateUrl[i] = constants[i];
}
}

@@ -100,0 +99,0 @@

@@ -1,2 +0,2 @@

var util = require("./util/object");
var objUtils = require("./util/object");

@@ -7,3 +7,3 @@

{
if ( util.isObject(options) )
if ( objUtils.isObject(options) )
{

@@ -14,10 +14,13 @@ var newOptions = {};

{
if (options[i] != undefined)
if ( defaults.hasOwnProperty(i) )
{
newOptions[i] = mergeOption(defaults[i], options[i]);
if (options[i] != undefined)
{
newOptions[i] = mergeOption(defaults[i], options[i]);
}
else
{
newOptions[i] = defaults[i];
}
}
else
{
newOptions[i] = defaults[i];
}
}

@@ -45,5 +48,5 @@

{
defaultValues = util.clone(defaultValues);
defaultValues = objUtils.clone(defaultValues);
return util.shallowMerge(defaultValues, newValues);
return objUtils.shallowMerge(defaultValues, newValues);
}

@@ -50,0 +53,0 @@ }

@@ -1,44 +0,31 @@

var parsePath = require("./path");
var hrefInfo = require("./hrefInfo");
var parseHost = require("./host");
var parsePath = require("./path");
var parsePort = require("./port");
var parseQuery = require("./query");
var parseUrlString = require("./urlstring");
var pathUtils = require("../util/path");
function findMinimums(urlObj)
function parseFromUrl(url, options, fallback)
{
var minimumPathOnly = (!urlObj.scheme && !urlObj.auth && !urlObj.host.full && !urlObj.port);
var minimumResourceOnly = (minimumPathOnly && !urlObj.path.absolute.string);
var minimumQueryOnly = (minimumResourceOnly && !urlObj.resource);
var minimumHashOnly = (minimumQueryOnly && !urlObj.query.string.full.length);
urlObj.extra.hrefInfo.minimumPathOnly = minimumPathOnly;
urlObj.extra.hrefInfo.minimumResourceOnly = minimumResourceOnly;
urlObj.extra.hrefInfo.minimumQueryOnly = minimumQueryOnly;
urlObj.extra.hrefInfo.minimumHashOnly = minimumHashOnly;
return urlObj;
}
function parseHost(urlObj, options)
{
//if (options.ignore_www)
//{
var host = urlObj.host.full;
if (url)
{
var urlObj = parseUrl(url, options);
if (host)
{
var stripped = host;
if (host.indexOf("www.") == 0)
{
stripped = host.substr(4);
}
urlObj.host.stripped = stripped;
}
//}
return urlObj;
// Because the following occurs in the relate stage for "to" URLs,
// such had to be mostly duplicated here
var pathArray = pathUtils.resolveDotSegments(urlObj.path.absolute.array);
urlObj.path.absolute.array = pathArray;
urlObj.path.absolute.string = "/" + pathUtils.join(pathArray);
return urlObj;
}
else
{
return fallback;
}
}

@@ -54,6 +41,7 @@

urlObj = parseHost(urlObj, options);
urlObj = parsePath(urlObj, options);
urlObj = parseQuery(urlObj, options);
urlObj = findMinimums(urlObj);
parseHost(urlObj, options);
parsePort(urlObj, options);
parsePath(urlObj, options);
parseQuery(urlObj, options);
hrefInfo(urlObj);

@@ -65,2 +53,6 @@ return urlObj;

module.exports = parseUrl;
module.exports =
{
from: parseFromUrl,
to: parseUrl
};

@@ -1,3 +0,23 @@

function parsePath(urlObj)
function isDirectoryIndex(resource, options)
{
var verdict = false;
options.directoryIndexes.every( function(index)
{
if (index == resource)
{
verdict = true;
return false;
}
return true;
});
return verdict;
}
function parsePath(urlObj, options)
{
var path = urlObj.path.absolute.string;

@@ -15,2 +35,4 @@

urlObj.extra.resourceIsIndex = isDirectoryIndex(urlObj.resource, options);
urlObj.path.absolute.string = path.substr(0, lastSlash);

@@ -29,4 +51,2 @@ }

// Else: no path means hash- or query-only
return urlObj;
}

@@ -33,0 +53,0 @@

@@ -9,4 +9,2 @@ function parseQuery(urlObj, options)

//}
return urlObj;
}

@@ -23,3 +21,3 @@

{
if (i != "")
if ( i!="" && queryObj.hasOwnProperty(i) )
{

@@ -26,0 +24,0 @@ var value = queryObj[i];

@@ -0,1 +1,2 @@

// For client-side support, can switch to https://github.com/kevincox/url.js
var _parseUrl = require("url").parse;

@@ -9,3 +10,3 @@

* required customizations for later
* necessary data for later
* urlObj.host is useless

@@ -71,3 +72,23 @@ * urlObj.hostname is too long

portIsDefault: null,
relation: null,
relation:
{
maximumScheme: null,
maximumAuth: null,
maximumHost: null,
maximumPort: null,
maximumPath: null,
maximumResource: null,
maximumQuery: null,
maximumHash: null,
minimumScheme: null,
minimumAuth: null,
minimumHost: null,
minimumPort: null,
minimumPath: null,
minimumResource: null,
minimumQuery: null,
minimumHash: null
},
resourceIsIndex: null,
slashes: urlObj.slashes

@@ -74,0 +95,0 @@ };

@@ -1,4 +0,4 @@

var objUtils = require("../util/object");
var pathUtils = require("../util/path");
//var relationUtils = require("../util/relation");
var findRelation = require("./findRelation");
var objUtils = require("../util/object");
var pathUtils = require("../util/path");

@@ -9,13 +9,18 @@

{
copyPath(urlObj, siteUrlObj);
findRelation.upToPath(urlObj, siteUrlObj, options);
// Fill in relative URLs
switch (urlObj.extra.relation)
{
case "path":
case "port": urlObj.port = siteUrlObj.port;
case "host": urlObj.host = objUtils.clone(siteUrlObj.host);
case "auth": urlObj.auth = siteUrlObj.auth;
case "scheme": urlObj.scheme = siteUrlObj.scheme; break;
}
if (urlObj.extra.relation.minimumScheme) urlObj.scheme = siteUrlObj.scheme;
if (urlObj.extra.relation.minimumAuth) urlObj.auth = siteUrlObj.auth;
if (urlObj.extra.relation.minimumHost) urlObj.host = objUtils.clone(siteUrlObj.host);
if (urlObj.extra.relation.minimumPort) copyPort(urlObj, siteUrlObj);
if (urlObj.extra.relation.minimumScheme) copyPath(urlObj, siteUrlObj);
// Check remaining relativeness now that path has been copied and/or resolved
findRelation.pathOn(urlObj, siteUrlObj, options);
// Fill in relative URLs
if (urlObj.extra.relation.minimumResource) copyResource(urlObj, siteUrlObj);
if (urlObj.extra.relation.minimumQuery) urlObj.query = objUtils.clone(siteUrlObj.query);
if (urlObj.extra.relation.minimumHash) urlObj.hash = siteUrlObj.hash;
}

@@ -26,7 +31,8 @@

/*
Get an absolute path relative to site url.
Get an absolute path that's relative to site url.
*/
function copyPath(urlObj, siteUrlObj)
{
if (urlObj.extra.relation && urlObj.extra.relation!="port" /*&& relationUtils.max(urlObj.extra.relation, "path")*/ )
// TODO :: remove the minimumResourceOnly part if possible
if (urlObj.extra.relation.maximumHost || !urlObj.extra.hrefInfo.minimumResourceOnly)
{

@@ -66,2 +72,20 @@ var pathArray = urlObj.path.absolute.array;

function copyPort(urlObj, siteUrlObj)
{
urlObj.port = siteUrlObj.port;
urlObj.extra.portIsDefault = siteUrlObj.extra.portIsDefault;
}
function copyResource(urlObj, siteUrlObj)
{
urlObj.resource = siteUrlObj.resource;
urlObj.extra.resourceIsIndex = siteUrlObj.extra.resourceIsIndex;
}
module.exports = absolutize;

@@ -1,9 +0,3 @@

var resourceUtils = require("../util/resource");
function findRelation_upToPath(urlObj, siteUrlObj, options)
{
var verdict = false;
// Path- or root-relative URL

@@ -13,33 +7,26 @@ var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly;

// Matching scheme, scheme-relative or path-only
if (urlObj.scheme && urlObj.scheme==siteUrlObj.scheme || !urlObj.scheme)
{
verdict = "scheme";
// Matching auth, ignoring auth or path-only
if (urlObj.auth==siteUrlObj.auth || options.removeAuth || pathOnly)
{
verdict = "auth";
var www = options.ignore_www ? "stripped" : "full";
// Matching host or path-only
if (urlObj.host[www]==siteUrlObj.host[www] || pathOnly)
{
verdict = "host";
// Matching port or path-only
if (urlObj.port==siteUrlObj.port || pathOnly)
{
verdict = "port";
if (!urlObj.extra.hrefInfo.minimumResourceOnly)
{
verdict = "path"; // is at least root-relative
}
}
}
}
}
var sameScheme = (urlObj.scheme==siteUrlObj.scheme || !urlObj.scheme);
return verdict;
// Matching auth, ignoring auth or path-only
var sameAuth = sameScheme && (urlObj.auth==siteUrlObj.auth || options.removeAuth || pathOnly);
// Matching host or path-only
var www = options.ignore_www ? "stripped" : "full";
var sameHost = sameAuth && (urlObj.host[www]==siteUrlObj.host[www] || pathOnly);
// Matching port or path-only
var samePort = sameHost && (urlObj.port==siteUrlObj.port || pathOnly);
//var atLeastRootRelative = samePort && !urlObj.extra.hrefInfo.minimumResourceOnly;
urlObj.extra.relation.minimumScheme = sameScheme;
urlObj.extra.relation.minimumAuth = sameAuth;
urlObj.extra.relation.minimumHost = sameHost;
urlObj.extra.relation.minimumPort = samePort;
//urlObj.extra.relation.minimumPath = samePort && atLeastRootRelative; // gets changed in _pathOn() ... TEMP, i hope
urlObj.extra.relation.maximumScheme = !sameScheme || sameScheme && !sameAuth;
urlObj.extra.relation.maximumAuth = !sameScheme || sameScheme && !sameHost;
urlObj.extra.relation.maximumHost = !sameScheme || sameScheme && !samePort;
//urlObj.extra.relation.maximumPort = !sameScheme || sameScheme && !atLeastRootRelative; // gets changed in _pathOn() ... TEMP, i hope
}

@@ -51,25 +38,30 @@

{
var verdict = urlObj.extra.relation;
var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly;
var hashOnly = urlObj.extra.hrefInfo.minimumHashOnly;
if (verdict=="port" || verdict=="path")
{
if (urlObj.path.absolute.string == siteUrlObj.path.absolute.string)
{
verdict = "path";
if ( urlObj.resource==siteUrlObj.resource || (options.removeDirectoryIndexes && resourceUtils.isDefaultIndex(urlObj.resource,options)) )
{
verdict = "resource";
var query = options.removeEmptyQueries ? "stripepd" : "full";
if ( urlObj.query.string[query] && urlObj.query.string[query]==siteUrlObj.query.string[query] )
{
verdict = "query";
}
}
}
}
// From upToPath()
var sameScheme = urlObj.extra.relation.minimumScheme;
return verdict;
// Matching port and path
var samePath = urlObj.extra.relation.minimumPort && urlObj.path.absolute.string==siteUrlObj.path.absolute.string;
// Matching resource or removing default indexes or query/hash-only
var sameResource = samePath && (urlObj.resource==siteUrlObj.resource || (options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex) || queryOnly || hashOnly);
// Matching query or hash-only
var query = options.removeEmptyQueries ? "stripepd" : "full";
var sameQuery = sameResource && urlObj.query.string[query] && urlObj.query.string[query]==siteUrlObj.query.string[query] || hashOnly;
var sameHash = sameQuery && urlObj.hash==siteUrlObj.hash;
urlObj.extra.relation.minimumPath = samePath;
urlObj.extra.relation.minimumResource = sameResource;
urlObj.extra.relation.minimumQuery = sameQuery;
urlObj.extra.relation.minimumHash = sameHash;
urlObj.extra.relation.maximumPort = !sameScheme || sameScheme && !samePath;
urlObj.extra.relation.maximumPath = !sameScheme || sameScheme && !sameResource;
urlObj.extra.relation.maximumResource = !sameScheme || sameScheme && !sameQuery;
urlObj.extra.relation.maximumQuery = !sameScheme || sameScheme && !sameHash;
urlObj.extra.relation.maximumHash = !sameScheme || sameScheme && sameHash;
}

@@ -76,0 +68,0 @@

@@ -1,6 +0,3 @@

var absolutize = require("./absolutize");
var constants = require("../constants");
var findRelation = require("./findRelation");
var portUtils = require("../util/port");
var relativize = require("./relativize");
var absolutize = require("./absolutize");
var relativize = require("./relativize");

@@ -11,18 +8,5 @@

{
portUtils.findDefault(urlObj, options);
absolutize(urlObj, siteUrlObj, options);
relativize(urlObj, siteUrlObj, options);
urlObj.extra.relation = findRelation.upToPath(urlObj, siteUrlObj, options);
if (urlObj.extra.relation)
{
absolutize(urlObj, siteUrlObj, options);
// Port may have changed
portUtils.findDefault(urlObj, options);
urlObj.extra.relation = findRelation.pathOn(urlObj, siteUrlObj, options);
relativize(urlObj, siteUrlObj, options);
}
return urlObj;

@@ -29,0 +13,0 @@ }

@@ -56,12 +56,15 @@ var pathUtils = require("../util/path");

{
var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array);
var pathString = pathUtils.join(pathArray);
/*if (pathString.indexOf("../") != 0)
if (urlObj.extra.relation.minimumScheme)
{
pathString = "./" + pathString;
}*/
urlObj.path.relative.array = pathArray;
urlObj.path.relative.string = pathString;
var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array);
var pathString = pathUtils.join(pathArray);
/*if (pathString.indexOf("../") != 0)
{
pathString = "./" + pathString;
}*/
urlObj.path.relative.array = pathArray;
urlObj.path.relative.string = pathString;
}
}

@@ -68,0 +71,0 @@

{
"name": "relateurl",
"description": "Shorten URLs by converting them from absolute to relative.",
"version": "0.1.0",
"version": "0.2.0",
"homepage": "https://github.com/stevenvachon/relateurl",

@@ -30,2 +30,3 @@ "author": {

"relative",
"minify",
"shorten",

@@ -32,0 +33,0 @@ "url"

@@ -115,12 +115,12 @@ # relateurl [![NPM Version](http://badge.fury.io/js/relateurl.png)](http://badge.fury.io/js/relateurl) [![Build Status](https://secure.travis-ci.org/stevenvachon/relateurl.png)](http://travis-ci.org/stevenvachon/relateurl)

## Release History
* 0.2.0 code cleanup, `options.removeEmptyQueries=true` only applied to unrelated URLs
* 0.1.0 initial release
## Roadmap
* 0.1.x code cleanup
* 0.1.x make `options.removeEmptyQueries=true` only apply to unrelated URLs
* 0.2.0 decipher and return invalid input (special cases) to complete test suite
* 0.3.0 test `options.slashesDenoteHost=false`
* 0.2.1 try to shorten query-relative URLs, test variations list with other site URLs
* 0.2.2 decipher and return invalid input (special cases) to complete test suite
* 0.3.0 test `options.slashesDenoteHost=false`, add something like `options.externalDirectoryIndexes=[]` for external sites
---
[![Analytics](https://ga-beacon.appspot.com/UA-3614308-10/stevenvachon/smil2css)](https://github.com/igrigorik/ga-beacon "Google Analytics") [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/stevenvachon/smil2css/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
[![Analytics](https://ga-beacon.appspot.com/UA-3614308-13/stevenvachon/relateurl)](https://github.com/igrigorik/ga-beacon "Google Analytics") [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/stevenvachon/relateurl/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc