download.ts 806 B

1234567891011121314151617181920212223242526
  1. import path from 'path';
  2. import { Readable, Writable, Transform } from 'stream';
  3. // eslint-disable-next-line no-restricted-imports
  4. import axios from 'axios';
  5. import fs from 'graceful-fs';
  6. import mkdirp from 'mkdirp';
  7. import streamToPromise from 'stream-to-promise';
  8. export async function downloadTo(url: string, outDir: string, fileName: string, transform: Transform|null = null): Promise<void> {
  9. // get
  10. const response = await axios.get(url, { responseType: 'stream' });
  11. // mkdir -p
  12. mkdirp.sync(outDir);
  13. // replace and write
  14. let stream: Readable = response.data;
  15. if (transform != null) {
  16. stream = stream.pipe(transform);
  17. }
  18. const file = path.join(outDir, fileName);
  19. const writeStream: Writable = stream.pipe(fs.createWriteStream(file));
  20. return streamToPromise(writeStream);
  21. }