3.1.1 • Published 1 year ago

shua v3.1.1

Weekly downloads
11
License
GPL-3.0-or-later
Repository
github
Last release
1 year ago

Shua

Shua is a common file downloader implemented by Node.js. Inspired by Minyami download core.

The target of Shua is to provide a way to download thousands of small files in a short time.

Installation

npm install -g shua

Note: Shua needs Node.js 12.0.0+.

Expressions

Shua supports generating urls from a url expression.

Integer Expressions

Syntax: {{%d(start: integer, end: integer, step?: integer, leftPad?: integer)}}

For example, to download

https://example.com/segment1.ts
https://example.com/segment2.ts
https://example.com/segment3.ts
...
https://example.com/segment100.ts

Just use the following command

shua -e "https://example.com/segment{{%d(1, 100)}}.ts"

Multi expressions is also supported.

To download

https://example.com/segment1_1.ts
https://example.com/segment1_2.ts
...
https://example.com/segment1_10.ts
https://example.com/segment2_1.ts
https://example.com/segment2_2.ts
...
https://example.com/segment2_10.ts
...
https://example.com/segment5_10.ts

Use the following expression

shua -e "https://example.com/segment{{%d(1, 5)}}_{{%d(1, 10)}}.ts"

To download

https://example.com/segment001.ts
https://example.com/segment002.ts
https://example.com/segment003.ts
...
https://example.com/segment100.ts

Use

shua -e "https://example.com/segment{{%d(1, 100, 1, 3)}}.ts"

Example

Download all urls from a.txt with 16 threads

shua -f a.txt --threads 16

Options

--file, -f <path>

Download all URLs containing in a file. Both local path and remote URLs are supported as import. Lines couldn't be parsed as an valid URL will be ignored by default.

Examples

shua -f "files.txt"
shua -f "https://example.com/file_list.txt"

--expression, -e <expression>

Download all URLs generated from a expression. See Expressions section above.

--json, -j <path>

Download tasks defined in a json file. JSON files should contain a DownloadTask array.

interface DownloadTask {
    /** URL */
    url: string;
    /** retry count */
    retryCount: number;
    /** output filename */
    filename?: string;
    /** custom HTTP headers */
    headers?: Record<string, string>;
}
type Tasks = DownloadTask[];

--threads <limit>

Threads limit.

--retries, -r <limit>

Max attempts for download tasks.

--timeout <threshold>

Timeout threshold for download tasks in milliseconds.

--concat, -c (3.0.0+)

Concatenate all downloaded files into a single output file.

--output, -o <name>

Output folder name.

Nested paths are not supported now.

if --concat is provided, --output will be used for concentration.

--ascending, -a

Rename output files in numerical ascending order.

--debug, --verbose

Enable debug log output.

Use as a library

Getting Started

import { Downloader } from 'shua';
const downloader = new Downloader();
downloader.addUrlsFromFile('urls.txt');
downloader.on('finish', () => {
   console.log('All files downloaded!');
});
downloader.start();

Events

Event NameParameters
progressfinishedCount: number, totalCount: number
task-finishtask: Task
task-errorerr: Error, task: Task
finish
3.1.1

1 year ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.2

2 years ago

3.1.0

2 years ago

3.0.1

2 years ago

3.0.0-rc.2

2 years ago

3.0.0-rc.1

2 years ago

3.0.0

2 years ago

3.0.0-rc.3

2 years ago

2.0.11

2 years ago

2.0.9

2 years ago

2.0.10

2 years ago

2.0.8

2 years ago

2.0.7

3 years ago

2.0.6

3 years ago

2.0.5

4 years ago

2.0.4

4 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.1.8

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

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