private string GetEntryOutput(IRequestedEntryModel requestedEntry, string sinkName, string dependencyOf = null) { var finalOutput = ""; if (_viewData.TryMarkEntryAsSerialized(requestedEntry)) { // Prevent importing if no script requires this one if (requestedEntry.RequiredBy.Any()) { var dependants = requestedEntry.RequiredBy .Where(dependant => _viewData.TryGetRequestedEntryByName(dependant, out var _)); if (!dependants.Any()) { if (_settings.PrintComments) { finalOutput += $"<!-- Preventing output of \"{requestedEntry.GetIdentifier()}\" because there are no dependants. -->\n"; } return(finalOutput); } } // Resolve requirements foreach (var requirement in requestedEntry.Requires) { IRequestedEntryModel requirementEntry; // Check if the dependency has been requested if (!_viewData.TryGetRequestedEntryByName(requirement, out requirementEntry)) { // If not, try build a new request for entry from webpack if (_webpackManifest.Value.ContainsKey(requirement)) { var requirementEntryModel = RequestedEntryModel.BuildWebpackEntry(requirement); requirementEntryModel.Sink = sinkName; requirementEntry = requirementEntryModel; } } if (requirementEntry != null) { finalOutput += GetEntryOutput(requirementEntry, sinkName, requestedEntry.Name); } else { if (_settings.PrintComments) { finalOutput += $"<!-- Cannot resolve \"{requirement}\" requested by \"{requestedEntry.Name}\". -->\n"; } } } finalOutput += _serializer.SerializeEntry(requestedEntry, dependencyOf); } return(finalOutput); }
private string SerializeWebpackEntryJS(IRequestedEntryModel requestedEntry, WebpackEntryModel webpackEntry, string dependencyOf = null) { var finalOutput = ""; if (!requestedEntry.CSSOnly) { for (var i = 0; i < webpackEntry.Assets.JS.Count; i++) { var file = webpackEntry.Assets.JS[i]; var fileIsADependency = i < webpackEntry.Assets.JS.Count - 1; var serializedFileSearchKey = file; if (!fileIsADependency && requestedEntry.Key != null) { serializedFileSearchKey += requestedEntry.Key; } if (_viewData.TryMarkFileAsSerialized(serializedFileSearchKey)) { var async = !fileIsADependency && requestedEntry.Async ? "async" : ""; var defer = !fileIsADependency && requestedEntry.Defer ? "defer" : ""; var filePath = Path.Combine("/", _settings.PublicOutputPath, file); if (_settings.AppendVersion) { filePath = _fileVersionProvider.AddFileVersionToPath(_pathBase, filePath); } var comments = ""; if (_settings.PrintComments) { // Requested due to being a dependency if (requestedEntry.Sink != _sinkName && !string.IsNullOrEmpty(dependencyOf)) { comments += $"<!-- The following entry should be printed into \"{requestedEntry.Sink}\" sink. However it has been requested as a dependency of \"{dependencyOf}\". -->\n"; } } finalOutput += string.Format( "{0}<script type=\"text/javascript\" src=\"{1}\"{2}{3}{4}></script>\n", comments, filePath, !string.IsNullOrEmpty(async) ? " " + async : "", !string.IsNullOrEmpty(defer) ? " " + defer : "", _settings.PrintAllAttributes ? SerializeEntryAttributes(requestedEntry, dependencyOf) : "" ); } } } return(finalOutput); }
public string SerializeEntry(IRequestedEntryModel requestedEntry, string dependencyOf = null) { if (requestedEntry.IsWebpackEntry(out var webpackEntry)) { return(Serialize(webpackEntry, dependencyOf)); } else if (requestedEntry.IsLiteralEntry(out var literalEntry)) { return(Serialize(literalEntry, dependencyOf)); } return(""); }
public bool TryMarkEntryAsSerialized(IRequestedEntryModel requestedEntry) { var identifier = requestedEntry.GetIdentifier(); if (!SerializedEntries.ContainsKey(identifier)) { SerializedEntries.Add(identifier, requestedEntry); requestedEntry.MarkAsProcessed(); return(true); } return(false); }
private string SerializeWebpackEntryCSS(IRequestedEntryModel requestedEntry, WebpackEntryModel webpackEntry, string dependencyOf = null) { var finalOutput = ""; if (!requestedEntry.JSOnly) { for (var i = 0; i < webpackEntry.Assets.CSS.Count; i++) { var file = webpackEntry.Assets.CSS[i]; var serializedFileSearchKey = file; if (requestedEntry.Key != null) { serializedFileSearchKey += requestedEntry.Key; } if (_viewData.TryMarkFileAsSerialized(serializedFileSearchKey)) { var filePath = Path.Combine("/", _settings.PublicOutputPath, file); if (_settings.AppendVersion) { filePath = _fileVersionProvider.AddFileVersionToPath(_pathBase, filePath); } var comments = ""; if (_settings.PrintComments) { // Requested due to being a dependency if (requestedEntry.Sink != _sinkName && !string.IsNullOrEmpty(dependencyOf)) { comments += $"<!-- The following entry should be printed into \"{requestedEntry.Sink}\" sink. However it has been requested as a dependency of \"{dependencyOf}\". -->\n"; } } finalOutput += string.Format( "{0}<link rel=\"stylesheet\" href=\"{1}\"{2} />\n", comments, filePath, _settings.PrintAllAttributes ? SerializeEntryAttributes(requestedEntry, dependencyOf) : "" ); } } } return(finalOutput); }
private string SerializeEntryAttributes(IRequestedEntryModel requestedEntry, string dependencyOf = null) { var shouldPrintEntryAttribute = !string.IsNullOrEmpty(requestedEntry.Name); var shouldPrintKeyAttribute = !string.IsNullOrEmpty(requestedEntry.Key); var shouldPrintSinkAttribute = !string.IsNullOrEmpty(requestedEntry.Sink); var shouldPrintRequestedBy = !string.IsNullOrEmpty(dependencyOf); var shouldPrintRequiresAttribute = requestedEntry.Requires.Any(); var shouldPrintRequiredByAttribute = requestedEntry.RequiredBy.Any(); var shouldPrintCSSOnlyAttribute = requestedEntry.CSSOnly; var shouldPrintJSOnlyAttribute = requestedEntry.JSOnly; return(string.Format( "{0}{1}{2}{3}{4}{5}{6}{7}", shouldPrintEntryAttribute ? $" entry=\"{requestedEntry.Name}\"" : "", shouldPrintKeyAttribute ? $" key=\"{requestedEntry.Key}\"" : "", shouldPrintSinkAttribute ? $" sink=\"{requestedEntry.Sink}\"" : "", shouldPrintRequestedBy ? $" dependency-of=\"{dependencyOf}\"" : "", shouldPrintRequiresAttribute ? $" requires=\"{string.Join(',', requestedEntry.Requires)}\"" : "", shouldPrintRequiredByAttribute ? $" required-by=\"{string.Join(',', requestedEntry.RequiredBy)}\"" : "", shouldPrintCSSOnlyAttribute ? $" css-only" : "", shouldPrintJSOnlyAttribute ? $" js-only" : "" )); }
public bool TryGetRequestedEntryByName(string name, out IRequestedEntryModel requestedEntry) { return(RequestedEntriesDictionaryByName.TryGetValue(name, out requestedEntry)); }
public bool TryGetRequestedEntryByIdentifier(string identifier, out IRequestedEntryModel requestedEntry) { return(RequestedEntriesDictionaryByIdentifier.TryGetValue(identifier, out requestedEntry)); }