示例#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);
        }
示例#2
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = null;
            if (context.AllAttributes.TryGetAttribute("name", out var name))
            {
                var entryName = name.Value.ToString();
                if (_entriesManifest.Value.ContainsKey(entryName))
                {
                    var entry = RequestedEntryModel.BuildWebpackEntry(entryName);

                    if (context.AllAttributes.TryGetAttribute("key", out var key))
                    {
                        entry.Key = key.Value.ToString();
                    }

                    if (context.AllAttributes.TryGetAttribute("sink", out var sink))
                    {
                        entry.Sink = sink.Value.ToString();
                    }

                    if (context.AllAttributes.TryGetAttribute("async", out var async))
                    {
                        entry.Async = true;
                    }

                    if (context.AllAttributes.TryGetAttribute("defer", out var defer))
                    {
                        entry.Defer = true;
                    }

                    if (context.AllAttributes.TryGetAttribute("css-only", out var cssOnly))
                    {
                        entry.CSSOnly = true;
                    }

                    if (context.AllAttributes.TryGetAttribute("js-only", out var jsOnly))
                    {
                        entry.JSOnly = true;
                    }

                    if (context.AllAttributes.TryGetAttribute("requires", out var requires))
                    {
                        entry.Requires = requires.Value.ToString().Split(',');
                    }

                    if (context.AllAttributes.TryGetAttribute("required-by", out var requiredBy))
                    {
                        entry.RequiredBy = requiredBy.Value.ToString().Split(',');
                    }

                    _viewData.AddEntry(entry);
                }
            }
        }
示例#3
0
        public void AddEntry(RequestedEntryModel entry)
        {
            var identifier = entry.GetIdentifier();

            if (!RequestedEntriesDictionaryByIdentifier.ContainsKey(identifier))
            {
                RequestedEntries.Add(entry);
                RequestedEntriesDictionaryByIdentifier.Add(identifier, entry);
                RequestedEntriesDictionaryByName.TryAdd(entry.Name ?? identifier, entry);
            }
        }
示例#4
0
        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            var content = (await output.GetChildContentAsync()).GetContent();

            output.TagName = null;
            output.SuppressOutput();

            var entry = RequestedEntryModel.BuildLiteralEntry(content);

            if (context.AllAttributes.TryGetAttribute("name", out var name))
            {
                entry.Name = name.Value.ToString();
            }

            if (context.AllAttributes.TryGetAttribute("key", out var key))
            {
                entry.Key = key.Value.ToString();
            }

            if (context.AllAttributes.TryGetAttribute("sink", out var sink))
            {
                entry.Sink = sink.Value.ToString();
            }

            if (context.AllAttributes.TryGetAttribute("requires", out var requires))
            {
                entry.Requires = requires.Value.ToString().Split(',');
            }

            if (context.AllAttributes.TryGetAttribute("required-by", out var requiredBy))
            {
                entry.RequiredBy = requiredBy.Value.ToString().Split(',');
            }

            _viewData.AddEntry(entry);
        }