GitHub - Exact-Realty/ts-multipart-parser: TypeScript streaming parser for MIME...
source link: https://github.com/Exact-Realty/ts-multipart-parser
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Multipart Message Parser
This is a library for parsing MIME multipart messages, such as those used in HTTP requests and email messages, written in TypeScript. It provides an easy-to-use async generator that returns the parsed headers and body of each part in a multipart message. Nested multipart messages are supported.
Features
- Parses multipart messages according to the specification
- Supports nested multipart messages
- Lightweight and fast
- Written in TypeScript, but can be used with plain JavaScript as well
- Well-tested
Installation
You can install the library using either npm
or yarn
:
npm install @exact-realty/multipart-parser
yarn add @exact-realty/multipart-parser
Usage
The library exports the function parseMultipartMessage
, which returns an async
generator that yields objects with the headers and body (as a Uint8Array
) of
each part in the multipart message.
API
parseMultipartMessage(stream: ReadableStream, boundary: string): AsyncGenerator
This function takes a ReadableStream
and a boundary string as arguments, and
returns an asynchronous generator that yields objects with the following
properties:
headers
: aHeaders
object containing the headers of the current partbody
: aUint8Array
containing the body of the current part, ornull
if the part is empty.parts
: a nested iterator of the same structure for any parts within the current part, if the part'sContent-Type
header indicates that it is a multipart message.
boundaryRegex: RegExp
A regular expression that can be used to validate a boundary string.
boundaryMatchRegex: RegExp
A regular expression that can be used to extract a boundary string from a
Content-Type
header.
encodeMultipartMessage(boundary: string, msg: TDecodedMultipartMessage[]): ReadableStream<ArrayBuffer>
This function takes a boundary string and an array of messages as arguments and returns a ReadableStream
that can be read to obtain a multipart message.
TDecodedMultipartMessage
is defined as an object with the following fields:
headers
: aHeaders
object containing the headers of the current partbody
(optional): The body of the current part, ornull
if the part is empty. It can be any of the following types:ArrayBuffer
,Blob
,ReadableStream
or any typed array, such asUint8Array
.parts
(optional): An array of one element or more of the same type (TDecodedMultipartMessage
), for nested messages. If bothbody
andparts
are specified,body
takes precedence.
Example
import { parseMultipartMessage } from '@exact-realty/multipart-message-parser';
const decoder = new TextDecoder();
const stream = ... // a ReadableStream containing the multipart message
const boundary = 'my-boundary'; // the boundary of the multipart message
for await (const part of parseMultipartMessage(stream, boundary)) {
console.log(part.headers.get('content-type'));
console.log(decoder.decode(part.body));
}
Contributing
We welcome contributions to this project! Feel free to submit a pull request or open an issue if you find a bug or have a feature request.
License
This library is licensed under the ISC License, see LICENSE for more information.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK