Skip to content

Commit

Permalink
[@types/bl] update bl types to v5
Browse files Browse the repository at this point in the history
The bl module has a file called `BufferList.js` that is the buffer list
without node streams, the idea being you can use it in the browser without
having to pull in a readable streams implementation, which has become more
necessary since webpack 5 stopped bundling shims for node internals.

The main `bl.js` exports a class that extends both the buffer list and
the node Duplex stream.  It also has named exports for `BufferListStream`
(the same as the default export) and `BufferList` (the same as the class
from `BufferList.js`).

I've attempted to represent them here.  TS doesn't have multiple inheritance
so I'm not sure how to represent the `BufferListStream` class without
duplicating the methods of `BufferList`.
  • Loading branch information
achingbrain committed Apr 7, 2021
1 parent 04657b2 commit f2e27e2
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 11 deletions.
39 changes: 39 additions & 0 deletions types/bl/BufferList.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Type definitions for BufferList v5.0
// Project: https://github.com/rvagg/bl
// Definitions by: Bart van der Schoor <https://github.com/Bartvds>
// Francis Gulotta <https://github.com/reconbot>
// Ben Allfree <https://github.com/benallfree>
// Alex Potsides <https://github.com/achingbrain>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

/// <reference types="node" />

declare class BufferList {
constructor(initialData?: Buffer | Buffer[] | BufferList | BufferList[] | string);

length: number;
append(buffer: Buffer | Buffer[] | BufferList | BufferList[] | string): BufferList;
get(index: number): number;
slice(start?: number, end?: number): Buffer;
shallowSlice(start?: number, end?: number): BufferList;
copy(dest: Buffer, destStart?: number, srcStart?: number, srcEnd?: number): Buffer;
duplicate(): BufferList;
consume(bytes?: number): void;
toString(encoding?: string, start?: number, end?: number): string;
indexOf(value: string | number | Uint8Array | BufferList | Buffer, byteOffset?: number, encoding?: string): number;
readDoubleBE(offset?: number): number;
readDoubleLE(offset?: number): number;
readFloatBE(offset?: number): number;
readFloatLE(offset?: number): number;
readInt32BE(offset?: number): number;
readInt32LE(offset?: number): number;
readUInt32BE(offset?: number): number;
readUInt32LE(offset?: number): number;
readInt16BE(offset?: number): number;
readInt16LE(offset?: number): number;
readUInt16BE(offset?: number): number;
readUInt16LE(offset?: number): number;
readInt8(offset: number): number;
readUInt8(offset: number): number;
}
export = BufferList;
31 changes: 30 additions & 1 deletion types/bl/bl-tests.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,40 @@
import BufferList = require('bl');
import BufferList, {
BufferList as BufferListNamedExport,
BufferListStream as BufferListStreamNamedExport
} from 'bl';
import BufferListDeepExport from 'bl/BufferList';

var bl: BufferList;
var buffer: Buffer;
var offset: number;
var num: number;
var str: string;

BufferList.isBufferList({});

var bufferList = new BufferListNamedExport();

// is assignable
bufferList = bl;

var bufferListStream = new BufferListStreamNamedExport();

// has Duplex methods
bufferListStream.pause();
bufferListStream.resume();

// is assignable
bufferList = bufferListStream;

var bufferListDeep = new BufferListDeepExport();

// is assignable
bufferListDeep = bl.duplicate();

// is not assignable as it lacks the Duplex methods
var bl2: BufferList;
bl2 = bufferListDeep; // $ExpectError

bl = new BufferList();
bl = new BufferList(bl);
bl = new BufferList([bl]);
Expand Down
28 changes: 20 additions & 8 deletions types/bl/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
// Type definitions for BufferList v4.1
// Type definitions for BufferList v5.0
// Project: https://github.com/rvagg/bl
// Definitions by: Bart van der Schoor <https://github.com/Bartvds>
// Francis Gulotta <https://github.com/reconbot>
// Ben Allfree <https://github.com/benallfree>
// Alex Potsides <https://github.com/achingbrain>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

/// <reference types="node" />

declare class BufferList {
constructor(initialData?: Buffer | Buffer[] | BufferList | BufferList[] | string);
import BufferList = require('./BufferList');
import { Duplex } from 'readable-stream';

declare class BufferListStream extends Duplex {
constructor(initialData?: Buffer | Buffer[] | BufferList | BufferList[] | BufferListStream | BufferListStream[] | string);

length: number;
append(buffer: Buffer | Buffer[] | BufferList | BufferList[] | string): BufferList;
append(buffer: Buffer | Buffer[] | BufferList | BufferList[] | BufferListStream | BufferListStream[] | string): BufferListStream;
get(index: number): number;
slice(start?: number, end?: number): Buffer;
shallowSlice(start?: number, end?: number): BufferList;
shallowSlice(start?: number, end?: number): BufferListStream;
copy(dest: Buffer, destStart?: number, srcStart?: number, srcEnd?: number): Buffer;
duplicate(): BufferList;
duplicate(): BufferListStream;
consume(bytes?: number): void;
toString(encoding?: string, start?: number, end?: number): string;
indexOf(value: string | number | Uint8Array | BufferList | Buffer, byteOffset?: number, encoding?: string): number;
indexOf(value: string | number | Uint8Array | BufferListStream | Buffer, byteOffset?: number, encoding?: string): number;
readDoubleBE(offset?: number): number;
readDoubleLE(offset?: number): number;
readFloatBE(offset?: number): number;
Expand All @@ -34,5 +38,13 @@ declare class BufferList {
readUInt16LE(offset?: number): number;
readInt8(offset: number): number;
readUInt8(offset: number): number;

static isBufferList(other: any): boolean;
}
export = BufferList;

export default BufferListStream;

export {
BufferList,
BufferListStream
};
4 changes: 3 additions & 1 deletion types/bl/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
"forceConsistentCasingInFileNames": true,
"esModuleInterop": true
},
"files": [
"index.d.ts",
"BufferList.d.ts",
"bl-tests.ts"
]
}
3 changes: 2 additions & 1 deletion types/bl/tslint.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"prefer-const": false,
"trim-file": false,
"typedef-whitespace": false,
"whitespace": false
"whitespace": false,
"npm-naming": [true,{"mode":"code","errors":[["NoDefaultExport",false],["NeedsExportEquals",false]]}]
}
}

0 comments on commit f2e27e2

Please sign in to comment.