Пример #1
0
        public static JsAnalyzer Analyze(string directory, AnalysisLimits limits = null, Action parseCallback = null)
        {
            List <AnalysisFile> files = new List <AnalysisFile>();

            foreach (var file in Directory.GetFiles(directory, "*", SearchOption.AllDirectories))
            {
                if (String.Equals(Path.GetExtension(file), ".js", StringComparison.OrdinalIgnoreCase))
                {
                    var relativeFile = file.Substring(directory.Length);
                    if (!limits.IsPathExceedNestingLimit(relativeFile))
                    {
                        files.Add(new AnalysisFile(file, File.ReadAllText(file)));
                    }
                }
                else if (String.Equals(Path.GetFileName(file), "package.json", StringComparison.OrdinalIgnoreCase))
                {
                    JavaScriptSerializer        serializer = new JavaScriptSerializer();
                    Dictionary <string, object> json;
                    try {
                        json = serializer.Deserialize <Dictionary <string, object> >(File.ReadAllText(file));
                    } catch {
                        continue;
                    }

                    object mainFile;
                    if (json != null && json.TryGetValue("main", out mainFile) && mainFile is string)
                    {
                        files.Add(AnalysisFile.PackageJson(file, (string)mainFile));
                    }
                }
            }

            return(Analyze(limits, parseCallback, files.ToArray()));
        }
Пример #2
0
        public void RequireAssignedExports()
        {
            var entries = Analysis.Analyze(
                new AnalysisFile("mod.js", @"var x = require('mymod').value;"),
                AnalysisFile.PackageJson("node_modules\\mymod\\package.json", "./lib/mymod"),
                new AnalysisFile("node_modules\\mymod\\lib\\mymod.js", @"exports.value = 42;"),
                new AnalysisFile("node_modules\\mymod\\lib\\mymod\\foo.js", @"exports.value = 'abc';")
                );

            AssertUtil.ContainsExactly(
                entries["mod.js"].Analysis.GetTypeIdsByIndex("x", 0),
                BuiltinTypeId.Number
                );
        }
Пример #3
0
        public void RequireTrailingSlash()
        {
            var entries = Analysis.Analyze(
                new AnalysisFile("mod.js", @"var x = require('mymod').value;"),
                new AnalysisFile("node_modules\\mymod\\mymod.js", @"module.exports = require('./mymod/')"),
                AnalysisFile.PackageJson("node_modules\\mymod\\package.json", "./mymod.js"),
                new AnalysisFile("node_modules\\mymod\\mymod\\index.js", @"exports.value = 'abc';")
                );

            AssertUtil.ContainsExactly(
                entries["mod.js"].Analysis.GetTypeIdsByIndex("x", 0),
                BuiltinTypeId.String
                );
        }