Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 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("");
 }
Ejemplo n.º 4
0
        public bool TryMarkEntryAsSerialized(IRequestedEntryModel requestedEntry)
        {
            var identifier = requestedEntry.GetIdentifier();

            if (!SerializedEntries.ContainsKey(identifier))
            {
                SerializedEntries.Add(identifier, requestedEntry);
                requestedEntry.MarkAsProcessed();
                return(true);
            }
            return(false);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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" : ""
                       ));
        }
Ejemplo n.º 7
0
 public bool TryGetRequestedEntryByName(string name, out IRequestedEntryModel requestedEntry)
 {
     return(RequestedEntriesDictionaryByName.TryGetValue(name, out requestedEntry));
 }
Ejemplo n.º 8
0
 public bool TryGetRequestedEntryByIdentifier(string identifier, out IRequestedEntryModel requestedEntry)
 {
     return(RequestedEntriesDictionaryByIdentifier.TryGetValue(identifier, out requestedEntry));
 }