| File: JavaScriptResources.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.TagHelpers\src\Microsoft.AspNetCore.Mvc.TagHelpers.csproj (Microsoft.AspNetCore.Mvc.TagHelpers) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Concurrent; using System.Diagnostics; using System.Reflection; namespace Microsoft.AspNetCore.Mvc.TagHelpers; /// <summary> /// Methods for loading JavaScript from assembly embedded resources. /// </summary> internal static class JavaScriptResources { private static readonly Assembly ResourcesAssembly = typeof(JavaScriptResources).Assembly; private static readonly ConcurrentDictionary<string, string> Cache = new ConcurrentDictionary<string, string>(StringComparer.Ordinal); /// <summary> /// Gets an embedded JavaScript file resource and decodes it for use as a .NET format string. /// </summary> public static string GetEmbeddedJavaScript(string resourceName) { return GetEmbeddedJavaScript(resourceName, ResourcesAssembly.GetManifestResourceStream, Cache); } // Internal for testing internal static string GetEmbeddedJavaScript( string resourceName, Func<string, Stream> getManifestResourceStream, ConcurrentDictionary<string, string> cache) { return cache.GetOrAdd(resourceName, key => { // Load the JavaScript from embedded resource using (var resourceStream = getManifestResourceStream(key)) { Debug.Assert( resourceStream != null, "Embedded resource missing. Ensure 'prebuild' script has run."); using (var streamReader = new StreamReader(resourceStream)) { var script = streamReader.ReadToEnd(); return PrepareFormatString(script); } } }); } private static string PrepareFormatString(string input) { // Remove final ");". Those characters are in the file only to allow minification. return input.Substring(0, input.Length - 2); } }