| 
									
										
										
										
											2021-04-21 09:12:49 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	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 TrustedTypesRuntimeModule extends HelperRuntimeModule { | 
					
						
							|  |  |  | 	constructor() { | 
					
						
							|  |  |  | 		super("trusted types"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {string} runtime code | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	generate() { | 
					
						
							|  |  |  | 		const { compilation } = this; | 
					
						
							|  |  |  | 		const { runtimeTemplate, outputOptions } = compilation; | 
					
						
							| 
									
										
										
										
											2021-05-10 15:02:46 +08:00
										 |  |  | 		const { trustedTypesPolicy } = outputOptions; | 
					
						
							| 
									
										
										
										
											2021-05-10 15:09:34 +08:00
										 |  |  | 		const fn = RuntimeGlobals.createScriptUrl; | 
					
						
							| 
									
										
										
										
											2021-04-21 09:12:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-10 15:02:46 +08:00
										 |  |  | 		if (!trustedTypesPolicy) { | 
					
						
							| 
									
										
										
										
											2021-05-07 16:30:57 +08:00
										 |  |  | 			// Skip Trusted Types logic.
 | 
					
						
							|  |  |  | 			return Template.asString([ | 
					
						
							| 
									
										
										
										
											2021-05-10 15:43:03 +08:00
										 |  |  | 				`${fn} = ${runtimeTemplate.returningFunction("url", "url")};` | 
					
						
							| 
									
										
										
										
											2021-05-07 16:30:57 +08:00
										 |  |  | 			]); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-21 09:12:49 +08:00
										 |  |  | 		return Template.asString([ | 
					
						
							| 
									
										
										
										
											2021-04-27 19:12:12 +08:00
										 |  |  | 			"var policy;", | 
					
						
							|  |  |  | 			`${fn} = ${runtimeTemplate.basicFunction("url", [ | 
					
						
							|  |  |  | 				"// Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet.", | 
					
						
							| 
									
										
										
										
											2021-05-10 15:43:03 +08:00
										 |  |  | 				"if (policy === undefined) {", | 
					
						
							| 
									
										
										
										
											2021-04-21 09:12:49 +08:00
										 |  |  | 				Template.indent([ | 
					
						
							| 
									
										
										
										
											2021-04-27 19:12:12 +08:00
										 |  |  | 					"policy = {", | 
					
						
							|  |  |  | 					Template.indent([ | 
					
						
							| 
									
										
										
										
											2021-05-10 15:43:03 +08:00
										 |  |  | 						`createScriptURL: ${runtimeTemplate.returningFunction( | 
					
						
							|  |  |  | 							"url", | 
					
						
							|  |  |  | 							"url" | 
					
						
							|  |  |  | 						)}`
 | 
					
						
							| 
									
										
										
										
											2021-04-27 19:12:12 +08:00
										 |  |  | 					]), | 
					
						
							|  |  |  | 					"};", | 
					
						
							| 
									
										
										
										
											2021-05-10 15:43:03 +08:00
										 |  |  | 					'if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {', | 
					
						
							| 
									
										
										
										
											2021-04-27 19:12:12 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							|  |  |  | 						`policy = trustedTypes.createPolicy(${JSON.stringify( | 
					
						
							| 
									
										
										
										
											2021-05-10 15:02:46 +08:00
										 |  |  | 							trustedTypesPolicy | 
					
						
							| 
									
										
										
										
											2021-04-27 19:12:12 +08:00
										 |  |  | 						)}, policy);`
 | 
					
						
							|  |  |  | 					]), | 
					
						
							|  |  |  | 					"}" | 
					
						
							| 
									
										
										
										
											2021-04-21 09:12:49 +08:00
										 |  |  | 				]), | 
					
						
							|  |  |  | 				"}", | 
					
						
							| 
									
										
										
										
											2021-04-27 19:12:12 +08:00
										 |  |  | 				"return policy.createScriptURL(url);" | 
					
						
							| 
									
										
										
										
											2021-04-21 09:12:49 +08:00
										 |  |  | 			])};`
 | 
					
						
							|  |  |  | 		]); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = TrustedTypesRuntimeModule; |