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); }
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); }