Пример #1
0
        public DependencyNode(
            NodejsProjectNode root,
            DependencyNode parent,
            IPackage package)
            : base(root) {
            _projectNode = root;
            _parent = parent;
            Package = package;

            _displayString = GetInitialPackageDisplayString(package);
            ExcludeNodeFromScc = true;
        }
Пример #2
0
        public DependencyNode(
            NodejsProjectNode root,
            DependencyNode parent,
            IPackage package)
            : base(root) {
            _projectNode = root;
            _parent = parent;
            Package = package;

            var buff = new StringBuilder(package.Name);
            if (package.IsMissing) {
                buff.Append(" (missing)");
            } else {
                buff.Append('@');
                buff.Append(package.Version);

                if (!package.IsListedInParentPackageJson) {
                    buff.AppendFormat(" (not listed in {0})", NodejsConstants.PackageJsonFile);
                } else {
                    List<string> dependencyTypes = new List<string>(3);
                    if (package.IsDependency) {
                        dependencyTypes.Add("standard");
                    }
                    if (package.IsDevDependency) {
                        dependencyTypes.Add("dev");
                    }
                    if (package.IsOptionalDependency) {
                        dependencyTypes.Add("optional");
                    }

                    if (package.IsDevDependency || package.IsOptionalDependency) {
                        buff.Append(" (");
                        buff.Append(string.Join(", ", dependencyTypes.ToArray()));
                        buff.Append(")");
                    }
                }
            }

            if (package.IsBundledDependency) {
                buff.Append("[bundled]");
            }

            _displayString = buff.ToString();
            ExcludeNodeFromScc = true;
        }
Пример #3
0
 public async System.Threading.Tasks.Task UninstallModule(DependencyNode node) {
     if (!CheckValidCommandTarget(node)) {
         return;
     }
     DoPreCommandActions();
     try {
         using (var commander = NpmController.CreateNpmCommander()) {
             if (node.GetPropertiesObject().IsGlobalInstall) {
                 await commander.UninstallGlobalPackageAsync(node.Package.Name);
             } else {
                 await commander.UninstallPackageAsync(node.Package.Name);
             }
         }
     } catch (NpmNotFoundException nnfe) {
         ErrorHelper.ReportNpmNotInstalled(null, nnfe);
     } finally {
         AllowCommands();
     }
 }
Пример #4
0
        public async System.Threading.Tasks.Task InstallMissingModule(DependencyNode node) {
            if (!CheckValidCommandTarget(node)) {
                return;
            }

            var root = _npmController.RootPackage;
            if (null == root) {
                return;
            }

            var pkgJson = root.PackageJson;
            if (null == pkgJson) {
                return;
            }

            var package = node.Package;
            var dep = root.PackageJson.AllDependencies[package.Name];

            DoPreCommandActions();
            try {
                using (var commander = NpmController.CreateNpmCommander()) {
                    if (node.GetPropertiesObject().IsGlobalInstall) {
                        //  I genuinely can't see a way this would ever happen but, just to be on the safe side...
                        await commander.InstallGlobalPackageByVersionAsync(
                            package.Name,
                            null == dep ? "*" : dep.VersionRangeText);
                    } else {
                        await commander.InstallPackageByVersionAsync(
                            package.Name,
                            null == dep ? "*" : dep.VersionRangeText,
                            DependencyType.Standard,
                            false);
                    }
                }
            } catch (NpmNotFoundException nnfe) {
                ErrorHelper.ReportNpmNotInstalled(null, nnfe);
            } finally {
                AllowCommands();
            }
        }
Пример #5
0
 private bool CheckValidCommandTarget(DependencyNode node) {
     if (null == node) {
         return false;
     }
     var props = node.GetPropertiesObject();
     if (null == props || props.IsSubPackage) {
         return false;
     }
     var package = node.Package;
     if (null == package) {
         return false;
     }
     return true;
 }
