コード例 #1
0
        private TransformationCollection GetTransformations(VisitorResult result, List <RequireCall> flattened)
        {
            var trans      = new TransformationCollection();
            var moduleName = this.CheckForConfigPath(RelativeFileName.ToModuleName());

            if (!result.RequireCalls.Any())
            {
                var shim = GetShim(RelativeFileName);
                var deps = new List <string>();
                if (shim != null)
                {
                    deps = shim.Dependencies.Select(r => r.Dependency).ToList();
                }

                trans.Add(ShimFileTransformation.Create(moduleName, deps));
            }
            else
            {
                foreach (var reqCall in result.RequireCalls.Where(r => r.DependencyArrayNode != null))
                {
                    trans.Add(NormalizeDepsTransformation.Create(reqCall));
                }

                // if there are no define calls but there is at least one require module call, transform that into a define call
                if (!result.RequireCalls.Where(r => r.Type == RequireCallType.Define).Any())
                {
                    if (result.RequireCalls.Where(r => r.IsModule).Any())
                    {
                        var call = result.RequireCalls.Where(r => r.IsModule).FirstOrDefault();
                        trans.Add(ToDefineTransformation.Create(call));
                        trans.Add(AddIdentifierTransformation.Create(call, moduleName));
                    }

                    //TODO: Append shimmed dependencies here too
                }
                else
                {
                    var defineCall = result.RequireCalls.Where(r => r.Type == RequireCallType.Define).FirstOrDefault();
                    if (string.IsNullOrEmpty(defineCall.Id))
                    {
                        trans.Add(AddIdentifierTransformation.Create(defineCall, moduleName));
                    }

                    if (defineCall.DependencyArrayNode == null)
                    {
                        trans.Add(AddEmptyDepsArrayTransformation.Create(defineCall));
                    }

                    var shim = GetShim(RelativeFileName);
                    if (shim != null)
                    {
                        var deps = shim.Dependencies.Select(r => r.Dependency).ToList();
                        trans.Add(AddDepsTransformation.Create(defineCall, deps));
                    }
                }
            }

            return(trans);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: vulh91/RequireJSDotNet
        static void Main(string[] args)
        {
            var filePath    = GetPath(@"Scripts\BForms\Bundles\js\components.js");
            var minimalPath = GetPath(@"Scripts\minimal.js");
            var initUIPath  = GetPath(@"Scripts\BForms\Plugins\UI\bforms.initUI.js");

            var text    = File.ReadAllText(initUIPath);
            var parser  = new JavaScriptParser();
            var program = parser.Parse(text);
            var visitor = new RequireVisitor();
            var result  = visitor.Visit(program, initUIPath);

            var lines = GetScriptLines(text);

            var flattenedResults = result.GetFlattened();

            flattenedResults.ForEach(
                x =>
            {
                EnsureHasRange(x.ParentNode.Node, lines);
                EnsureHasRange(x.DependencyArrayNode, lines);
                EnsureHasRange(x.ModuleDefinitionNode, lines);
                EnsureHasRange(x.ModuleIdentifierNode, lines);
                EnsureHasRange(x.SingleDependencyNode, lines);
                var arguments = x.ParentNode.Node.As <CallExpression>().Arguments;
                foreach (var arg in arguments)
                {
                    EnsureHasRange(arg, lines);
                }
            });

            var reqLines = flattenedResults.Select(x => GetTextFromFullScript(x.ParentNode.Node.Range, text)).ToList();

            var modifiedString      = text;
            var transformCollection = new TransformationCollection();

            foreach (var req in flattenedResults)
            {
                transformCollection.Add(ToDefineTransformation.Create(req));
                if (req.Type != RequireCallType.Define)
                {
                    transformCollection.Add(AddIdentifierTransformation.Create(req, "gogu"));
                }
            }

            transformCollection.ExecuteAll(ref modifiedString);
        }