mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/*
 | 
						|
	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
						|
*/
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
const RuntimeGlobals = require("../RuntimeGlobals");
 | 
						|
const Template = require("../Template");
 | 
						|
const HelperRuntimeModule = require("./HelperRuntimeModule");
 | 
						|
 | 
						|
class GetTrustedTypesPolicyRuntimeModule extends HelperRuntimeModule {
 | 
						|
	/**
 | 
						|
	 * @param {ReadonlySet<string>} runtimeRequirements runtime requirements
 | 
						|
	 */
 | 
						|
	constructor(runtimeRequirements) {
 | 
						|
		super("trusted types policy");
 | 
						|
		this.runtimeRequirements = runtimeRequirements;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @returns {string} runtime code
 | 
						|
	 */
 | 
						|
	generate() {
 | 
						|
		const { compilation } = this;
 | 
						|
		const { runtimeTemplate, outputOptions } = compilation;
 | 
						|
		const { trustedTypes } = outputOptions;
 | 
						|
		const fn = RuntimeGlobals.getTrustedTypesPolicy;
 | 
						|
		const wrapPolicyCreationInTryCatch = trustedTypes
 | 
						|
			? trustedTypes.onPolicyCreationFailure === "continue"
 | 
						|
			: false;
 | 
						|
 | 
						|
		return Template.asString([
 | 
						|
			"var policy;",
 | 
						|
			`${fn} = ${runtimeTemplate.basicFunction("", [
 | 
						|
				"// Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet.",
 | 
						|
				"if (policy === undefined) {",
 | 
						|
				Template.indent([
 | 
						|
					"policy = {",
 | 
						|
					Template.indent(
 | 
						|
						[
 | 
						|
							...(this.runtimeRequirements.has(RuntimeGlobals.createScript)
 | 
						|
								? [
 | 
						|
										`createScript: ${runtimeTemplate.returningFunction(
 | 
						|
											"script",
 | 
						|
											"script"
 | 
						|
										)}`
 | 
						|
								  ]
 | 
						|
								: []),
 | 
						|
							...(this.runtimeRequirements.has(RuntimeGlobals.createScriptUrl)
 | 
						|
								? [
 | 
						|
										`createScriptURL: ${runtimeTemplate.returningFunction(
 | 
						|
											"url",
 | 
						|
											"url"
 | 
						|
										)}`
 | 
						|
								  ]
 | 
						|
								: [])
 | 
						|
						].join(",\n")
 | 
						|
					),
 | 
						|
					"};",
 | 
						|
					...(trustedTypes
 | 
						|
						? [
 | 
						|
								'if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {',
 | 
						|
								Template.indent([
 | 
						|
									...(wrapPolicyCreationInTryCatch ? ["try {"] : []),
 | 
						|
									...[
 | 
						|
										`policy = trustedTypes.createPolicy(${JSON.stringify(
 | 
						|
											trustedTypes.policyName
 | 
						|
										)}, policy);`
 | 
						|
									].map(line =>
 | 
						|
										wrapPolicyCreationInTryCatch ? Template.indent(line) : line
 | 
						|
									),
 | 
						|
									...(wrapPolicyCreationInTryCatch
 | 
						|
										? [
 | 
						|
												"} catch (e) {",
 | 
						|
												Template.indent([
 | 
						|
													`console.warn('Could not create trusted-types policy ${JSON.stringify(
 | 
						|
														trustedTypes.policyName
 | 
						|
													)}');`
 | 
						|
												]),
 | 
						|
												"}"
 | 
						|
										  ]
 | 
						|
										: [])
 | 
						|
								]),
 | 
						|
								"}"
 | 
						|
						  ]
 | 
						|
						: [])
 | 
						|
				]),
 | 
						|
				"}",
 | 
						|
				"return policy;"
 | 
						|
			])};`
 | 
						|
		]);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
module.exports = GetTrustedTypesPolicyRuntimeModule;
 |