Пример #6
0
        private IEnumerable<IPackage> BuildModuleHierarchy(HierarchyNode parent, IEnumerable<IPackage> modules, IReadOnlyDictionary<string, DependencyNode> recycle)
        {
            if (modules == null) {
                return Enumerable.Empty<IPackage>();
            }

            var newModules = new List<IPackage>();
            foreach (var package in modules) {
                DependencyNode child;
                if (recycle.ContainsKey(package.Name)) {
                    child = recycle[package.Name];
                    child.Package = package;
                } else {
                    child = new DependencyNode(_projectNode, parent as DependencyNode, package);
                    parent.AddChild(child);
                    newModules.Add(package);
                }

                ReloadHierarchy(child, package.Modules);
                if (ProjectMgr.ParentHierarchy != null) {
                    child.ExpandItem(EXPANDFLAGS.EXPF_CollapseFolder);
                }
            }
            return newModules;
        }
 internal DependencyNodeProperties(DependencyNode node) : base(node) {}
Пример #8
0
 internal DependencyNodeProperties(DependencyNode node) : base(node)
 {
 }
Пример #9
0
 public async System.Threading.Tasks.Task UpdateModule(DependencyNode node) {
     if (!CheckValidCommandTarget(node)) {
         return;
     }
     DoPreCommandActions();
     try {
         using (var commander = NpmController.CreateNpmCommander()) {
             await commander.UpdatePackagesAsync(new[] { node.Package });
         }
     } catch (NpmNotFoundException nnfe) {
         ErrorHelper.ReportNpmNotInstalled(null, nnfe);
     } finally {
         AllowCommands();
     }
 }
Пример #10
0
        public async System.Threading.Tasks.Task InstallMissingModule(DependencyNode node) {
            if (!CheckValidCommandTarget(node)) {
                return;
            }

            var root = _npmController.RootPackage;
            if (null == root) {
                return;
            }

            var pkgJson = root.PackageJson;
            if (null == pkgJson) {
                return;
            }

            var package = node.Package;
            var dep = root.PackageJson.AllDependencies[package.Name];

            DoPreCommandActions();
            try {
                using (var commander = NpmController.CreateNpmCommander()) {
                    await commander.InstallPackageByVersionAsync(
                        package.Name,
                        null == dep ? "*" : dep.VersionRangeText,
                        DependencyType.Standard,
                        false);
                }
            } catch (NpmNotFoundException nnfe) {
                ErrorHelper.ReportNpmNotInstalled(null, nnfe);
            } finally {
                AllowCommands();
            }
        }
Пример #11
0
        public async System.Threading.Tasks.Task UninstallModule(DependencyNode node) {
            if (!CheckValidCommandTarget(node)) {
                return;
            }

            await RunNpmCommand(async commander => {
                await commander.UninstallPackageAsync(node.Package.Name);
            });
        }
Пример #12
0
 public async System.Threading.Tasks.Task UpdateModule(DependencyNode node) {
     if (!CheckValidCommandTarget(node)) {
         return;
     }
     await RunNpmCommand(async commander => {
         await commander.UpdatePackagesAsync(new[] { node.Package });
     });
 }
Пример #13
0
        public async System.Threading.Tasks.Task InstallMissingModule(DependencyNode node) {
            if (!CheckValidCommandTarget(node)) {
                return;
            }

            var root = _npmController.RootPackage;
            if (null == root) {
                return;
            }

            var pkgJson = root.PackageJson;
            if (null == pkgJson) {
                return;
            }

            var package = node.Package;
            var dep = root.PackageJson.AllDependencies[package.Name];

            await RunNpmCommand(async commander => {
                await commander.InstallPackageByVersionAsync(
                    package.Name,
                    null == dep ? "*" : dep.VersionRangeText,
                    DependencyType.Standard,
                    false);
            });
        }
