/// <summary> /// Constructs a instance of script transformer /// </summary> /// <param name="minifier">Minifier</param> /// <param name="translators">List of translators</param> /// <param name="postProcessors">List of postprocessors</param> /// <param name="ignorePatterns">List of patterns of files and directories that /// should be ignored when processing</param> /// <param name="coreConfig">Configuration settings of core</param> public ScriptTransformer(IMinifier minifier, IList <ITranslator> translators, IList <IPostProcessor> postProcessors, string[] ignorePatterns, CoreSettings coreConfig) : base(ignorePatterns, coreConfig) { ScriptSettings scriptConfig = coreConfig.Scripts; UsePreMinifiedFiles = scriptConfig.UsePreMinifiedFiles; CombineFilesBeforeMinification = scriptConfig.CombineFilesBeforeMinification; _jsFilesWithMsStyleExtensions = Utils.ConvertToStringCollection( coreConfig.JsFilesWithMicrosoftStyleExtensions.Replace(';', ','), ',', true, true); IAssetContext scriptContext = BundleTransformerContext.Current.Scripts; _minifier = minifier ?? scriptContext.GetDefaultMinifierInstance(); _translators = (translators ?? scriptContext.GetDefaultTranslatorInstances()) .ToList() .AsReadOnly() ; _postProcessors = (postProcessors ?? scriptContext.GetDefaultPostProcessorInstances()) .ToList() .AsReadOnly() ; }
public AzureStreamingService(ILogger <AzureStreamingService> logger, IAzureMediaMethods azureMediaMethods, IAssetContext assetContext) { _logger = logger; _azureMediaMethods = azureMediaMethods; _assetContext = assetContext; }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public Task ExecuteAsync(IAssetContext context) { var content = new Dictionary <string, byte[]>(); var env = (IWebHostEnvironment)context.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment)); IFileProvider fileProvider = context.Asset.GetFileProvider(env); foreach (string route in context.Content.Keys) { IFileInfo file = fileProvider.GetFileInfo(route); var settings = new ScssOptions { InputFile = file.PhysicalPath }; if (options != null) { settings.IncludePaths.AddRange(options.IncludePaths); settings.GenerateSourceMap = options.GenerateSourceMap; settings.Indent = options.Indent; settings.IsIndentedSyntaxSource = options.IsIndentedSyntaxSource; settings.Linefeed = options.Linefeed; settings.OmitSourceMapUrl = options.OmitSourceMapUrl; settings.SourceComments = options.SourceComments; settings.SourceMapContents = options.SourceMapContents; settings.SourceMapEmbed = options.SourceMapEmbed; settings.SourceMapRoot = options.SourceMapRoot; } ScssResult result = Scss.ConvertToCss(context.Content[route].AsString(), settings); content[route] = result.Css.AsByteArray(); } context.Content = content; return(Task.CompletedTask); }
public override Task ExecuteAsync(IAssetContext config) { var content = new Dictionary <string, byte[]>(); foreach (string key in config.Content.Keys) { if (key.EndsWith(".min.js")) { continue; } string input = config.Content[key].AsString(); UglifyResult result = Uglify.Js(input, Settings); string minified = result.Code; if (result.HasErrors) { minified = $"/* {string.Join("\r\n", result.Errors)} */\r\n" + input; } content[key] = minified.AsByteArray(); } config.Content = content; return(Task.CompletedTask); }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public Task ExecuteAsync(IAssetContext context) { var content = new Dictionary <string, byte[]>(); var env = (IWebHostEnvironment)context.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment)); IFileProvider fileProvider = context.Asset.GetFileProvider(env); foreach (string route in context.Content.Keys) { IFileInfo file = fileProvider.GetFileInfo(route); var settings = new ScssOptions { InputFile = file.PhysicalPath }; settings.TryImport = (string file, string parentPath, out string scss, out string map) => { // System.Console.WriteLine("File to import is " + file); // System.Console.WriteLine("Parent Path is " + parentPath); var basePath = "/styles/"; var path = GetFilePath(file, parentPath); var f = fileProvider.GetFileInfo(basePath + path + ".scss"); using (var reader = new System.IO.StreamReader(f.CreateReadStream(), System.Text.Encoding.UTF8)) { string value = reader.ReadToEnd(); // System.Console.WriteLine("SCSS is " + value); scss = value; map = null; } return(true); }; System.Console.WriteLine("FP " + fileProvider.GetType().Name); System.Console.WriteLine("Route is " + route); System.Console.WriteLine("File is " + file.PhysicalPath); System.Console.WriteLine("Settings: " + settings.IncludePaths); ScssResult result = Scss.ConvertToCss(context.Content[route].AsString(), settings); content[route] = result.Css.AsByteArray(); } context.Content = content; foreach (string key in context.Content.Keys) { IFileInfo input = fileProvider.GetFileInfo(key); IFileInfo output = fileProvider.GetFileInfo(context.Asset.Route); System.Console.WriteLine("Input is " + input.Name + " + " + input.PhysicalPath); System.Console.WriteLine("Output is " + output.Name + " + " + output.PhysicalPath); string absoluteOutputPath = new System.IO.FileInfo(output.PhysicalPath).FullName; System.Console.WriteLine("Output actual path is " + absoluteOutputPath); } return(Task.CompletedTask); }
public AssetContextShould() { InjectComponentsArray(new IComponent[] { new TestComponent1(), new TestComponent2() }); var assets = Fixture.CreateMany <TestAsset>().ToArray(); _asset = assets[0]; _assetContext = new AssetContext(assets); _assetsCount = assets.Length; }
public override Task ExecuteAsync(IAssetContext context) { foreach (string file in context.Content.Keys) { string ext = Path.GetExtension(file); if (!_extensions.Any(e => e.Equals(ext, StringComparison.OrdinalIgnoreCase))) { throw new NotSupportedException($"The file extension \"{ext}\" is not valid for this asset"); } } return Task.CompletedTask; }
public EntityState( IActorContext actors, IActorFactory actorFactory, IAssetContext assets, IConvertersCollection converters, SourceDescriptions descriptions) { Actors = actors; Assets = assets; _actorFactory = actorFactory; _converters = converters; _descriptions = descriptions; }
public override Task ExecuteAsync(IAssetContext context) { var content = new Dictionary <string, byte[]>(); string header = $"/*\r\n {_header}\r\n*/"; foreach (string route in context.Content.Keys) { string update = header + Environment.NewLine + context.Content[route].AsString(); content[route] = update.AsByteArray(); } context.Content = content; return(Task.CompletedTask); }
public override Task ExecuteAsync(IAssetContext context) { var sb = new StringBuilder(); foreach (byte[] bytes in context.Content.Values) { sb.AppendLine(bytes.AsString()); } context.Content = new Dictionary <string, byte[]> { { Guid.NewGuid().ToString(), sb.ToString().AsByteArray() } }; return(Task.CompletedTask); }
public override async Task ExecuteAsync(IAssetContext config) { var content = new Dictionary <string, byte[]>(); var env = (IWebHostEnvironment)config.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment)); var pipeline = (IAssetPipeline)config.HttpContext.RequestServices.GetService(typeof(IAssetPipeline)); IFileProvider fileProvider = config.Asset.GetFileProvider(env); foreach (string key in config.Content.Keys) { IFileInfo input = fileProvider.GetFileInfo(key); content[key] = await InlineAsync(config.Content[key].AsString(), input, env); } config.Content = content; }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public Task ExecuteAsync(IAssetContext context) { var content = new Dictionary <string, byte[]>(); foreach (string route in context.Content.Keys) { string input = context.Content[route].AsString() .Trim(new char[] { '\uFEFF', '\u200B' }); // Removes the BOM var result = Markdig.Markdown.ToHtml(input, _options); content[route] = result.AsByteArray(); } context.Content = content; return(Task.CompletedTask); }
public override Task ExecuteAsync(IAssetContext context) { var sb = new StringBuilder(); foreach (byte[] bytes in context.Content.Values) { sb.AppendLine(bytes.AsString()); } // Use existing first key as new key to have a valid input for subsequent calls to GetFileInfo or a Guid, if there is no content var newKey = context.Content.Keys.FirstOrDefault() ?? Guid.NewGuid().ToString(); context.Content = new Dictionary <string, byte[]> { { newKey, sb.ToString().AsByteArray() } }; return(Task.CompletedTask); }
public override Task ExecuteAsync(IAssetContext config) { var content = new Dictionary <string, byte[]>(); var env = (IWebHostEnvironment)config.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment)); var pipeline = (IAssetPipeline)config.HttpContext.RequestServices.GetService(typeof(IAssetPipeline)); IFileProvider fileProvider = config.Asset.GetFileProvider(env); foreach (string key in config.Content.Keys) { string inputPath = Path.Combine(env.WebRootPath, key.TrimStart('/')); string outputPath = Path.Combine(env.WebRootPath, config.Asset.Route.TrimStart('/')); content[key] = Adjust(config.Content[key].AsString(), inputPath, outputPath); } config.Content = content; return(Task.CompletedTask); }
/// <summary>Constructs a instance of style transformer</summary> /// <param name="minifier">Minifier</param> /// <param name="translators">List of translators</param> /// <param name="postProcessors">List of postprocessors</param> /// <param name="ignorePatterns">List of patterns of files and directories that /// should be ignored when processing</param> /// <param name="coreConfig">Configuration settings of core</param> public StyleTransformer( IMinifier minifier, IList <ITranslator> translators, IList <IPostProcessor> postProcessors, string[] ignorePatterns, CoreSettings coreConfig) : base(ignorePatterns, coreConfig) { StyleSettings styles1 = coreConfig.Styles; this.UsePreMinifiedFiles = styles1.UsePreMinifiedFiles; this.CombineFilesBeforeMinification = styles1.CombineFilesBeforeMinification; IAssetContext styles2 = BundleTransformerContext.Current.Styles; this._minifier = minifier ?? styles2.GetDefaultMinifierInstance(); this._translators = (translators ?? styles2.GetDefaultTranslatorInstances()).ToList <ITranslator>().AsReadOnly(); this._postProcessors = (postProcessors ?? styles2.GetDefaultPostProcessorInstances()).ToList <IPostProcessor>().AsReadOnly(); }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public Task ExecuteAsync(IAssetContext config) { _stringProvider = config.HttpContext.RequestServices.GetService <IStringLocalizer <T> >(); var content = new Dictionary <string, byte[]>(); foreach (string route in config.Content.Keys) { content[route] = Localize(config.Content[route].AsString()).AsByteArray(); } if (config.Content.Keys.Any()) { config.HttpContext.Response.Headers[HeaderNames.Vary] = "Accept-Language"; } config.Content = content; return(Task.CompletedTask); }
public override Task ExecuteAsync(IAssetContext config) { var content = new Dictionary <string, byte[]>(); var env = (IHostingEnvironment)config.HttpContext.RequestServices.GetService(typeof(IHostingEnvironment)); var pipeline = (IAssetPipeline)config.HttpContext.RequestServices.GetService(typeof(IAssetPipeline)); IFileProvider fileProvider = config.Asset.GetFileProvider(env); foreach (string key in config.Content.Keys) { IFileInfo input = fileProvider.GetFileInfo(key); IFileInfo output = fileProvider.GetFileInfo(config.Asset.Route); content[key] = Adjust(config.Content[key].AsString(), input, output, env); } config.Content = content; return(Task.CompletedTask); }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public Task ExecuteAsync(IAssetContext context) { var content = new Dictionary<string, byte[]>(); var env = (IWebHostEnvironment)context.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment)); IFileProvider fileProvider = context.Asset.GetFileProvider(env); foreach (string route in context.Content.Keys) { IFileInfo file = fileProvider.GetFileInfo(route); var settings = new ScssOptions { InputFile = file.PhysicalPath }; ScssResult result = Scss.ConvertToCss(context.Content[route].AsString(), settings); content[route] = result.Css.AsByteArray(); } context.Content = content; return Task.CompletedTask; }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public Task ExecuteAsync(IAssetContext context) { var content = new Dictionary <string, byte[]>(); var env = context.HttpContext.RequestServices.GetRequiredService <IWebHostEnvironment>(); IFileProvider fileProvider = context.Asset.GetFileProvider(env); var engine = new EngineFactory().GetEngine(); foreach (string route in context.Content.Keys) { IFileInfo file = fileProvider.GetFileInfo(route); engine.CurrentDirectory = Path.GetDirectoryName(file.PhysicalPath); var css = engine.TransformToCss(context.Content[route].AsString(), null); content[route] = System.Text.Encoding.UTF8.GetBytes(css); } context.Content = content; return(Task.CompletedTask); }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public Task ExecuteAsync(IAssetContext context) { var content = new Dictionary <string, byte[]>(); var env = (IHostingEnvironment)context.HttpContext.RequestServices.GetService(typeof(IHostingEnvironment)); IFileProvider fileProvider = context.Asset.GetFileProvider(env); var builder = new StringBuilder(); // Javascript module for Angular that uses templateCache builder.AppendFormat(@"angular.module('{0}',[]).run(['$templateCache',function($templateCache){{", _moduleName); foreach (string route in context.Content.Keys) { IFileInfo file = fileProvider.GetFileInfo(route); string inputFile = file.PhysicalPath; string input = context.Content[route].AsString().Replace("\r\n", "").Replace("'", "\\'"); UglifyResult result = Uglify.Html(input, Settings); string minified = result.Code; if (result.HasErrors) { minified = $"// {string.Join("\r\n", result.Errors)} ${input}"; } builder.AppendFormat(@"$templateCache.put('{0}{1}','{2}');", _path, file.Name, minified); //content[route] = cx.AsByteArray(); } builder.Append(@"}]);"); string cx = builder.ToString(); content.Add(Guid.NewGuid().ToString(), cx.AsByteArray()); context.Content = content; return(Task.CompletedTask); }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public override async Task ExecuteAsync(IAssetContext context) { var env = (IHostingEnvironment)context.HttpContext.RequestServices.GetService(typeof(IHostingEnvironment)); var fileProvider = context.Asset.GetFileProvider(env); var content = new Dictionary <string, byte[]>(); if (!EnsureNodeFiles("WebOptimizer.TypeScript.node_files.zip")) { return; } string module = Path.Combine(InstallDirectory, "typescript.js"); foreach (string route in context.Content.Keys) { var file = fileProvider.GetFileInfo(route); var input = context.Content[route].AsString(); var result = await NodeServices.InvokeAsync <string>(module, input, file.PhysicalPath); content[route] = result.AsByteArray(); } context.Content = content; }
public override Task ExecuteAsync(IAssetContext context) { var sb = new StringBuilder(); foreach (byte[] bytes in context.Content.Values) { sb.AppendLine(bytes.AsString()); } // Use Guid as key and append .min if all the included files seem to be minified var newKey = Guid.NewGuid().ToString(); Regex regex = new Regex(@"(?i:.min.(css|js|html)$)"); if (context.Content.Keys.All(k => regex.IsMatch(k))) { newKey += ".min"; } context.Content = new Dictionary <string, byte[]> { { newKey, sb.ToString().AsByteArray() } }; return(Task.CompletedTask); }
/// <summary> /// Executes the processor on the specified configuration. /// </summary> public abstract Task ExecuteAsync(IAssetContext context);
/// <summary> /// Gets the custom key that should be used when calculating the memory cache key. /// </summary> public string CacheKey(HttpContext context, IAssetContext config) => String.Empty;
public override Task ExecuteAsync(IAssetContext config) { config.HttpContext.Response.Headers[_name] = _value; return(Task.CompletedTask); }