aboutsummaryrefslogtreecommitdiff
path: root/node_modules/relateurl/lib/relate/findRelation.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/relateurl/lib/relate/findRelation.js')
-rw-r--r--node_modules/relateurl/lib/relate/findRelation.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/node_modules/relateurl/lib/relate/findRelation.js b/node_modules/relateurl/lib/relate/findRelation.js
new file mode 100644
index 000000000..c5423c3c4
--- /dev/null
+++ b/node_modules/relateurl/lib/relate/findRelation.js
@@ -0,0 +1,79 @@
+"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
+};