public NodeModules(IRootPackage parent, bool showMissingDevOptionalSubPackages) { var modulesBase = Path.Combine(parent.Path, "node_modules"); if (Directory.Exists(modulesBase)) { var bin = string.Format("{0}.bin", Path.DirectorySeparatorChar); foreach (var moduleDir in Directory.EnumerateDirectories(modulesBase)) { if (!moduleDir.EndsWith(bin)) { AddModule(new Package(parent, moduleDir, showMissingDevOptionalSubPackages)); } } } var parentPackageJson = parent.PackageJson; if (null != parentPackageJson) { foreach (var dependency in parentPackageJson.AllDependencies) { Package module = null; if (!Contains(dependency.Name)) { module = new Package( parent, Path.Combine(modulesBase, dependency.Name), showMissingDevOptionalSubPackages); if (parent as IPackage == null || !module.IsMissing || showMissingDevOptionalSubPackages) { AddModule(module); } } else { module = this[dependency.Name] as Package; } if (null != module) { module.RequestedVersionRange = dependency.VersionRangeText; } } } _packagesSorted.Sort(new PackageComparer()); }
private bool AddModuleIfNotExists(IRootPackage parent, string moduleDir, bool showMissingDevOptionalSubPackages, int depth, int maxDepth, IDependency dependency = null) { depth++; ModuleInfo moduleInfo; _allModules.TryGetValue(moduleDir, out moduleInfo); if (moduleInfo != null) { // Update module information if the module already exists. if (moduleInfo.Depth > depth) { moduleInfo.Depth = depth; } if (dependency != null) { var existingPackage = this[dependency.Name] as Package; if (existingPackage != null) { existingPackage.RequestedVersionRange = dependency.VersionRangeText; } } } else if (Directory.Exists(moduleDir) || depth == 1) { // Top-level modules are always added so we can include missing modules. moduleInfo = new ModuleInfo(depth); _allModules.Add(moduleDir, moduleInfo); } else { // The module directory wasn't found. return false; } IPackage package = moduleInfo.Package; if (package == null || depth == 1 || !moduleInfo.RequiredBy.Contains(parent.Path)) { // Create a dummy value for the current package to prevent infinite loops moduleInfo.Package = new PackageProxy(); moduleInfo.RequiredBy.Add(parent.Path); var pkg = new Package(parent, moduleDir, showMissingDevOptionalSubPackages, _allModules, depth, maxDepth); if (dependency != null) { pkg.RequestedVersionRange = dependency.VersionRangeText; } package = moduleInfo.Package = pkg; } if (parent as IPackage == null || !package.IsMissing || showMissingDevOptionalSubPackages) { AddModule(package); } return true; }
private bool AddModuleIfNotExists(IRootPackage parent, string moduleDir, bool showMissingDevOptionalSubPackages, int depth, IDependency dependency = null) { depth++; ModuleInfo moduleInfo; _allModules.TryGetValue(moduleDir, out moduleInfo); if (moduleInfo != null) { // Update module information if the module already exists. if (moduleInfo.Depth > depth) { moduleInfo.Depth = depth; } if (dependency != null) { var existingPackage = this[dependency.Name] as Package; if (existingPackage != null) { existingPackage.RequestedVersionRange = dependency.VersionRangeText; } } } else if (Directory.Exists(moduleDir) || depth == 1) { // Top-level modules are always added so we can include missing modules. moduleInfo = new ModuleInfo(depth); _allModules.Add(moduleDir, moduleInfo); } else { // The module directory wasn't found. return false; } if (moduleInfo.RequiredBy.Contains(parent.Name)) { return true; } moduleInfo.RequiredBy.Add(parent.Name); var package = new Package(parent, moduleDir, showMissingDevOptionalSubPackages, _allModules, depth); if (dependency != null) { package.RequestedVersionRange = dependency.VersionRangeText; } AddModule(package); return true; }