flagpole
Version:
Simple and fast DOM integration, headless or headful browser, and REST API testing framework.
72 lines • 1.99 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Link = void 0;
const url_1 = require("url");
const util_1 = require("./util");
const isValidDataUrl = require("valid-data-url");
class Link {
constructor(uri, baseUrl) {
this.uri = uri;
this.baseUrl = baseUrl;
}
getUri() {
const thisUrl = new url_1.URL(this.uri, this.baseUrl.href);
if (typeof this._qs != "undefined") {
const type = util_1.toType(this._qs);
if (type == "object") {
for (const key in this._qs) {
thisUrl.searchParams.append(key, this._qs[key]);
}
}
else if (type == "array") {
this._qs.forEach((item) => {
thisUrl.searchParams.append(item.name, item.value);
});
}
}
return thisUrl.href;
}
setQueryString(qs) {
this._qs = qs;
}
isValidDataUri() {
return isValidDataUrl(this.uri);
}
isData() {
return /^data:/.test(this.uri);
}
isAnchor() {
return /^#/.test(this.uri);
}
isEmail() {
return /^mailto:/.test(this.uri);
}
isPhone() {
return /^(tel|callto|wtai):/.test(this.uri);
}
isTextMessage() {
return /^(sms|mms):/.test(this.uri);
}
isGeo() {
return /^(geo|geopoint):/.test(this.uri);
}
isScript() {
return /^(javascript):/.test(this.uri);
}
isAppStore() {
return /^(market|itms|itms-apps):/.test(this.uri);
}
isFtp() {
return /^(ftp):/.test(this.uri);
}
isNavigation() {
return (this.uri.length > 0 &&
!this.isAnchor() &&
(/^\?/.test(this.uri) ||
/^https?:\/\//i.test(this.uri) ||
/^\//i.test(this.uri) ||
!/^[a-z]+:\/\//i.test(this.uri)));
}
}
exports.Link = Link;
//# sourceMappingURL=link.js.map
;