Ejemplo n.º 1
0
 public SourceCodeDownloadService(ModuleProjectBuilder moduleProjectBuilder,
                                  NugetPackageProjectBuilder nugetPackageProjectBuilder,
                                  NpmPackageProjectBuilder npmPackageProjectBuilder)
 {
     ModuleProjectBuilder       = moduleProjectBuilder;
     NugetPackageProjectBuilder = nugetPackageProjectBuilder;
     NpmPackageProjectBuilder   = npmPackageProjectBuilder;
     Logger = NullLogger <SourceCodeDownloadService> .Instance;
 }
Ejemplo n.º 2
0
        public async Task DownloadNpmPackageAsync(string packageName, string outputFolder, string version)
        {
            Logger.LogInformation("Downloading source code of " + packageName);
            Logger.LogInformation("Version: " + version);
            Logger.LogInformation("Output folder: " + outputFolder);

            var result = await NpmPackageProjectBuilder.BuildAsync(
                new ProjectBuildArgs(
                    SolutionName.Parse(packageName),
                    packageName,
                    version,
                    outputFolder
                    )
                );

            using (var templateFileStream = new MemoryStream(result.ZipContent))
            {
                using (var zipInputStream = new ZipInputStream(templateFileStream))
                {
                    var zipEntry = zipInputStream.GetNextEntry();
                    while (zipEntry != null)
                    {
                        var fullZipToPath = Path.Combine(outputFolder, zipEntry.Name);
                        var directoryName = Path.GetDirectoryName(fullZipToPath);

                        if (!string.IsNullOrEmpty(directoryName))
                        {
                            Directory.CreateDirectory(directoryName);
                        }

                        var fileName = Path.GetFileName(fullZipToPath);
                        if (fileName.Length == 0)
                        {
                            zipEntry = zipInputStream.GetNextEntry();
                            continue;
                        }

                        var buffer = new byte[4096]; // 4K is optimum
                        using (var streamWriter = File.Create(fullZipToPath))
                        {
                            StreamUtils.Copy(zipInputStream, streamWriter, buffer);
                        }

                        zipEntry = zipInputStream.GetNextEntry();
                    }
                }
            }

            Logger.LogInformation($"'{packageName}' has been successfully downloaded to '{outputFolder}'");
        }