generic-filehandle2 2.0.14 → 2.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blobFile.d.ts +0 -1
- package/dist/blobFile.js +6 -4
- package/dist/blobFile.js.map +1 -1
- package/dist/localFile.js +1 -2
- package/dist/localFile.js.map +1 -1
- package/dist/remoteFile.js +20 -18
- package/dist/remoteFile.js.map +1 -1
- package/esm/blobFile.d.ts +0 -1
- package/esm/blobFile.js +6 -4
- package/esm/blobFile.js.map +1 -1
- package/esm/localFile.js +1 -2
- package/esm/localFile.js.map +1 -1
- package/esm/remoteFile.js +20 -18
- package/esm/remoteFile.js.map +1 -1
- package/package.json +5 -4
- package/src/blobFile.ts +6 -5
- package/src/localFile.ts +1 -2
- package/src/remoteFile.ts +22 -18
package/dist/blobFile.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ import type { FilehandleOptions, GenericFilehandle, Stats } from './filehandle.t
|
|
|
7
7
|
*/
|
|
8
8
|
export default class BlobFile implements GenericFilehandle {
|
|
9
9
|
private blob;
|
|
10
|
-
private size;
|
|
11
10
|
constructor(blob: Blob);
|
|
12
11
|
read(length: number, position?: number): Promise<Uint8Array<ArrayBuffer>>;
|
|
13
12
|
readFile(): Promise<Uint8Array<ArrayBuffer>>;
|
package/dist/blobFile.js
CHANGED
|
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
class BlobFile {
|
|
10
10
|
constructor(blob) {
|
|
11
11
|
this.blob = blob;
|
|
12
|
-
this.size = blob.size;
|
|
13
12
|
}
|
|
14
13
|
async read(length, position = 0) {
|
|
15
14
|
// short-circuit a read of 0 bytes here, because browsers actually sometimes
|
|
@@ -19,7 +18,9 @@ class BlobFile {
|
|
|
19
18
|
}
|
|
20
19
|
const start = position;
|
|
21
20
|
const end = start + length;
|
|
22
|
-
|
|
21
|
+
const slice = this.blob.slice(start, end);
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
23
|
+
return slice.bytes ? slice.bytes() : new Uint8Array(await slice.arrayBuffer());
|
|
23
24
|
}
|
|
24
25
|
async readFile(options) {
|
|
25
26
|
const encoding = typeof options === 'string' ? options : options?.encoding;
|
|
@@ -30,11 +31,12 @@ class BlobFile {
|
|
|
30
31
|
throw new Error(`unsupported encoding: ${encoding}`);
|
|
31
32
|
}
|
|
32
33
|
else {
|
|
33
|
-
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
35
|
+
return this.blob.bytes ? this.blob.bytes() : new Uint8Array(await this.blob.arrayBuffer());
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
async stat() {
|
|
37
|
-
return { size: this.size };
|
|
39
|
+
return { size: this.blob.size };
|
|
38
40
|
}
|
|
39
41
|
async close() {
|
|
40
42
|
return;
|
package/dist/blobFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobFile.js","sourceRoot":"","sources":["../src/blobFile.ts"],"names":[],"mappings":";;AAMA;;;;;GAKG;AACH,MAAqB,QAAQ;
|
|
1
|
+
{"version":3,"file":"blobFile.js","sourceRoot":"","sources":["../src/blobFile.ts"],"names":[],"mappings":";;AAMA;;;;;GAKG;AACH,MAAqB,QAAQ;IAG3B,YAAmB,IAAU;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,MAAc,EACd,QAAQ,GAAG,CAAC;QAEZ,4EAA4E;QAC5E,sDAAsD;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAA;QACtB,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAA;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACzC,uEAAuE;QACvE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAChF,CAAC;IAYM,KAAK,CAAC,QAAQ,CACnB,OAA4C;QAE5C,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAA;QAC1E,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACzB,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAA;QACtD,CAAC;aAAM,CAAC;YACN,uEAAuE;YACvE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,OAAM;IACR,CAAC;CACF;AAxDD,2BAwDC"}
|
package/dist/localFile.js
CHANGED
|
@@ -22,8 +22,7 @@ class LocalFile {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
async readFile(options) {
|
|
25
|
-
|
|
26
|
-
return typeof res === 'string' ? res : new Uint8Array(res);
|
|
25
|
+
return (0, promises_1.readFile)(this.filename, options);
|
|
27
26
|
}
|
|
28
27
|
async stat() {
|
|
29
28
|
return (0, promises_1.stat)(this.filename);
|
package/dist/localFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localFile.js","sourceRoot":"","sources":["../src/localFile.ts"],"names":[],"mappings":";;AAAA,0CAAkD;AAIlD,MAAqB,SAAS;IAG5B,YAAmB,MAAc,EAAE,QAA2B,EAAE;QAC9D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA,CAAC,iEAAiE;QACxE,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACnC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YACnD,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9C,CAAC;gBAAS,CAAC;YACT,iEAAiE;YACjE,IAAI,EAAE,EAAE,CAAC;gBACP,+CAA+C;gBAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAYM,KAAK,CAAC,QAAQ,CACnB,OAA4C;QAE5C,
|
|
1
|
+
{"version":3,"file":"localFile.js","sourceRoot":"","sources":["../src/localFile.ts"],"names":[],"mappings":";;AAAA,0CAAkD;AAIlD,MAAqB,SAAS;IAG5B,YAAmB,MAAc,EAAE,QAA2B,EAAE;QAC9D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA,CAAC,iEAAiE;QACxE,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACnC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YACnD,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9C,CAAC;gBAAS,CAAC;YACT,iEAAiE;YACjE,IAAI,EAAE,EAAE,CAAC;gBACP,+CAA+C;gBAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAYM,KAAK,CAAC,QAAQ,CACnB,OAA4C;QAE5C,OAAO,IAAA,mBAAQ,EAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,OAAO,IAAA,eAAI,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,gBAAgB;IAClB,CAAC;CACF;AA9CD,4BA8CC"}
|
package/dist/remoteFile.js
CHANGED
|
@@ -47,7 +47,7 @@ class RemoteFile {
|
|
|
47
47
|
async read(length, position, opts = {}) {
|
|
48
48
|
const { headers = {}, signal, overrides = {} } = opts;
|
|
49
49
|
if (length < Infinity) {
|
|
50
|
-
headers.range = `bytes=${position}-${position + length}`;
|
|
50
|
+
headers.range = `bytes=${position}-${position + length - 1}`;
|
|
51
51
|
}
|
|
52
52
|
else if (length === Infinity && position !== 0) {
|
|
53
53
|
headers.range = `bytes=${position}-`;
|
|
@@ -56,9 +56,9 @@ class RemoteFile {
|
|
|
56
56
|
...this.baseOverrides,
|
|
57
57
|
...overrides,
|
|
58
58
|
headers: {
|
|
59
|
-
...headers,
|
|
60
|
-
...overrides.headers,
|
|
61
59
|
...this.baseOverrides.headers,
|
|
60
|
+
...overrides.headers,
|
|
61
|
+
...headers,
|
|
62
62
|
},
|
|
63
63
|
method: 'GET',
|
|
64
64
|
redirect: 'follow',
|
|
@@ -69,7 +69,6 @@ class RemoteFile {
|
|
|
69
69
|
throw new Error(`HTTP ${res.status} fetching ${this.url}`);
|
|
70
70
|
}
|
|
71
71
|
if ((res.status === 200 && position === 0) || res.status === 206) {
|
|
72
|
-
const resData = await res.arrayBuffer();
|
|
73
72
|
// try to parse out the size of the remote file
|
|
74
73
|
const contentRange = res.headers.get('content-range');
|
|
75
74
|
const sizeMatch = /\/(\d+)$/.exec(contentRange || '');
|
|
@@ -78,15 +77,13 @@ class RemoteFile {
|
|
|
78
77
|
size: parseInt(sizeMatch[1], 10),
|
|
79
78
|
};
|
|
80
79
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (res.status === 200) {
|
|
85
|
-
throw new Error(`${this.url} fetch returned status 200, expected 206`);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
throw new Error(`HTTP ${res.status} fetching ${this.url}`);
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
81
|
+
const resData = res.bytes ? await res.bytes() : new Uint8Array(await res.arrayBuffer());
|
|
82
|
+
return resData.byteLength <= length ? resData : resData.subarray(0, length);
|
|
89
83
|
}
|
|
84
|
+
throw new Error(res.status === 200
|
|
85
|
+
? `${this.url} fetch returned status 200, expected 206`
|
|
86
|
+
: `HTTP ${res.status} fetching ${this.url}`);
|
|
90
87
|
}
|
|
91
88
|
async readFile(options = {}) {
|
|
92
89
|
let encoding;
|
|
@@ -97,18 +94,22 @@ class RemoteFile {
|
|
|
97
94
|
}
|
|
98
95
|
else {
|
|
99
96
|
encoding = options.encoding;
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
const { encoding: _, ...rest } = options;
|
|
98
|
+
opts = rest;
|
|
102
99
|
}
|
|
103
100
|
const { headers = {}, signal, overrides = {} } = opts;
|
|
104
101
|
const res = await this.fetch(this.url, {
|
|
105
|
-
|
|
102
|
+
...this.baseOverrides,
|
|
103
|
+
...overrides,
|
|
104
|
+
headers: {
|
|
105
|
+
...this.baseOverrides.headers,
|
|
106
|
+
...overrides.headers,
|
|
107
|
+
...headers,
|
|
108
|
+
},
|
|
106
109
|
method: 'GET',
|
|
107
110
|
redirect: 'follow',
|
|
108
111
|
mode: 'cors',
|
|
109
112
|
signal,
|
|
110
|
-
...this.baseOverrides,
|
|
111
|
-
...overrides,
|
|
112
113
|
});
|
|
113
114
|
if (res.status !== 200) {
|
|
114
115
|
throw new Error(`HTTP ${res.status} fetching ${this.url}`);
|
|
@@ -120,7 +121,8 @@ class RemoteFile {
|
|
|
120
121
|
throw new Error(`unsupported encoding: ${encoding}`);
|
|
121
122
|
}
|
|
122
123
|
else {
|
|
123
|
-
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
125
|
+
return res.bytes ? res.bytes() : new Uint8Array(await res.arrayBuffer());
|
|
124
126
|
}
|
|
125
127
|
}
|
|
126
128
|
async stat() {
|
package/dist/remoteFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../src/remoteFile.ts"],"names":[],"mappings":";;AAOA,SAAS,UAAU,CAAC,CAAU;IAC5B,MAAM,CAAC,GACL,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,IAAI,CAAC;QACnD,CAAC,CAAE,CAAC,CAAC,OAAkB;QACvB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;IACZ,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAC7B,CAAC;AAED,MAAqB,UAAU;IAM7B,YAAmB,MAAc,EAAE,OAA0B,EAAE;QAFvD,kBAAa,GAAQ,EAAE,CAAA;QAG7B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAA;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAA;QACrC,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,KAAkB,EAClB,IAA6B;QAE7B,IAAI,QAAQ,CAAA;QACZ,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACxD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACvC,4DAA4D;gBAC5D,oEAAoE;gBACpE,iDAAiD;gBACjD,uDAAuD;gBACvD,OAAO,CAAC,IAAI,CACV,kCAAkC,KAAK,2DAA2D,CACnG,CAAA;gBACD,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;wBAC/C,GAAG,IAAI;wBACP,KAAK,EAAE,QAAQ;qBAChB,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;gBACrE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,MAAc,EACd,QAAgB,EAChB,OAA0B,EAAE;QAE5B,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QACrD,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,GAAG,SAAS,QAAQ,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../src/remoteFile.ts"],"names":[],"mappings":"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"}
|
package/esm/blobFile.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ import type { FilehandleOptions, GenericFilehandle, Stats } from './filehandle.t
|
|
|
7
7
|
*/
|
|
8
8
|
export default class BlobFile implements GenericFilehandle {
|
|
9
9
|
private blob;
|
|
10
|
-
private size;
|
|
11
10
|
constructor(blob: Blob);
|
|
12
11
|
read(length: number, position?: number): Promise<Uint8Array<ArrayBuffer>>;
|
|
13
12
|
readFile(): Promise<Uint8Array<ArrayBuffer>>;
|
package/esm/blobFile.js
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
export default class BlobFile {
|
|
8
8
|
constructor(blob) {
|
|
9
9
|
this.blob = blob;
|
|
10
|
-
this.size = blob.size;
|
|
11
10
|
}
|
|
12
11
|
async read(length, position = 0) {
|
|
13
12
|
// short-circuit a read of 0 bytes here, because browsers actually sometimes
|
|
@@ -17,7 +16,9 @@ export default class BlobFile {
|
|
|
17
16
|
}
|
|
18
17
|
const start = position;
|
|
19
18
|
const end = start + length;
|
|
20
|
-
|
|
19
|
+
const slice = this.blob.slice(start, end);
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
21
|
+
return slice.bytes ? slice.bytes() : new Uint8Array(await slice.arrayBuffer());
|
|
21
22
|
}
|
|
22
23
|
async readFile(options) {
|
|
23
24
|
const encoding = typeof options === 'string' ? options : options?.encoding;
|
|
@@ -28,11 +29,12 @@ export default class BlobFile {
|
|
|
28
29
|
throw new Error(`unsupported encoding: ${encoding}`);
|
|
29
30
|
}
|
|
30
31
|
else {
|
|
31
|
-
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
33
|
+
return this.blob.bytes ? this.blob.bytes() : new Uint8Array(await this.blob.arrayBuffer());
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
async stat() {
|
|
35
|
-
return { size: this.size };
|
|
37
|
+
return { size: this.blob.size };
|
|
36
38
|
}
|
|
37
39
|
async close() {
|
|
38
40
|
return;
|
package/esm/blobFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobFile.js","sourceRoot":"","sources":["../src/blobFile.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;
|
|
1
|
+
{"version":3,"file":"blobFile.js","sourceRoot":"","sources":["../src/blobFile.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAG3B,YAAmB,IAAU;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,MAAc,EACd,QAAQ,GAAG,CAAC;QAEZ,4EAA4E;QAC5E,sDAAsD;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAA;QACtB,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAA;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACzC,uEAAuE;QACvE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAChF,CAAC;IAYM,KAAK,CAAC,QAAQ,CACnB,OAA4C;QAE5C,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAA;QAC1E,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACzB,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAA;QACtD,CAAC;aAAM,CAAC;YACN,uEAAuE;YACvE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,OAAM;IACR,CAAC;CACF"}
|
package/esm/localFile.js
CHANGED
|
@@ -20,8 +20,7 @@ export default class LocalFile {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
async readFile(options) {
|
|
23
|
-
|
|
24
|
-
return typeof res === 'string' ? res : new Uint8Array(res);
|
|
23
|
+
return readFile(this.filename, options);
|
|
25
24
|
}
|
|
26
25
|
async stat() {
|
|
27
26
|
return stat(this.filename);
|
package/esm/localFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localFile.js","sourceRoot":"","sources":["../src/localFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAIlD,MAAM,CAAC,OAAO,OAAO,SAAS;IAG5B,YAAmB,MAAc,EAAE,QAA2B,EAAE;QAC9D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA,CAAC,iEAAiE;QACxE,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACnC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YACnD,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9C,CAAC;gBAAS,CAAC;YACT,iEAAiE;YACjE,IAAI,EAAE,EAAE,CAAC;gBACP,+CAA+C;gBAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAYM,KAAK,CAAC,QAAQ,CACnB,OAA4C;QAE5C,
|
|
1
|
+
{"version":3,"file":"localFile.js","sourceRoot":"","sources":["../src/localFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAIlD,MAAM,CAAC,OAAO,OAAO,SAAS;IAG5B,YAAmB,MAAc,EAAE,QAA2B,EAAE;QAC9D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA,CAAC,iEAAiE;QACxE,IAAI,CAAC;YACH,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YACnC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YACnD,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC9C,CAAC;gBAAS,CAAC;YACT,iEAAiE;YACjE,IAAI,EAAE,EAAE,CAAC;gBACP,+CAA+C;gBAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAYM,KAAK,CAAC,QAAQ,CACnB,OAA4C;QAE5C,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,gBAAgB;IAClB,CAAC;CACF"}
|
package/esm/remoteFile.js
CHANGED
|
@@ -45,7 +45,7 @@ export default class RemoteFile {
|
|
|
45
45
|
async read(length, position, opts = {}) {
|
|
46
46
|
const { headers = {}, signal, overrides = {} } = opts;
|
|
47
47
|
if (length < Infinity) {
|
|
48
|
-
headers.range = `bytes=${position}-${position + length}`;
|
|
48
|
+
headers.range = `bytes=${position}-${position + length - 1}`;
|
|
49
49
|
}
|
|
50
50
|
else if (length === Infinity && position !== 0) {
|
|
51
51
|
headers.range = `bytes=${position}-`;
|
|
@@ -54,9 +54,9 @@ export default class RemoteFile {
|
|
|
54
54
|
...this.baseOverrides,
|
|
55
55
|
...overrides,
|
|
56
56
|
headers: {
|
|
57
|
-
...headers,
|
|
58
|
-
...overrides.headers,
|
|
59
57
|
...this.baseOverrides.headers,
|
|
58
|
+
...overrides.headers,
|
|
59
|
+
...headers,
|
|
60
60
|
},
|
|
61
61
|
method: 'GET',
|
|
62
62
|
redirect: 'follow',
|
|
@@ -67,7 +67,6 @@ export default class RemoteFile {
|
|
|
67
67
|
throw new Error(`HTTP ${res.status} fetching ${this.url}`);
|
|
68
68
|
}
|
|
69
69
|
if ((res.status === 200 && position === 0) || res.status === 206) {
|
|
70
|
-
const resData = await res.arrayBuffer();
|
|
71
70
|
// try to parse out the size of the remote file
|
|
72
71
|
const contentRange = res.headers.get('content-range');
|
|
73
72
|
const sizeMatch = /\/(\d+)$/.exec(contentRange || '');
|
|
@@ -76,15 +75,13 @@ export default class RemoteFile {
|
|
|
76
75
|
size: parseInt(sizeMatch[1], 10),
|
|
77
76
|
};
|
|
78
77
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (res.status === 200) {
|
|
83
|
-
throw new Error(`${this.url} fetch returned status 200, expected 206`);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
throw new Error(`HTTP ${res.status} fetching ${this.url}`);
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
79
|
+
const resData = res.bytes ? await res.bytes() : new Uint8Array(await res.arrayBuffer());
|
|
80
|
+
return resData.byteLength <= length ? resData : resData.subarray(0, length);
|
|
87
81
|
}
|
|
82
|
+
throw new Error(res.status === 200
|
|
83
|
+
? `${this.url} fetch returned status 200, expected 206`
|
|
84
|
+
: `HTTP ${res.status} fetching ${this.url}`);
|
|
88
85
|
}
|
|
89
86
|
async readFile(options = {}) {
|
|
90
87
|
let encoding;
|
|
@@ -95,18 +92,22 @@ export default class RemoteFile {
|
|
|
95
92
|
}
|
|
96
93
|
else {
|
|
97
94
|
encoding = options.encoding;
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
const { encoding: _, ...rest } = options;
|
|
96
|
+
opts = rest;
|
|
100
97
|
}
|
|
101
98
|
const { headers = {}, signal, overrides = {} } = opts;
|
|
102
99
|
const res = await this.fetch(this.url, {
|
|
103
|
-
|
|
100
|
+
...this.baseOverrides,
|
|
101
|
+
...overrides,
|
|
102
|
+
headers: {
|
|
103
|
+
...this.baseOverrides.headers,
|
|
104
|
+
...overrides.headers,
|
|
105
|
+
...headers,
|
|
106
|
+
},
|
|
104
107
|
method: 'GET',
|
|
105
108
|
redirect: 'follow',
|
|
106
109
|
mode: 'cors',
|
|
107
110
|
signal,
|
|
108
|
-
...this.baseOverrides,
|
|
109
|
-
...overrides,
|
|
110
111
|
});
|
|
111
112
|
if (res.status !== 200) {
|
|
112
113
|
throw new Error(`HTTP ${res.status} fetching ${this.url}`);
|
|
@@ -118,7 +119,8 @@ export default class RemoteFile {
|
|
|
118
119
|
throw new Error(`unsupported encoding: ${encoding}`);
|
|
119
120
|
}
|
|
120
121
|
else {
|
|
121
|
-
|
|
122
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
123
|
+
return res.bytes ? res.bytes() : new Uint8Array(await res.arrayBuffer());
|
|
122
124
|
}
|
|
123
125
|
}
|
|
124
126
|
async stat() {
|
package/esm/remoteFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../src/remoteFile.ts"],"names":[],"mappings":"AAOA,SAAS,UAAU,CAAC,CAAU;IAC5B,MAAM,CAAC,GACL,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,IAAI,CAAC;QACnD,CAAC,CAAE,CAAC,CAAC,OAAkB;QACvB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;IACZ,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAM7B,YAAmB,MAAc,EAAE,OAA0B,EAAE;QAFvD,kBAAa,GAAQ,EAAE,CAAA;QAG7B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAA;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAA;QACrC,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,KAAkB,EAClB,IAA6B;QAE7B,IAAI,QAAQ,CAAA;QACZ,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACxD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACvC,4DAA4D;gBAC5D,oEAAoE;gBACpE,iDAAiD;gBACjD,uDAAuD;gBACvD,OAAO,CAAC,IAAI,CACV,kCAAkC,KAAK,2DAA2D,CACnG,CAAA;gBACD,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;wBAC/C,GAAG,IAAI;wBACP,KAAK,EAAE,QAAQ;qBAChB,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;gBACrE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,MAAc,EACd,QAAgB,EAChB,OAA0B,EAAE;QAE5B,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QACrD,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,GAAG,SAAS,QAAQ,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../src/remoteFile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "generic-filehandle2",
|
|
3
3
|
"description": "uniform interface for accessing binary data from local files, remote HTTP resources, and browser Blob data",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.15",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"coverage": "yarn test --coverage",
|
|
35
35
|
"lint": "eslint --report-unused-disable-directives --max-warnings 0 src test",
|
|
36
36
|
"clean": "rimraf dist esm",
|
|
37
|
+
"format": "prettier --write .",
|
|
37
38
|
"prebuild": "yarn clean",
|
|
38
39
|
"build:esm": "tsc --outDir esm",
|
|
39
40
|
"build:es5": "tsc --module commonjs --outDir dist",
|
|
@@ -51,17 +52,17 @@
|
|
|
51
52
|
"devDependencies": {
|
|
52
53
|
"@types/node": "^24.3.1",
|
|
53
54
|
"@types/range-parser": "^1.2.7",
|
|
54
|
-
"@vitest/coverage-v8": "^
|
|
55
|
+
"@vitest/coverage-v8": "^4.0.15",
|
|
55
56
|
"eslint": "^9.16.0",
|
|
56
57
|
"eslint-plugin-import": "^2.31.0",
|
|
57
|
-
"eslint-plugin-unicorn": "^
|
|
58
|
+
"eslint-plugin-unicorn": "^62.0.0",
|
|
58
59
|
"prettier": "^3.4.1",
|
|
59
60
|
"range-parser": "^1.2.1",
|
|
60
61
|
"rimraf": "^6.0.0",
|
|
61
62
|
"standard-changelog": "^7.0.1",
|
|
62
63
|
"typescript": "^5.7.0",
|
|
63
64
|
"typescript-eslint": "^8.18.0",
|
|
64
|
-
"vitest": "^
|
|
65
|
+
"vitest": "^4.0.15"
|
|
65
66
|
},
|
|
66
67
|
"publishConfig": {
|
|
67
68
|
"access": "public"
|
package/src/blobFile.ts
CHANGED
|
@@ -12,11 +12,9 @@ import type {
|
|
|
12
12
|
*/
|
|
13
13
|
export default class BlobFile implements GenericFilehandle {
|
|
14
14
|
private blob: Blob
|
|
15
|
-
private size: number
|
|
16
15
|
|
|
17
16
|
public constructor(blob: Blob) {
|
|
18
17
|
this.blob = blob
|
|
19
|
-
this.size = blob.size
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
public async read(
|
|
@@ -32,7 +30,9 @@ export default class BlobFile implements GenericFilehandle {
|
|
|
32
30
|
const start = position
|
|
33
31
|
const end = start + length
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
const slice = this.blob.slice(start, end)
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
35
|
+
return slice.bytes ? slice.bytes() : new Uint8Array(await slice.arrayBuffer())
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
public async readFile(): Promise<Uint8Array<ArrayBuffer>>
|
|
@@ -54,12 +54,13 @@ export default class BlobFile implements GenericFilehandle {
|
|
|
54
54
|
} else if (encoding) {
|
|
55
55
|
throw new Error(`unsupported encoding: ${encoding}`)
|
|
56
56
|
} else {
|
|
57
|
-
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
58
|
+
return this.blob.bytes ? this.blob.bytes() : new Uint8Array(await this.blob.arrayBuffer())
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
public async stat(): Promise<Stats> {
|
|
62
|
-
return { size: this.size }
|
|
63
|
+
return { size: this.blob.size }
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
public async close(): Promise<void> {
|
package/src/localFile.ts
CHANGED
|
@@ -38,8 +38,7 @@ export default class LocalFile implements GenericFilehandle {
|
|
|
38
38
|
public async readFile(
|
|
39
39
|
options?: FilehandleOptions | BufferEncoding,
|
|
40
40
|
): Promise<Uint8Array<ArrayBuffer> | string> {
|
|
41
|
-
|
|
42
|
-
return typeof res === 'string' ? res : new Uint8Array(res)
|
|
41
|
+
return readFile(this.filename, options)
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
public async stat() {
|
package/src/remoteFile.ts
CHANGED
|
@@ -66,7 +66,7 @@ export default class RemoteFile implements GenericFilehandle {
|
|
|
66
66
|
): Promise<Uint8Array<ArrayBuffer>> {
|
|
67
67
|
const { headers = {}, signal, overrides = {} } = opts
|
|
68
68
|
if (length < Infinity) {
|
|
69
|
-
headers.range = `bytes=${position}-${position + length}`
|
|
69
|
+
headers.range = `bytes=${position}-${position + length - 1}`
|
|
70
70
|
} else if (length === Infinity && position !== 0) {
|
|
71
71
|
headers.range = `bytes=${position}-`
|
|
72
72
|
}
|
|
@@ -74,9 +74,9 @@ export default class RemoteFile implements GenericFilehandle {
|
|
|
74
74
|
...this.baseOverrides,
|
|
75
75
|
...overrides,
|
|
76
76
|
headers: {
|
|
77
|
-
...headers,
|
|
78
|
-
...overrides.headers,
|
|
79
77
|
...this.baseOverrides.headers,
|
|
78
|
+
...overrides.headers,
|
|
79
|
+
...headers,
|
|
80
80
|
},
|
|
81
81
|
method: 'GET',
|
|
82
82
|
redirect: 'follow',
|
|
@@ -89,8 +89,6 @@ export default class RemoteFile implements GenericFilehandle {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
if ((res.status === 200 && position === 0) || res.status === 206) {
|
|
92
|
-
const resData = await res.arrayBuffer()
|
|
93
|
-
|
|
94
92
|
// try to parse out the size of the remote file
|
|
95
93
|
const contentRange = res.headers.get('content-range')
|
|
96
94
|
const sizeMatch = /\/(\d+)$/.exec(contentRange || '')
|
|
@@ -100,15 +98,16 @@ export default class RemoteFile implements GenericFilehandle {
|
|
|
100
98
|
}
|
|
101
99
|
}
|
|
102
100
|
|
|
103
|
-
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
102
|
+
const resData = res.bytes ? await res.bytes() : new Uint8Array(await res.arrayBuffer())
|
|
103
|
+
return resData.byteLength <= length ? resData : resData.subarray(0, length)
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
106
|
+
throw new Error(
|
|
107
|
+
res.status === 200
|
|
108
|
+
? `${this.url} fetch returned status 200, expected 206`
|
|
109
|
+
: `HTTP ${res.status} fetching ${this.url}`,
|
|
110
|
+
)
|
|
112
111
|
}
|
|
113
112
|
|
|
114
113
|
public async readFile(): Promise<Uint8Array<ArrayBuffer>>
|
|
@@ -136,18 +135,22 @@ export default class RemoteFile implements GenericFilehandle {
|
|
|
136
135
|
opts = {}
|
|
137
136
|
} else {
|
|
138
137
|
encoding = options.encoding
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
const { encoding: _, ...rest } = options
|
|
139
|
+
opts = rest
|
|
141
140
|
}
|
|
142
141
|
const { headers = {}, signal, overrides = {} } = opts
|
|
143
142
|
const res = await this.fetch(this.url, {
|
|
144
|
-
|
|
143
|
+
...this.baseOverrides,
|
|
144
|
+
...overrides,
|
|
145
|
+
headers: {
|
|
146
|
+
...this.baseOverrides.headers,
|
|
147
|
+
...overrides.headers,
|
|
148
|
+
...headers,
|
|
149
|
+
},
|
|
145
150
|
method: 'GET',
|
|
146
151
|
redirect: 'follow',
|
|
147
152
|
mode: 'cors',
|
|
148
153
|
signal,
|
|
149
|
-
...this.baseOverrides,
|
|
150
|
-
...overrides,
|
|
151
154
|
})
|
|
152
155
|
if (res.status !== 200) {
|
|
153
156
|
throw new Error(`HTTP ${res.status} fetching ${this.url}`)
|
|
@@ -157,7 +160,8 @@ export default class RemoteFile implements GenericFilehandle {
|
|
|
157
160
|
} else if (encoding) {
|
|
158
161
|
throw new Error(`unsupported encoding: ${encoding}`)
|
|
159
162
|
} else {
|
|
160
|
-
|
|
163
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
164
|
+
return res.bytes ? res.bytes() : new Uint8Array(await res.arrayBuffer())
|
|
161
165
|
}
|
|
162
166
|
}
|
|
163
167
|
|