Skip to content

Commit f5b128b

Browse files
authored
[add] Range Download method & example (#7)
1 parent 7c81d39 commit f5b128b

File tree

6 files changed

+1451
-1413
lines changed

6 files changed

+1451
-1413
lines changed

.husky/pre-commit

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
#!/bin/sh
2-
3-
. "$(dirname "$0")/_/husky.sh"
4-
51
npm test

.husky/pre-push

-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
#!/bin/sh
2-
3-
. "$(dirname "$0")/_/husky.sh"
4-
51
npm run build

ReadMe.md

+33-1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ client.get('/path/to/your/API').then(console.log);
9797

9898
### Up/Download files
9999

100+
#### Single HTTP request based on XMLHTTPRequest `progress` events
101+
100102
(based on [Iterable Observer][6])
101103

102104
```javascript
@@ -123,10 +125,40 @@ document.querySelector('input[type="file"]').onchange = async ({
123125
};
124126
```
125127

128+
#### Multiple HTTP requests based on `Range` header
129+
130+
```shell
131+
npm i native-file-system-adapter # Web standard API polyfill
132+
```
133+
134+
```javascript
135+
import { showSaveFilePicker } from 'native-file-system-adapter';
136+
import { HTTPClient } from 'koajax';
137+
138+
const bufferClient = new HTTPClient({ responseType: 'arraybuffer' });
139+
140+
document.querySelector('#download').onclick = async () => {
141+
const fileURL = 'https://your.server/with/Range/header/supported/file.zip';
142+
const suggestedName = fileURL.split('/').at(-1);
143+
144+
const fileHandle = await showSaveFilePicker({ suggestedName });
145+
const writer = await fileHandle.createWritable(),
146+
stream = bufferClient.download();
147+
148+
for await (const { total, loaded, percent, buffer } of stream) {
149+
writer.write(buffer);
150+
151+
console.table({ total, loaded, percent });
152+
}
153+
write.close();
154+
window.alert(`File ${fileHandle.name} downloaded successfully!`);
155+
};
156+
```
157+
126158
### Global Error fallback
127159

128160
```shell
129-
npm install browser-unhandled-rejection
161+
npm install browser-unhandled-rejection # Web standard API polyfill
130162
```
131163

132164
```javascript

package.json

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "koajax",
3-
"version": "0.9.6",
3+
"version": "1.0.0",
44
"license": "LGPL-3.0",
55
"author": "[email protected]",
66
"description": "HTTP Client based on Koa-like middlewares",
@@ -25,35 +25,35 @@
2525
"main": "dist/index.js",
2626
"module": "dist/index.esm.js",
2727
"dependencies": {
28-
"@swc/helpers": "^0.5.3",
28+
"@swc/helpers": "^0.5.8",
2929
"iterable-observer": "^1.0.1",
30-
"regenerator-runtime": "^0.14.0",
31-
"web-utility": "^4.1.3"
30+
"regenerator-runtime": "^0.14.1",
31+
"web-utility": "^4.3.0"
3232
},
3333
"peerDependencies": {
3434
"jsdom": ">=21"
3535
},
3636
"devDependencies": {
37-
"@parcel/packager-ts": "~2.10.3",
38-
"@parcel/transformer-typescript-types": "~2.10.3",
37+
"@parcel/packager-ts": "~2.12.0",
38+
"@parcel/transformer-typescript-types": "~2.12.0",
3939
"@types/core-js": "^2.5.8",
40-
"@types/jest": "^29.5.10",
40+
"@types/jest": "^29.5.12",
4141
"@types/jsdom": "^21.1.6",
42-
"@types/node": "^18.18.13",
43-
"core-js": "^3.33.3",
42+
"@types/node": "^18.19.28",
43+
"core-js": "^3.36.1",
4444
"cross-env": "^7.0.3",
45-
"husky": "^8.0.3",
45+
"husky": "^9.0.11",
4646
"jest": "^29.7.0",
4747
"jest-environment-jsdom": "^29.7.0",
48-
"jsdom": "^22.1.0",
49-
"lint-staged": "^15.1.0",
50-
"open-cli": "^7.2.0",
51-
"parcel": "~2.10.3",
52-
"prettier": "^3.1.0",
53-
"ts-jest": "^29.1.1",
54-
"typedoc": "^0.25.3",
55-
"typedoc-plugin-mdn-links": "^3.1.4",
56-
"typescript": "~5.3.2"
48+
"jsdom": "^24.0.0",
49+
"lint-staged": "^15.2.2",
50+
"open-cli": "^8.0.0",
51+
"parcel": "~2.12.0",
52+
"prettier": "^3.2.5",
53+
"ts-jest": "^29.1.2",
54+
"typedoc": "^0.25.12",
55+
"typedoc-plugin-mdn-links": "^3.1.18",
56+
"typescript": "~5.4.3"
5757
},
5858
"prettier": {
5959
"singleQuote": true,
@@ -76,7 +76,7 @@
7676
"types": false
7777
},
7878
"scripts": {
79-
"prepare": "husky install",
79+
"prepare": "husky",
8080
"test": "lint-staged && jest",
8181
"pack-dist": "rm -rf dist/ && tsc --emitDeclarationOnly && parcel build",
8282
"pack-docs": "rm -rf docs/ && typedoc source/",

0 commit comments

Comments
 (0)