Skip to content

Commit 9efa90a

Browse files
committed
feat: add range checker util function.
1 parent 48a197a commit 9efa90a

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

src/dynamicBuffer.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { constants } from 'buffer';
22

33
import { DynamicBufferIterator } from './iterator';
4+
import { rangeCheck } from './utils';
45

56
/**
67
* The character encoding that is supported by Node.js, copy from Node.js Buffer module.
@@ -266,7 +267,7 @@ export class DynamicBuffer {
266267
encoding: BufferEncoding | undefined = this.encoding,
267268
): number {
268269
if (offset < 0) {
269-
throw new RangeError('The value of "offset" is out of range.');
270+
rangeCheck('offset', offset, 0);
270271
}
271272

272273
const count = this.writeData(data, offset, length, encoding);
@@ -322,13 +323,10 @@ export class DynamicBuffer {
322323
*/
323324
read(offset: number = 0): number {
324325
if (!this.buffer || offset < 0 || offset >= this.used) {
325-
throw new RangeError(`The value of "offset" is out of range. It must be >= 0 and <= ${
326-
this.used - 1
327-
}. Received ${
328-
offset
329-
}`);
326+
rangeCheck('offset', offset, 0, this.used - 1);
330327
}
331328

329+
// @ts-ignore
332330
return this.buffer[offset];
333331
}
334332

@@ -735,12 +733,8 @@ export class DynamicBuffer {
735733
sourceStart: number = 0,
736734
sourceEnd: number = this.length,
737735
): number {
738-
if (targetStart < 0) {
739-
throw new RangeError(`The value of 'targetStart' is out of range. It must be >=0. Received ${targetStart}`);
740-
}
741-
if (sourceStart < 0) {
742-
throw new RangeError(`The value of 'sourceStart' is out of range. It must be >=0. Received ${sourceStart}`);
743-
}
736+
rangeCheck('targetStart', targetStart, 0);
737+
rangeCheck('sourceStart', sourceStart, 0);
744738
if (sourceEnd > this.length) {
745739
// eslint-disable-next-line no-param-reassign
746740
sourceEnd = this.length;

src/utils.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export const rangeCheck = (field: string, value: number, min?: number, max?: number) => {
2+
if (min !== undefined && value < min) {
3+
throw RangeError(`The value of '${field}' is out of range. It must be >= ${min}. Received ${value}`);
4+
}
5+
6+
if (max !== undefined && value > max) {
7+
throw RangeError(`The value of '${field}' is out of range. It must be <= ${max}. Received ${value}`);
8+
}
9+
};

0 commit comments

Comments
 (0)