117 lines
5.6 KiB
JavaScript
117 lines
5.6 KiB
JavaScript
/*TRANSPILED*//*
|
|
|
|
Copyright The Closure Library Authors.
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
'use strict';
|
|
goog.provide("goog.html.TrustedResourceUrl");
|
|
goog.require("goog.asserts");
|
|
goog.require("goog.fs.blob");
|
|
goog.require("goog.fs.url");
|
|
goog.require("goog.html.SafeScript");
|
|
goog.require("goog.html.trustedtypes");
|
|
goog.require("goog.string.Const");
|
|
goog.require("goog.string.TypedString");
|
|
goog.html.TrustedResourceUrl = class {
|
|
constructor(value, token) {
|
|
this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = token === goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_ ? value : "";
|
|
}
|
|
toString() {
|
|
return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ + "";
|
|
}
|
|
};
|
|
goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString = true;
|
|
goog.html.TrustedResourceUrl.prototype.getTypedStringValue = function() {
|
|
return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString();
|
|
};
|
|
goog.html.TrustedResourceUrl.prototype.cloneWithParams = function(searchParams, opt_hashParams) {
|
|
var url = goog.html.TrustedResourceUrl.unwrap(this);
|
|
var parts = goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(url);
|
|
var urlBase = parts[1];
|
|
var urlSearch = parts[2] || "";
|
|
var urlHash = parts[3] || "";
|
|
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(urlBase + goog.html.TrustedResourceUrl.stringifyParams_("?", urlSearch, searchParams) + goog.html.TrustedResourceUrl.stringifyParams_("#", urlHash, opt_hashParams));
|
|
};
|
|
goog.html.TrustedResourceUrl.unwrap = function(trustedResourceUrl) {
|
|
return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(trustedResourceUrl).toString();
|
|
};
|
|
goog.html.TrustedResourceUrl.unwrapTrustedScriptURL = function(trustedResourceUrl) {
|
|
if (trustedResourceUrl instanceof goog.html.TrustedResourceUrl && trustedResourceUrl.constructor === goog.html.TrustedResourceUrl) {
|
|
return trustedResourceUrl.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;
|
|
} else {
|
|
goog.asserts.fail("expected object of type TrustedResourceUrl, got '" + trustedResourceUrl + "' of type " + goog.typeOf(trustedResourceUrl));
|
|
return "type_error:TrustedResourceUrl";
|
|
}
|
|
};
|
|
goog.html.TrustedResourceUrl.format = function(format, args) {
|
|
var formatStr = goog.string.Const.unwrap(format);
|
|
if (!goog.html.TrustedResourceUrl.BASE_URL_.test(formatStr)) {
|
|
throw new Error("Invalid TrustedResourceUrl format: " + formatStr);
|
|
}
|
|
var result = formatStr.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_, function(match, id) {
|
|
if (!Object.prototype.hasOwnProperty.call(args, id)) {
|
|
throw new Error('Found marker, "' + id + '", in format string, "' + formatStr + '", but no valid label mapping found ' + "in args: " + JSON.stringify(args));
|
|
}
|
|
var arg = args[id];
|
|
if (arg instanceof goog.string.Const) {
|
|
return goog.string.Const.unwrap(arg);
|
|
} else {
|
|
return encodeURIComponent(String(arg));
|
|
}
|
|
});
|
|
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(result);
|
|
};
|
|
goog.html.TrustedResourceUrl.FORMAT_MARKER_ = /%{(\w+)}/g;
|
|
goog.html.TrustedResourceUrl.BASE_URL_ = new RegExp("^((https:)?//[0-9a-z.:[\\]-]+/" + "|/[^/\\\\]" + "|[^:/\\\\%]+/" + "|[^:/\\\\%]*[?#]" + "|about:blank#" + ")", "i");
|
|
goog.html.TrustedResourceUrl.URL_PARAM_PARSER_ = /^([^?#]*)(\?[^#]*)?(#[\s\S]*)?/;
|
|
goog.html.TrustedResourceUrl.formatWithParams = function(format, args, searchParams, opt_hashParams) {
|
|
var url = goog.html.TrustedResourceUrl.format(format, args);
|
|
return url.cloneWithParams(searchParams, opt_hashParams);
|
|
};
|
|
goog.html.TrustedResourceUrl.fromConstant = function(url) {
|
|
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(url));
|
|
};
|
|
goog.html.TrustedResourceUrl.fromConstants = function(parts) {
|
|
var unwrapped = "";
|
|
for (var i = 0; i < parts.length; i++) {
|
|
unwrapped += goog.string.Const.unwrap(parts[i]);
|
|
}
|
|
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(unwrapped);
|
|
};
|
|
goog.html.TrustedResourceUrl.fromSafeScript = function(safeScript) {
|
|
var blob = goog.fs.blob.getBlobWithProperties([goog.html.SafeScript.unwrap(safeScript)], "text/javascript");
|
|
var url = goog.fs.url.createObjectUrl(blob);
|
|
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(url);
|
|
};
|
|
goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_ = {};
|
|
goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse = function(url) {
|
|
const noinlineUrl = url;
|
|
const policy = goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse();
|
|
const value = policy ? policy.createScriptURL(noinlineUrl) : noinlineUrl;
|
|
return new goog.html.TrustedResourceUrl(value, goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_);
|
|
};
|
|
goog.html.TrustedResourceUrl.stringifyParams_ = function(prefix, currentString, params) {
|
|
if (params == null) {
|
|
return currentString;
|
|
}
|
|
if (typeof params === "string") {
|
|
return params ? prefix + encodeURIComponent(params) : "";
|
|
}
|
|
for (var key in params) {
|
|
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
|
var value = params[key];
|
|
var outputValues = Array.isArray(value) ? value : [value];
|
|
for (var i = 0; i < outputValues.length; i++) {
|
|
var outputValue = outputValues[i];
|
|
if (outputValue != null) {
|
|
if (!currentString) {
|
|
currentString = prefix;
|
|
}
|
|
currentString += (currentString.length > prefix.length ? "\x26" : "") + encodeURIComponent(key) + "\x3d" + encodeURIComponent(String(outputValue));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return currentString;
|
|
};
|