diff --git a/README.md b/README.md index a0910fef..de571b37 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,11 @@ npm install @msgpack/msgpack It encodes `data` and returns a byte array as `Uint8Array`. -### `decode(buffer: ArrayLike | Uint8Array, options?: DecodeOptions): unknown` +### `decode(buffer: ArrayLike, options?: DecodeOptions): unknown` -It decodes `buffer` in a byte buffer and returns decoded data as `uknown`. +It decodes `buffer` encoded as MessagePack, and returns a decoded object as `uknown`. + +`buffer` must be an array of bytes, which is typically `Uint8Array`. #### DecodeOptions @@ -63,19 +65,19 @@ maxExtLength | number | `4_294_967_295` (UINT32_MAX) You can use `max${Type}Length` to limit the length of each type decoded. -### `decodeAsync(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): Promise` +### `decodeAsync(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): Promise` It decodes `stream` in an async iterable of byte arrays and returns decoded data as `uknown` wrapped in `Promise`. This function works asyncronously. Note that `decodeAsync()` acceps the same options as `decode()`. -### `decodeArrayStream(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable` +### `decodeArrayStream(stream: AsyncIterable< ArrayLike> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable` It is alike to `decodeAsync()`, but only accepts an array of items as the input `stream`, and emits the decoded item one by one. It throws errors when the input is not an array. -### `decodeStream(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable` +### `decodeStream(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable` It is like to `decodeAsync()` and `decodeArrayStream()`, but the input `stream` consists of independent MessagePack items. diff --git a/src/Decoder.ts b/src/Decoder.ts index d0c539d2..bb2e9422 100644 --- a/src/Decoder.ts +++ b/src/Decoder.ts @@ -68,13 +68,13 @@ export class Decoder { readonly maxExtLength = DEFAULT_MAX_LENGTH, ) {} - setBuffer(buffer: ArrayLike | Uint8Array): void { + setBuffer(buffer: ArrayLike): void { this.bytes = ensureUint8Array(buffer); this.view = createDataView(this.bytes); this.pos = 0; } - appendBuffer(buffer: Uint8Array | ArrayLike) { + appendBuffer(buffer: ArrayLike) { if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining()) { this.setBuffer(buffer); } else { @@ -105,7 +105,7 @@ export class Decoder { return object; } - async decodeOneAsync(stream: AsyncIterable | Uint8Array>): Promise { + async decodeOneAsync(stream: AsyncIterable>): Promise { let decoded = false; let object: unknown; for await (const buffer of stream) { @@ -140,7 +140,7 @@ export class Decoder { ); } - async *decodeStream(stream: AsyncIterable | Uint8Array>) { + async *decodeStream(stream: AsyncIterable>) { for await (const buffer of stream) { this.appendBuffer(buffer); @@ -159,7 +159,7 @@ export class Decoder { } } - async *decodeArrayStream(stream: AsyncIterable | Uint8Array>) { + async *decodeArrayStream(stream: AsyncIterable>) { let headerParsed = false; let decoded = false; let itemsLeft = 0; diff --git a/src/decode.ts b/src/decode.ts index a3765900..ba93cf89 100644 --- a/src/decode.ts +++ b/src/decode.ts @@ -35,10 +35,7 @@ export type DecodeOptions = Partial< export const defaultDecodeOptions: DecodeOptions = {}; -export function decode( - buffer: ReadonlyArray | Uint8Array, - options: DecodeOptions = defaultDecodeOptions, -): unknown { +export function decode(buffer: ArrayLike, options: DecodeOptions = defaultDecodeOptions): unknown { const decoder = new Decoder( options.extensionCodec, options.maxStrLength, diff --git a/src/decodeAsync.ts b/src/decodeAsync.ts index 5f5ab7b4..56b548ff 100644 --- a/src/decodeAsync.ts +++ b/src/decodeAsync.ts @@ -6,7 +6,7 @@ export type DecodeAsyncOptions = DecodeOptions; export const defaultDecodeAsyncOptions = defaultDecodeOptions; export async function decodeAsync( - streamLike: ReadableStreamLike>, + streamLike: ReadableStreamLike>, options: DecodeAsyncOptions = defaultDecodeOptions, ): Promise { const stream = ensureAsyncIterabe(streamLike); @@ -23,7 +23,7 @@ export async function decodeAsync( } export function decodeArrayStream( - streamLike: ReadableStreamLike>, + streamLike: ReadableStreamLike>, options: DecodeAsyncOptions = defaultDecodeOptions, ) { const stream = ensureAsyncIterabe(streamLike); @@ -41,7 +41,7 @@ export function decodeArrayStream( } export function decodeStream( - streamLike: ReadableStreamLike>, + streamLike: ReadableStreamLike>, options: DecodeAsyncOptions = defaultDecodeOptions, ) { const stream = ensureAsyncIterabe(streamLike);