File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/node_modules/safevalues/builders/script_builders.js
"use strict";
/**
* @license
* SPDX-License-Identifier: Apache-2.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.safeScriptWithArgs = exports.scriptFromJson = exports.concatScripts = exports.safeScript = void 0;
require("../environment/dev");
var script_impl_1 = require("../internals/script_impl");
var string_literal_1 = require("../internals/string_literal");
/**
* Creates a SafeScript object from a template literal (without any embedded
* expressions).
*
* This function is a template literal tag function. It should be called with
* a template literal that does not contain any expressions. For example,
* safeScript`foo`;
*
* @param templateObj This contains the literal part of the template literal.
*/
function safeScript(templateObj) {
if (process.env.NODE_ENV !== 'production') {
(0, string_literal_1.assertIsTemplateObject)(templateObj, false, 'safeScript is a template literal tag function ' +
'that only accepts template literals without expressions. ' +
'For example, safeScript`foo`;');
}
return (0, script_impl_1.createScript)(templateObj[0]);
}
exports.safeScript = safeScript;
/** Creates a `SafeScript` value by concatenating multiple `SafeScript`s. */
function concatScripts(scripts) {
return (0, script_impl_1.createScript)(scripts.map(script_impl_1.unwrapScript).join(''));
}
exports.concatScripts = concatScripts;
/**
* Converts a serializable value into JSON that is safe to interpolate into a
* script context. In particular it escapes < characters so that a value of
* "</script>" doesn't break out of the context.
* @param value The value to serialize.
*/
function scriptFromJson(value) {
return (0, script_impl_1.createScript)(JSON.stringify(value).replace(/</g, '\\x3c'));
}
exports.scriptFromJson = scriptFromJson;
/**
* Creates a `SafeScript` object from a template literal (without any embedded
* expressions) along with additional arguments that the script should have
* access to. These arguments will be JSON-encoded and passed to the script as
* a function call.
* @example
* ```ts
* safeScriptWithArgs`function (name, props) {
* console.log(name + ' is ' + props.age);
* }`('Bob', { 'age': 42 })
* ```
* would return a `SafeScript` that represents the following code:
* ```js
* (function (name, props) {
* console.log(name + ' is ' + props.age);
* })("Bob",{"age":42})
* ```
* @note Be careful when passing objects as arguments, as unquoted property
* names may be changed during compilation.
* @param templateObj This contains the literal part of the template literal.
* @param emptyArgs Expressions that evaluate to the empty string to enable
* inline comments.
*/
function safeScriptWithArgs(templateObj) {
var emptyArgs = [];
for (var _i = 1; _i < arguments.length; _i++) {
emptyArgs[_i - 1] = arguments[_i];
}
if (process.env.NODE_ENV !== 'production') {
if (emptyArgs.some(function (a) { return a !== ''; })) {
throw new Error('safeScriptWithArgs only allows empty string expressions ' +
'to enable inline comments.');
}
(0, string_literal_1.assertIsTemplateObject)(templateObj, true, 'safeScriptWithArgs is a template literal tag function ' +
'that only accepts template literals. ' +
'For example, safeScriptWithArgs`foo`;');
}
return function () {
var argValues = [];
for (var _i = 0; _i < arguments.length; _i++) {
argValues[_i] = arguments[_i];
}
var values = argValues.map(function (v) { return scriptFromJson(v).toString(); });
return (0, script_impl_1.createScript)("(".concat(templateObj.join(''), ")(").concat(values.join(','), ")"));
};
}
exports.safeScriptWithArgs = safeScriptWithArgs;