| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | "use strict";function findRelation_upToPath(urlObj, siteUrlObj, options){	// Path- or root-relative URL	var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly;		// Matching scheme, scheme-relative or path-only	var minimumScheme = (urlObj.scheme===siteUrlObj.scheme || !urlObj.scheme);		// Matching auth, ignoring auth or path-only	var minimumAuth = minimumScheme && (urlObj.auth===siteUrlObj.auth || options.removeAuth || pathOnly);		// Matching host or path-only	var www = options.ignore_www ? "stripped" : "full";	var minimumHost = minimumAuth && (urlObj.host[www]===siteUrlObj.host[www] || pathOnly);		// Matching port or path-only	var minimumPort = minimumHost && (urlObj.port===siteUrlObj.port || pathOnly);		urlObj.extra.relation.minimumScheme = minimumScheme;	urlObj.extra.relation.minimumAuth   = minimumAuth;	urlObj.extra.relation.minimumHost   = minimumHost;	urlObj.extra.relation.minimumPort   = minimumPort;		urlObj.extra.relation.maximumScheme = !minimumScheme || minimumScheme && !minimumAuth;	urlObj.extra.relation.maximumAuth   = !minimumScheme || minimumScheme && !minimumHost;	urlObj.extra.relation.maximumHost   = !minimumScheme || minimumScheme && !minimumPort;}function findRelation_pathOn(urlObj, siteUrlObj, options){	var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly;	var hashOnly  = urlObj.extra.hrefInfo.minimumHashOnly;	var empty     = urlObj.extra.hrefInfo.empty;	// not required, but self-documenting		// From upToPath()	var minimumPort   = urlObj.extra.relation.minimumPort;	var minimumScheme = urlObj.extra.relation.minimumScheme;		// Matching port and path	var minimumPath = minimumPort && urlObj.path.absolute.string===siteUrlObj.path.absolute.string;		// Matching resource or query/hash-only or empty	var matchingResource = (urlObj.resource===siteUrlObj.resource || !urlObj.resource && siteUrlObj.extra.resourceIsIndex) || (options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex && !siteUrlObj.resource);	var minimumResource = minimumPath && (matchingResource || queryOnly || hashOnly || empty);		// Matching query or hash-only/empty	var query = options.removeEmptyQueries ? "stripped" : "full";	var urlQuery = urlObj.query.string[query];	var siteUrlQuery = siteUrlObj.query.string[query];	var minimumQuery = (minimumResource && !!urlQuery && urlQuery===siteUrlQuery) || ((hashOnly || empty) && !urlObj.extra.hrefInfo.separatorOnlyQuery);		var minimumHash = minimumQuery && urlObj.hash===siteUrlObj.hash;		urlObj.extra.relation.minimumPath     = minimumPath;	urlObj.extra.relation.minimumResource = minimumResource;	urlObj.extra.relation.minimumQuery    = minimumQuery;	urlObj.extra.relation.minimumHash     = minimumHash;		urlObj.extra.relation.maximumPort     = !minimumScheme || minimumScheme && !minimumPath;	urlObj.extra.relation.maximumPath     = !minimumScheme || minimumScheme && !minimumResource;	urlObj.extra.relation.maximumResource = !minimumScheme || minimumScheme && !minimumQuery;	urlObj.extra.relation.maximumQuery    = !minimumScheme || minimumScheme && !minimumHash;	urlObj.extra.relation.maximumHash     = !minimumScheme || minimumScheme && !minimumHash;	// there's nothing after hash, so it's the same as maximumQuery		// Matching path and/or resource with existing but non-matching site query	urlObj.extra.relation.overridesQuery  = minimumPath && urlObj.extra.relation.maximumResource && !minimumQuery && !!siteUrlQuery;}module.exports ={	pathOn:   findRelation_pathOn,	upToPath: findRelation_upToPath};
 |