proload

File & Buffer URI downloader with a progress bar, compatible with ora.

Usage no npm install needed!

<script type="module">
  import proload from 'https://cdn.skypack.dev/proload';
</script>

README

proload

License NPM Version Build Status Code Coverage

File & Buffer URI downloader with a progress bar, compatible with ora.

TOC

  1. Install
  2. Features
  3. API
    1. Options
  4. Examples
    1. Download to Buffer
    2. Download to File
    3. Existing Ora Spinner
  5. Known Issues
  6. Contribute

Install

npm i -D proload

Features

  • Ora optional integration (= ability to attach an existing ora instance).
  • Automatically creates the destination directory if it does not exist.
  • Can return a buffer of the data instead of creating a new file.

API

proload(uri: string, options?: Object): Promise<Buffer>
proload(uri: string, destFilePath: string, options?: Object): Promise<Buffer>

Options

{
  request: request.CoreOptions; // @see https://github.com/request/request#requestoptions-callback
  spinner: {
    instance: ora.Ora;
    progressPrefix: string; // Prefix message while downloading (before the `XXX%`)
    progressSuffix: string; // Suffix message while downloading (after the `XXX%`)
    successMessage: string; // Success message once the download has ended
  }
}

Examples

Download to Buffer

import proload from "proload";

(async () => {
  const dataBuffer = await proload("https://www.gutenberg.org/files/308/308-h.zip");

  console.log(dataBuffer.toString());
})();

Download to File

import proload from "proload";

(async () => {
  await proload("https://www.gutenberg.org/files/308/308-h.zip", "./Three Men in a Boat.zip");
})();

Existing Ora Spinner

import ora from "ora";
import proload from "proload";

const spinner = ora();

(async () => {
  const uri = "https://www.gutenberg.org/files/308/308-h.zip";
  const options = {
    spinner: {
      instance: spinner
    }
  };

  const dataBuffer = await proload(uri, options);
  // Or:
  await proload(uri, "./Three Men in a Boat.zip", options);

  // Don't forget that the spinner is on your side, so you will have to stop it yourself
  // or do something else with it:
  spinner.stop();
})();

Known Issues

If you want to use rimraf or make-dir before calling proload() in your code, you will have to use the .sync() method instead of the await mode. I don't know yet why this issue happens and will try my best to find a fix.

Contribute

Get Started

npm i

Test

  • All Tests: npm test
  • Lint Tests: npm run test:lint
  • Unit Tests: npm run test:unit
  • Unit Tests (watch): npm run test:watch