Пример #14
0
        protected void ReloadHierarchy(HierarchyNode parent, IEnumerable <IPackage> modules)
        {
            //  We're going to reuse nodes for which matching modules exist in the new set.
            //  The reason for this is that we want to preserve the expansion state of the
            //  hierarchy. If we just bin everything off and recreate it all from scratch
            //  it'll all be in the collapsed state, which will be annoying for users who
            //  have drilled down into the hierarchy
            var recycle = new Dictionary <string, DependencyNode>();
            var remove  = new List <HierarchyNode>();

            for (var current = parent.FirstChild; null != current; current = current.NextSibling)
            {
                var dep = current as DependencyNode;
                if (null == dep)
                {
                    if (!(current is GlobalModulesNode) && !(current is LocalModulesNode))
                    {
                        remove.Add(current);
                    }
                    continue;
                }

                if (modules != null && modules.Any(
                        module =>
                        module.Name == dep.Package.Name &&
                        module.Version == dep.Package.Version &&
                        module.IsBundledDependency == dep.Package.IsBundledDependency &&
                        module.IsDevDependency == dep.Package.IsDevDependency &&
                        module.IsListedInParentPackageJson == dep.Package.IsListedInParentPackageJson &&
                        module.IsMissing == dep.Package.IsMissing &&
                        module.IsOptionalDependency == dep.Package.IsOptionalDependency))
                {
                    recycle[dep.Package.Name] = dep;
                }
                else
                {
                    remove.Add(current);
                }
            }

            foreach (var obsolete in remove)
            {
                parent.RemoveChild(obsolete);
                ProjectMgr.OnItemDeleted(obsolete);
            }

            if (modules != null)
            {
                foreach (var package in modules)
                {
                    DependencyNode child;

                    if (recycle.ContainsKey(package.Name))
                    {
                        child         = recycle[package.Name];
                        child.Package = package;
                    }
                    else
                    {
                        child = new DependencyNode(_projectNode, parent as DependencyNode, package);
                        parent.AddChild(child);
                    }

                    ReloadHierarchy(child, package.Modules);
                    if (ProjectMgr.ParentHierarchy != null)
                    {
                        child.ExpandItem(EXPANDFLAGS.EXPF_CollapseFolder);
                    }
                }
            }
        }
Пример #15
0
        protected void ReloadHierarchy(HierarchyNode parent, IEnumerable<IPackage> modules) {
            //  We're going to reuse nodes for which matching modules exist in the new set.
            //  The reason for this is that we want to preserve the expansion state of the
            //  hierarchy. If we just bin everything off and recreate it all from scratch
            //  it'll all be in the collapsed state, which will be annoying for users who
            //  have drilled down into the hierarchy
            var recycle = new Dictionary<string, DependencyNode>();
            var remove = new List<HierarchyNode>();
            for (var current = parent.FirstChild; null != current; current = current.NextSibling) {
                var dep = current as DependencyNode;
                if (null == dep) {
                    if (!(current is GlobalModulesNode) && !(current is LocalModulesNode)) {
                        remove.Add(current);
                    }
                    continue;
                }

                if (modules != null && modules.Any(
                    module =>
                        module.Name == dep.Package.Name
                        && module.Version == dep.Package.Version
                        && module.IsBundledDependency == dep.Package.IsBundledDependency
                        && module.IsDevDependency == dep.Package.IsDevDependency
                        && module.IsListedInParentPackageJson == dep.Package.IsListedInParentPackageJson
                        && module.IsMissing == dep.Package.IsMissing
                        && module.IsOptionalDependency == dep.Package.IsOptionalDependency)) {
                    recycle[dep.Package.Name] = dep;
                } else {
                    remove.Add(current);
                }
            }

            foreach (var obsolete in remove) {
                parent.RemoveChild(obsolete);
                ProjectMgr.OnItemDeleted(obsolete);
            }

            if (modules != null) {
                foreach (var package in modules) {
                    DependencyNode child;

                    if (recycle.ContainsKey(package.Name)) {
                        child = recycle[package.Name];
                        child.Package = package;
                    }
                    else {
                        child = new DependencyNode(_projectNode, parent as DependencyNode, package);
                        parent.AddChild(child);
                    }

                    ReloadHierarchy(child, package.Modules);
                    if (ProjectMgr.ParentHierarchy != null) {
                        child.ExpandItem(EXPANDFLAGS.EXPF_CollapseFolder);
                    }
                }
            }
        }