generic-filehandle2 2.0.18 → 2.1.4

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.
@@ -1,4 +1,4 @@
1
- import type { FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
1
+ import type { BufferEncoding, FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
2
2
  /**
3
3
  * Blob of binary data fetched from a local file (with FileReader).
4
4
  *
package/dist/blobFile.js CHANGED
@@ -16,9 +16,7 @@ class BlobFile {
16
16
  if (!length) {
17
17
  return new Uint8Array(0);
18
18
  }
19
- const start = position;
20
- const end = start + length;
21
- const slice = this.blob.slice(start, end);
19
+ const slice = this.blob.slice(position, position + length);
22
20
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
23
21
  return slice.bytes
24
22
  ? slice.bytes()
@@ -39,11 +37,11 @@ class BlobFile {
39
37
  : new Uint8Array(await this.blob.arrayBuffer());
40
38
  }
41
39
  }
42
- async stat() {
43
- return { size: this.blob.size };
40
+ stat() {
41
+ return Promise.resolve({ size: this.blob.size });
44
42
  }
45
- async close() {
46
- return;
43
+ close() {
44
+ return Promise.resolve();
47
45
  }
48
46
  }
49
47
  exports.default = BlobFile;
@@ -1 +1 @@
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;YAChB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;YACf,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/C,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;gBACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACnD,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;AA5DD,2BA4DC"}
1
+ {"version":3,"file":"blobFile.js","sourceRoot":"","sources":["../src/blobFile.ts"],"names":[],"mappings":";;AAOA;;;;;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,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAA;QAC1D,uEAAuE;QACvE,OAAO,KAAK,CAAC,KAAK;YAChB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;YACf,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/C,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;gBACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAEM,IAAI;QACT,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC;IAEM,KAAK;QACV,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;CACF;AAzDD,2BAyDC"}
@@ -1,22 +1,14 @@
1
+ export type BufferEncoding = 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'utf-16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';
1
2
  export type Fetcher = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
2
3
  export interface FilehandleOptions {
3
- /**
4
- * optional AbortSignal object for aborting the request
5
- */
6
4
  signal?: AbortSignal;
7
- headers?: any;
8
- overrides?: any;
5
+ headers?: Record<string, string>;
6
+ overrides?: Omit<RequestInit, 'headers'>;
9
7
  encoding?: BufferEncoding;
10
- /**
11
- * fetch function to use for HTTP requests. defaults to environment's
12
- * global fetch. if there is no global fetch, and a fetch function is not provided,
13
- * throws an error.
14
- */
15
8
  fetch?: Fetcher;
16
9
  }
17
10
  export interface Stats {
18
11
  size: number;
19
- [key: string]: any;
20
12
  }
21
13
  export interface GenericFilehandle {
22
14
  read(length: number, position: number, opts?: FilehandleOptions): Promise<Uint8Array<ArrayBuffer>>;
package/dist/index.d.ts CHANGED
@@ -2,4 +2,3 @@ export * from './filehandle.ts';
2
2
  export { default as BlobFile } from './blobFile.ts';
3
3
  export { default as RemoteFile } from './remoteFile.ts';
4
4
  export { default as LocalFile } from './localFile.ts';
5
- export { type GenericFilehandle } from './filehandle.ts';
@@ -1,7 +1,7 @@
1
- import type { FilehandleOptions, GenericFilehandle } from './filehandle.ts';
1
+ import type { BufferEncoding, FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
2
2
  export default class LocalFile implements GenericFilehandle {
3
3
  private filename;
4
- constructor(source: string, _opts?: FilehandleOptions);
4
+ constructor(source: string);
5
5
  read(length: number, position?: number): Promise<Uint8Array<ArrayBuffer>>;
6
6
  readFile(): Promise<Uint8Array<ArrayBuffer>>;
7
7
  readFile(options: BufferEncoding): Promise<string>;
@@ -14,6 +14,6 @@ export default class LocalFile implements GenericFilehandle {
14
14
  readFile<T extends BufferEncoding>(options: Omit<FilehandleOptions, 'encoding'> & {
15
15
  encoding: T;
16
16
  }): T extends BufferEncoding ? Promise<string> : Promise<Uint8Array<ArrayBuffer>>;
17
- stat(): Promise<import("fs").Stats>;
17
+ stat(): Promise<Stats>;
18
18
  close(): Promise<void>;
19
19
  }
package/dist/localFile.js CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const promises_1 = require("fs/promises");
4
4
  class LocalFile {
5
- constructor(source, _opts = {}) {
5
+ constructor(source) {
6
6
  this.filename = source;
7
7
  }
8
8
  async read(length, position = 0) {
@@ -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,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA;QACN,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,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,sEAAsE;oBACtE,oDAAoD;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAiBM,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;AAzDD,4BAyDC"}
1
+ {"version":3,"file":"localFile.js","sourceRoot":"","sources":["../src/localFile.ts"],"names":[],"mappings":";;AAAA,0CAAkD;AASlD,MAAqB,SAAS;IAG5B,YAAmB,MAAc;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC;QAC5C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA;QACN,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,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,sEAAsE;oBACtE,oDAAoD;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAiBM,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;AAzDD,4BAyDC"}
@@ -1,8 +1,9 @@
1
- import type { FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
1
+ import type { BufferEncoding, FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
2
2
  export default class RemoteFile implements GenericFilehandle {
3
3
  protected url: string;
4
4
  private _stat?;
5
5
  private fetchImplementation;
6
+ private baseHeaders;
6
7
  private baseOverrides;
7
8
  constructor(source: string, opts?: FilehandleOptions);
8
9
  fetch(input: RequestInfo, init: RequestInit | undefined): Promise<Response>;
@@ -1,20 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  function getMessage(e) {
4
- const r = typeof e === 'object' && e !== null && 'message' in e
4
+ const r = typeof e === 'object' &&
5
+ e !== null &&
6
+ 'message' in e &&
7
+ typeof e.message === 'string'
5
8
  ? e.message
6
9
  : `${e}`;
7
10
  return r.replace(/\.$/, '');
8
11
  }
9
12
  class RemoteFile {
10
13
  constructor(source, opts = {}) {
11
- this.baseOverrides = {};
12
14
  this.url = source;
13
- const fetch = opts.fetch || globalThis.fetch.bind(globalThis);
14
- if (opts.overrides) {
15
- this.baseOverrides = opts.overrides;
16
- }
17
- this.fetchImplementation = fetch;
15
+ this.baseHeaders = opts.headers ?? {};
16
+ this.baseOverrides = opts.overrides ?? {};
17
+ this.fetchImplementation =
18
+ opts.fetch ??
19
+ ((input, init) => globalThis.fetch(input, init));
18
20
  }
19
21
  async fetch(input, init) {
20
22
  const wrapError = (e) => new Error(`${getMessage(e)} fetching ${input}`, { cause: e });
@@ -49,21 +51,15 @@ class RemoteFile {
49
51
  if (length === 0) {
50
52
  return new Uint8Array(0);
51
53
  }
52
- const { headers = {}, signal, overrides = {} } = opts;
53
- if (length < Infinity) {
54
- headers.range = `bytes=${position}-${position + length - 1}`;
55
- }
56
- else if (length === Infinity && position !== 0) {
57
- headers.range = `bytes=${position}-`;
54
+ if (Number.isNaN(length) || Number.isNaN(position)) {
55
+ throw new TypeError(`read() called with NaN length or position (length=${length}, position=${position}). The index file may be corrupt.`);
58
56
  }
57
+ const { headers = {}, signal, overrides = {} } = opts;
58
+ headers.range = `bytes=${position}-${position + length - 1}`;
59
59
  const res = await this.fetch(this.url, {
60
60
  ...this.baseOverrides,
61
61
  ...overrides,
62
- headers: {
63
- ...this.baseOverrides.headers,
64
- ...overrides.headers,
65
- ...headers,
66
- },
62
+ headers: { ...this.baseHeaders, ...headers },
67
63
  method: 'GET',
68
64
  redirect: 'follow',
69
65
  mode: 'cors',
@@ -75,7 +71,7 @@ class RemoteFile {
75
71
  if ((res.status === 200 && position === 0) || res.status === 206) {
76
72
  // try to parse out the size of the remote file
77
73
  const contentRange = res.headers.get('content-range');
78
- const sizeMatch = /\/(\d+)$/.exec(contentRange || '');
74
+ const sizeMatch = /\/(\d+)$/.exec(contentRange ?? '');
79
75
  if (sizeMatch?.[1]) {
80
76
  this._stat = {
81
77
  size: parseInt(sizeMatch[1], 10),
@@ -94,26 +90,13 @@ class RemoteFile {
94
90
  : `HTTP ${res.status} fetching ${this.url}`);
95
91
  }
96
92
  async readFile(options = {}) {
97
- let encoding;
98
- let opts;
99
- if (typeof options === 'string') {
100
- encoding = options;
101
- opts = {};
102
- }
103
- else {
104
- encoding = options.encoding;
105
- const { encoding: _, ...rest } = options;
106
- opts = rest;
107
- }
93
+ const encoding = typeof options === 'string' ? options : options.encoding;
94
+ const opts = typeof options === 'string' ? {} : options;
108
95
  const { headers = {}, signal, overrides = {} } = opts;
109
96
  const res = await this.fetch(this.url, {
110
97
  ...this.baseOverrides,
111
98
  ...overrides,
112
- headers: {
113
- ...this.baseOverrides.headers,
114
- ...overrides.headers,
115
- ...headers,
116
- },
99
+ headers: { ...this.baseHeaders, ...headers },
117
100
  method: 'GET',
118
101
  redirect: 'follow',
119
102
  mode: 'cors',
@@ -143,8 +126,8 @@ class RemoteFile {
143
126
  }
144
127
  return this._stat;
145
128
  }
146
- async close() {
147
- return;
129
+ close() {
130
+ return Promise.resolve();
148
131
  }
149
132
  }
150
133
  exports.default = RemoteFile;
@@ -1 +1 @@
1
- {"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../src/remoteFile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../src/remoteFile.ts"],"names":[],"mappings":"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"}
package/esm/blobFile.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
1
+ import type { BufferEncoding, FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
2
2
  /**
3
3
  * Blob of binary data fetched from a local file (with FileReader).
4
4
  *
package/esm/blobFile.js CHANGED
@@ -14,9 +14,7 @@ export default class BlobFile {
14
14
  if (!length) {
15
15
  return new Uint8Array(0);
16
16
  }
17
- const start = position;
18
- const end = start + length;
19
- const slice = this.blob.slice(start, end);
17
+ const slice = this.blob.slice(position, position + length);
20
18
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
21
19
  return slice.bytes
22
20
  ? slice.bytes()
@@ -37,11 +35,11 @@ export default class BlobFile {
37
35
  : new Uint8Array(await this.blob.arrayBuffer());
38
36
  }
39
37
  }
40
- async stat() {
41
- return { size: this.blob.size };
38
+ stat() {
39
+ return Promise.resolve({ size: this.blob.size });
42
40
  }
43
- async close() {
44
- return;
41
+ close() {
42
+ return Promise.resolve();
45
43
  }
46
44
  }
47
45
  //# sourceMappingURL=blobFile.js.map
@@ -1 +1 @@
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;YAChB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;YACf,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/C,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;gBACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACnD,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"}
1
+ {"version":3,"file":"blobFile.js","sourceRoot":"","sources":["../src/blobFile.ts"],"names":[],"mappings":"AAOA;;;;;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,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAA;QAC1D,uEAAuE;QACvE,OAAO,KAAK,CAAC,KAAK;YAChB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;YACf,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/C,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;gBACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAEM,IAAI;QACT,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC;IAEM,KAAK;QACV,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;CACF"}
@@ -1,22 +1,14 @@
1
+ export type BufferEncoding = 'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'utf-16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex';
1
2
  export type Fetcher = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
2
3
  export interface FilehandleOptions {
3
- /**
4
- * optional AbortSignal object for aborting the request
5
- */
6
4
  signal?: AbortSignal;
7
- headers?: any;
8
- overrides?: any;
5
+ headers?: Record<string, string>;
6
+ overrides?: Omit<RequestInit, 'headers'>;
9
7
  encoding?: BufferEncoding;
10
- /**
11
- * fetch function to use for HTTP requests. defaults to environment's
12
- * global fetch. if there is no global fetch, and a fetch function is not provided,
13
- * throws an error.
14
- */
15
8
  fetch?: Fetcher;
16
9
  }
17
10
  export interface Stats {
18
11
  size: number;
19
- [key: string]: any;
20
12
  }
21
13
  export interface GenericFilehandle {
22
14
  read(length: number, position: number, opts?: FilehandleOptions): Promise<Uint8Array<ArrayBuffer>>;
package/esm/index.d.ts CHANGED
@@ -2,4 +2,3 @@ export * from './filehandle.ts';
2
2
  export { default as BlobFile } from './blobFile.ts';
3
3
  export { default as RemoteFile } from './remoteFile.ts';
4
4
  export { default as LocalFile } from './localFile.ts';
5
- export { type GenericFilehandle } from './filehandle.ts';
@@ -1,7 +1,7 @@
1
- import type { FilehandleOptions, GenericFilehandle } from './filehandle.ts';
1
+ import type { BufferEncoding, FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
2
2
  export default class LocalFile implements GenericFilehandle {
3
3
  private filename;
4
- constructor(source: string, _opts?: FilehandleOptions);
4
+ constructor(source: string);
5
5
  read(length: number, position?: number): Promise<Uint8Array<ArrayBuffer>>;
6
6
  readFile(): Promise<Uint8Array<ArrayBuffer>>;
7
7
  readFile(options: BufferEncoding): Promise<string>;
@@ -14,6 +14,6 @@ export default class LocalFile implements GenericFilehandle {
14
14
  readFile<T extends BufferEncoding>(options: Omit<FilehandleOptions, 'encoding'> & {
15
15
  encoding: T;
16
16
  }): T extends BufferEncoding ? Promise<string> : Promise<Uint8Array<ArrayBuffer>>;
17
- stat(): Promise<import("fs").Stats>;
17
+ stat(): Promise<Stats>;
18
18
  close(): Promise<void>;
19
19
  }
package/esm/localFile.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { open, readFile, stat } from 'fs/promises';
2
2
  export default class LocalFile {
3
- constructor(source, _opts = {}) {
3
+ constructor(source) {
4
4
  this.filename = source;
5
5
  }
6
6
  async read(length, position = 0) {
@@ -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,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA;QACN,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,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,sEAAsE;oBACtE,oDAAoD;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAiBM,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"}
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;AASlD,MAAM,CAAC,OAAO,OAAO,SAAS;IAG5B,YAAmB,MAAc;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC;QAC5C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,EAAE,CAAA;QACN,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,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,sEAAsE;oBACtE,oDAAoD;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAiBM,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"}
@@ -1,8 +1,9 @@
1
- import type { FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
1
+ import type { BufferEncoding, FilehandleOptions, GenericFilehandle, Stats } from './filehandle.ts';
2
2
  export default class RemoteFile implements GenericFilehandle {
3
3
  protected url: string;
4
4
  private _stat?;
5
5
  private fetchImplementation;
6
+ private baseHeaders;
6
7
  private baseOverrides;
7
8
  constructor(source: string, opts?: FilehandleOptions);
8
9
  fetch(input: RequestInfo, init: RequestInit | undefined): Promise<Response>;
package/esm/remoteFile.js CHANGED
@@ -1,18 +1,20 @@
1
1
  function getMessage(e) {
2
- const r = typeof e === 'object' && e !== null && 'message' in e
2
+ const r = typeof e === 'object' &&
3
+ e !== null &&
4
+ 'message' in e &&
5
+ typeof e.message === 'string'
3
6
  ? e.message
4
7
  : `${e}`;
5
8
  return r.replace(/\.$/, '');
6
9
  }
7
10
  export default class RemoteFile {
8
11
  constructor(source, opts = {}) {
9
- this.baseOverrides = {};
10
12
  this.url = source;
11
- const fetch = opts.fetch || globalThis.fetch.bind(globalThis);
12
- if (opts.overrides) {
13
- this.baseOverrides = opts.overrides;
14
- }
15
- this.fetchImplementation = fetch;
13
+ this.baseHeaders = opts.headers ?? {};
14
+ this.baseOverrides = opts.overrides ?? {};
15
+ this.fetchImplementation =
16
+ opts.fetch ??
17
+ ((input, init) => globalThis.fetch(input, init));
16
18
  }
17
19
  async fetch(input, init) {
18
20
  const wrapError = (e) => new Error(`${getMessage(e)} fetching ${input}`, { cause: e });
@@ -47,21 +49,15 @@ export default class RemoteFile {
47
49
  if (length === 0) {
48
50
  return new Uint8Array(0);
49
51
  }
50
- const { headers = {}, signal, overrides = {} } = opts;
51
- if (length < Infinity) {
52
- headers.range = `bytes=${position}-${position + length - 1}`;
53
- }
54
- else if (length === Infinity && position !== 0) {
55
- headers.range = `bytes=${position}-`;
52
+ if (Number.isNaN(length) || Number.isNaN(position)) {
53
+ throw new TypeError(`read() called with NaN length or position (length=${length}, position=${position}). The index file may be corrupt.`);
56
54
  }
55
+ const { headers = {}, signal, overrides = {} } = opts;
56
+ headers.range = `bytes=${position}-${position + length - 1}`;
57
57
  const res = await this.fetch(this.url, {
58
58
  ...this.baseOverrides,
59
59
  ...overrides,
60
- headers: {
61
- ...this.baseOverrides.headers,
62
- ...overrides.headers,
63
- ...headers,
64
- },
60
+ headers: { ...this.baseHeaders, ...headers },
65
61
  method: 'GET',
66
62
  redirect: 'follow',
67
63
  mode: 'cors',
@@ -73,7 +69,7 @@ export default class RemoteFile {
73
69
  if ((res.status === 200 && position === 0) || res.status === 206) {
74
70
  // try to parse out the size of the remote file
75
71
  const contentRange = res.headers.get('content-range');
76
- const sizeMatch = /\/(\d+)$/.exec(contentRange || '');
72
+ const sizeMatch = /\/(\d+)$/.exec(contentRange ?? '');
77
73
  if (sizeMatch?.[1]) {
78
74
  this._stat = {
79
75
  size: parseInt(sizeMatch[1], 10),
@@ -92,26 +88,13 @@ export default class RemoteFile {
92
88
  : `HTTP ${res.status} fetching ${this.url}`);
93
89
  }
94
90
  async readFile(options = {}) {
95
- let encoding;
96
- let opts;
97
- if (typeof options === 'string') {
98
- encoding = options;
99
- opts = {};
100
- }
101
- else {
102
- encoding = options.encoding;
103
- const { encoding: _, ...rest } = options;
104
- opts = rest;
105
- }
91
+ const encoding = typeof options === 'string' ? options : options.encoding;
92
+ const opts = typeof options === 'string' ? {} : options;
106
93
  const { headers = {}, signal, overrides = {} } = opts;
107
94
  const res = await this.fetch(this.url, {
108
95
  ...this.baseOverrides,
109
96
  ...overrides,
110
- headers: {
111
- ...this.baseOverrides.headers,
112
- ...overrides.headers,
113
- ...headers,
114
- },
97
+ headers: { ...this.baseHeaders, ...headers },
115
98
  method: 'GET',
116
99
  redirect: 'follow',
117
100
  mode: 'cors',
@@ -141,8 +124,8 @@ export default class RemoteFile {
141
124
  }
142
125
  return this._stat;
143
126
  }
144
- async close() {
145
- return;
127
+ close() {
128
+ return Promise.resolve();
146
129
  }
147
130
  }
148
131
  //# sourceMappingURL=remoteFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../src/remoteFile.ts"],"names":[],"mappings":"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"}
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.18",
4
+ "version": "2.1.4",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
7
7
  "exports": {
@@ -14,7 +14,10 @@
14
14
  "require": "./dist/index.js"
15
15
  }
16
16
  },
17
- "repository": "GMOD/generic-filehandle2",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/GMOD/generic-filehandle2.git"
20
+ },
18
21
  "license": "MIT",
19
22
  "author": {
20
23
  "name": "Colin Diesh",
@@ -32,12 +35,12 @@
32
35
  "scripts": {
33
36
  "test": "vitest",
34
37
  "coverage": "yarn test --coverage",
35
- "lint": "eslint --report-unused-disable-directives --max-warnings 0 src test",
38
+ "lint": "eslint --report-unused-disable-directives --max-warnings 0",
36
39
  "clean": "rimraf dist esm",
37
40
  "format": "prettier --write .",
38
41
  "prebuild": "yarn clean",
39
42
  "build:esm": "tsc --outDir esm",
40
- "build:es5": "tsc --module commonjs --outDir dist",
43
+ "build:es5": "tsc --module commonjs --moduleResolution bundler --outDir dist",
41
44
  "build": "yarn build:esm && yarn build:es5",
42
45
  "postbuild:es5": "echo '{\"type\": \"commonjs\"}' > dist/package.json",
43
46
  "preversion": "yarn lint && yarn test --run && yarn build",
@@ -50,19 +53,20 @@
50
53
  "genomics"
51
54
  ],
52
55
  "devDependencies": {
53
- "@types/node": "^24.3.1",
56
+ "@eslint/js": "^10.0.1",
57
+ "@types/node": "^25.5.0",
54
58
  "@types/range-parser": "^1.2.7",
55
- "@vitest/coverage-v8": "^4.0.15",
56
- "eslint": "^9.16.0",
57
- "eslint-plugin-import": "^2.31.0",
58
- "eslint-plugin-unicorn": "^62.0.0",
59
- "prettier": "^3.4.1",
59
+ "@vitest/coverage-v8": "^4.1.2",
60
+ "eslint": "^9.39.4",
61
+ "eslint-plugin-import": "^2.32.0",
62
+ "eslint-plugin-unicorn": "^64.0.0",
63
+ "prettier": "^3.8.1",
60
64
  "range-parser": "^1.2.1",
61
- "rimraf": "^6.0.0",
65
+ "rimraf": "^6.1.3",
62
66
  "standard-changelog": "^7.0.1",
63
- "typescript": "^5.7.0",
64
- "typescript-eslint": "^8.18.0",
65
- "vitest": "^4.0.15"
67
+ "typescript": "^6.0.2",
68
+ "typescript-eslint": "^8.57.2",
69
+ "vitest": "^4.1.2"
66
70
  },
67
71
  "publishConfig": {
68
72
  "access": "public"
package/src/blobFile.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type {
2
+ BufferEncoding,
2
3
  FilehandleOptions,
3
4
  GenericFilehandle,
4
5
  Stats,
@@ -27,10 +28,7 @@ export default class BlobFile implements GenericFilehandle {
27
28
  return new Uint8Array(0)
28
29
  }
29
30
 
30
- const start = position
31
- const end = start + length
32
-
33
- const slice = this.blob.slice(start, end)
31
+ const slice = this.blob.slice(position, position + length)
34
32
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
35
33
  return slice.bytes
36
34
  ? slice.bytes()
@@ -63,11 +61,11 @@ export default class BlobFile implements GenericFilehandle {
63
61
  }
64
62
  }
65
63
 
66
- public async stat(): Promise<Stats> {
67
- return { size: this.blob.size }
64
+ public stat(): Promise<Stats> {
65
+ return Promise.resolve({ size: this.blob.size })
68
66
  }
69
67
 
70
- public async close(): Promise<void> {
71
- return
68
+ public close(): Promise<void> {
69
+ return Promise.resolve()
72
70
  }
73
71
  }
package/src/filehandle.ts CHANGED
@@ -1,27 +1,33 @@
1
+ // avoids needing to have @types/node as a dependency of the consuming code
2
+ export type BufferEncoding =
3
+ | 'ascii'
4
+ | 'utf8'
5
+ | 'utf-8'
6
+ | 'utf16le'
7
+ | 'utf-16le'
8
+ | 'ucs2'
9
+ | 'ucs-2'
10
+ | 'base64'
11
+ | 'base64url'
12
+ | 'latin1'
13
+ | 'binary'
14
+ | 'hex'
15
+
1
16
  export type Fetcher = (
2
17
  input: RequestInfo,
3
18
  init?: RequestInit,
4
19
  ) => Promise<Response>
5
20
 
6
21
  export interface FilehandleOptions {
7
- /**
8
- * optional AbortSignal object for aborting the request
9
- */
10
22
  signal?: AbortSignal
11
- headers?: any
12
- overrides?: any
23
+ headers?: Record<string, string>
24
+ overrides?: Omit<RequestInit, 'headers'>
13
25
  encoding?: BufferEncoding
14
- /**
15
- * fetch function to use for HTTP requests. defaults to environment's
16
- * global fetch. if there is no global fetch, and a fetch function is not provided,
17
- * throws an error.
18
- */
19
26
  fetch?: Fetcher
20
27
  }
21
28
 
22
29
  export interface Stats {
23
30
  size: number
24
- [key: string]: any
25
31
  }
26
32
 
27
33
  export interface GenericFilehandle {
package/src/index.ts CHANGED
@@ -3,5 +3,3 @@ export * from './filehandle.ts'
3
3
  export { default as BlobFile } from './blobFile.ts'
4
4
  export { default as RemoteFile } from './remoteFile.ts'
5
5
  export { default as LocalFile } from './localFile.ts'
6
-
7
- export { type GenericFilehandle } from './filehandle.ts'
package/src/localFile.ts CHANGED
@@ -1,11 +1,16 @@
1
1
  import { open, readFile, stat } from 'fs/promises'
2
2
 
3
- import type { FilehandleOptions, GenericFilehandle } from './filehandle.ts'
3
+ import type {
4
+ BufferEncoding,
5
+ FilehandleOptions,
6
+ GenericFilehandle,
7
+ Stats,
8
+ } from './filehandle.ts'
4
9
 
5
10
  export default class LocalFile implements GenericFilehandle {
6
11
  private filename: string
7
12
 
8
- public constructor(source: string, _opts: FilehandleOptions = {}) {
13
+ public constructor(source: string) {
9
14
  this.filename = source
10
15
  }
11
16
 
@@ -52,7 +57,7 @@ export default class LocalFile implements GenericFilehandle {
52
57
  return readFile(this.filename, options)
53
58
  }
54
59
 
55
- public async stat() {
60
+ public async stat(): Promise<Stats> {
56
61
  return stat(this.filename)
57
62
  }
58
63
 
package/src/remoteFile.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type {
2
+ BufferEncoding,
2
3
  Fetcher,
3
4
  FilehandleOptions,
4
5
  GenericFilehandle,
@@ -7,8 +8,11 @@ import type {
7
8
 
8
9
  function getMessage(e: unknown) {
9
10
  const r =
10
- typeof e === 'object' && e !== null && 'message' in e
11
- ? (e.message as string)
11
+ typeof e === 'object' &&
12
+ e !== null &&
13
+ 'message' in e &&
14
+ typeof e.message === 'string'
15
+ ? e.message
12
16
  : `${e}`
13
17
  return r.replace(/\.$/, '')
14
18
  }
@@ -17,15 +21,17 @@ export default class RemoteFile implements GenericFilehandle {
17
21
  protected url: string
18
22
  private _stat?: Stats
19
23
  private fetchImplementation: Fetcher
20
- private baseOverrides: any = {}
24
+ private baseHeaders: Record<string, string>
25
+ private baseOverrides: Omit<RequestInit, 'headers'>
21
26
 
22
27
  public constructor(source: string, opts: FilehandleOptions = {}) {
23
28
  this.url = source
24
- const fetch = opts.fetch || globalThis.fetch.bind(globalThis)
25
- if (opts.overrides) {
26
- this.baseOverrides = opts.overrides
27
- }
28
- this.fetchImplementation = fetch
29
+ this.baseHeaders = opts.headers ?? {}
30
+ this.baseOverrides = opts.overrides ?? {}
31
+ this.fetchImplementation =
32
+ opts.fetch ??
33
+ ((input: RequestInfo, init?: RequestInit) =>
34
+ globalThis.fetch(input, init))
29
35
  }
30
36
 
31
37
  public async fetch(
@@ -70,20 +76,17 @@ export default class RemoteFile implements GenericFilehandle {
70
76
  if (length === 0) {
71
77
  return new Uint8Array(0)
72
78
  }
73
- const { headers = {}, signal, overrides = {} } = opts
74
- if (length < Infinity) {
75
- headers.range = `bytes=${position}-${position + length - 1}`
76
- } else if (length === Infinity && position !== 0) {
77
- headers.range = `bytes=${position}-`
79
+ if (Number.isNaN(length) || Number.isNaN(position)) {
80
+ throw new TypeError(
81
+ `read() called with NaN length or position (length=${length}, position=${position}). The index file may be corrupt.`,
82
+ )
78
83
  }
84
+ const { headers = {}, signal, overrides = {} } = opts
85
+ headers.range = `bytes=${position}-${position + length - 1}`
79
86
  const res = await this.fetch(this.url, {
80
87
  ...this.baseOverrides,
81
88
  ...overrides,
82
- headers: {
83
- ...this.baseOverrides.headers,
84
- ...overrides.headers,
85
- ...headers,
86
- },
89
+ headers: { ...this.baseHeaders, ...headers },
87
90
  method: 'GET',
88
91
  redirect: 'follow',
89
92
  mode: 'cors',
@@ -97,7 +100,7 @@ export default class RemoteFile implements GenericFilehandle {
97
100
  if ((res.status === 200 && position === 0) || res.status === 206) {
98
101
  // try to parse out the size of the remote file
99
102
  const contentRange = res.headers.get('content-range')
100
- const sizeMatch = /\/(\d+)$/.exec(contentRange || '')
103
+ const sizeMatch = /\/(\d+)$/.exec(contentRange ?? '')
101
104
  if (sizeMatch?.[1]) {
102
105
  this._stat = {
103
106
  size: parseInt(sizeMatch[1], 10),
@@ -138,25 +141,13 @@ export default class RemoteFile implements GenericFilehandle {
138
141
  public async readFile(
139
142
  options: FilehandleOptions | BufferEncoding = {},
140
143
  ): Promise<Uint8Array<ArrayBuffer> | string> {
141
- let encoding
142
- let opts
143
- if (typeof options === 'string') {
144
- encoding = options
145
- opts = {}
146
- } else {
147
- encoding = options.encoding
148
- const { encoding: _, ...rest } = options
149
- opts = rest
150
- }
144
+ const encoding = typeof options === 'string' ? options : options.encoding
145
+ const opts = typeof options === 'string' ? {} : options
151
146
  const { headers = {}, signal, overrides = {} } = opts
152
147
  const res = await this.fetch(this.url, {
153
148
  ...this.baseOverrides,
154
149
  ...overrides,
155
- headers: {
156
- ...this.baseOverrides.headers,
157
- ...overrides.headers,
158
- ...headers,
159
- },
150
+ headers: { ...this.baseHeaders, ...headers },
160
151
  method: 'GET',
161
152
  redirect: 'follow',
162
153
  mode: 'cors',
@@ -186,7 +177,7 @@ export default class RemoteFile implements GenericFilehandle {
186
177
  return this._stat
187
178
  }
188
179
 
189
- public async close(): Promise<void> {
190
- return
180
+ public close(): Promise<void> {
181
+ return Promise.resolve()
191
182
  }
192
183
  }