0.6.1 • Published 5 months ago
dler v0.6.1
dler
A simple download function with no dependency, based on built-in fetch.
!IMPORTANT
dler
is ESM only, and as it use the built-infetch
, it requiresnodejs>=17.5.0
Installation
$ npm install dler
Usage
import { download } from 'dler';
const url = 'https://api.ip.sb/ip';
// simple
download(url, './ipinfo.txt');
// auto detect file name
download(url);
download(url, 'dirname/');
// with options
download(url, {
filePath: 'dirname/',
onProgress: (receivedLength, totalLength) => {
if (totalLength) console.log((100 * (receivedLength / totalLength)).toFixed(2) + '%');
},
onReady: (resp, saveAs) => console.log(`Downloading ${resp.url} to ${saveAs}`),
/* other options in RequestInit */
});
// use promise
download(url [,options]).then(path => console.log(`File saved to ${path}`));
// use async/await
const absolutePath = await download(url [,options]);
/**
* options should fit `DlerInit`.
* default boolean type options, will be `false` if unset.
*/
interface DlerInit extends RequestInit {
/**
* If not provided or provided as a string with a suffix '/', the file name will be obtained from
* the `Content-Disposition` header or the basename of the requested URL.
*/
filePath?: string;
/**
* We use lowerCamelCase to avoid naming conflicts with `RequestInit`.
* You cannot use this option with `signal` at the same time, as this option is just a wrapper of `signal`.
*/
doNotCheckOK?: boolean;
/**
* Options object for the `createWriteStream()` function to create file, if needed.
*/
streamOptions?: Parameters<typeof createWriteStream>[1];
/**
* If `Content-Length` is not provided, `totalLength` will be set to `0`.
*/
onProgress?: (receivedLength?: number, totalLength?: number) => void;
/**
* Callback when starting to save the file to the disk.
* If a string is returned, the file will be downloaded to that path.
* This will override the `filePath` option.
*/
onReady?: (resp?: Response, saveAs?: string) => void | string;
}
use as a cli tool (will log a progress bar in console)
import { downloadInCLI } from 'dler';
const progressBarWidth = 50; // default value
await downloadInCLI(url, [options[, progressBarWidth]]);
use as a global command
$ npm i dler -g
$ dler --help
use your own fetch
function
import { downloadFromFetch } from 'dler';
const myFetch: typeof fetch = async (input, init) => {
const res = await fetch(input, init);
console.log(res); // do something...
return res;
};
const path = await downloadFromFetch(myFetch, 'https://example.net/test.html', {
filePath: './',
);
Example
see ./test
0.6.1
5 months ago
0.5.0
10 months ago
0.6.0
7 months ago
0.4.4
1 year ago
0.4.1
1 year ago
0.4.0
1 year ago
0.4.3
1 year ago
0.3.2
1 year ago
0.3.1
1 year ago
0.3.0
1 year ago
0.2.7
2 years ago
0.2.9
2 years ago
0.2.8
2 years ago
0.2.6
2 years ago
0.2.5
2 years ago
0.2.1
2 years ago
0.2.0
2 years ago
0.1.1
2 years ago
0.2.3
2 years ago
0.2.2
2 years ago
0.2.4
2 years ago
0.1.0
2 years ago
0.0.1
4 years ago
1.0.3
4 years ago
1.0.2
4 years ago
1.0.1
4 years ago
1.0.0
4 years ago