multipart-ts - v1.3.4
    Preparing search index...

    multipart-ts - v1.3.4

    Multipart.ts

    A TypeScript library for multipart data parsing and creation.

    Documentation

    • Parse any kind of multipart/*, e.g. multipart/mixed, multipart/form-data, multipart/byteranges, etc.
    • Create your own multipart with any parts
    • Create a Multipart instance from FormData
    • Serialise a Multipart instance into bytes (Uint8Array)
    • Works with Node.js and in the browser without any polyfills
    • Zero dependencies

    Install using NPM

    npm i multipart-ts
    

    Import as native ESM

    import {Multipart} from "multipart-ts";
    

    This library uses mainly Uint8Array so that it works in the browser. In Node.js, you can use Buffer as it is a superset of Uint8Array. In the browser, to convert a string to Uint8Array and vice-versa, use TextEncoder and TextDecoder respectively.

    import http from "node:http";
    import {Component, Multipart} from "multipart-ts";

    http.createServer(async (req, res) => {
    // Parse multipart request body
    if (req.method === "POST" && req.headers["content-type"]) {

    // get the request body
    const body: Uint8Array[] = [];
    for await (const chunk of req)
    body.push(chunk);

    // create a blob to hold the Content-Type header (which includes the boundary) and the body
    const blob = new Blob(body, {type: req.headers["content-type"]});
    // parse multipart from the blob
    const multipart = await Multipart.blob(blob);
    console.log(multipart);

    res.end("ok");
    }
    // Return a multipart response
    else if (req.method === "GET") {
    const multipart = new Multipart(
    [
    new Component({
    "X-Foo": "Bar Baz",
    "Content-Type": "text/plain"
    }, Buffer.from("Hello world!")),

    // You can add nested multipart components
    new Multipart([
    new Component({"Content-Type": "application/json"}, Buffer.from(JSON.stringify({foo: "bar"}))),
    new Component({}, [0x66, 0x6f, 0x6f, 0x20, 0x62, 0x61, 0x72])
    ])
    ],
    "your-custom-boundary", // or omit to generate a random one
    "multipart/mixed"
    );
    // use the content-type header generated by the multipart
    res.setHeader("Content-Type", multipart.headers.get("Content-Type")!);
    // send the multipart body bytes
    res.end(multipart.body);
    }
    else res.end();
    }).listen(3000);
    import {Multipart, Component} from "multipart-ts";

    //create
    const multipart = new Multipart(
    [new Component({"Content-Type": "text/plain"}, new TextEncoder().encode("Hello world!"))],
    "your-custom-boundary", // or omit to generate a random one
    "multipart/mixed"
    );

    // parse
    const data: Uint8Array = multipart.bytes();
    const parsed: Multipart = Multipart.parse(data);

    console.log(new TextDecoder().decode(parsed.parts[0].body)); // Hello world!

    Copyright © 2024–2025 Zefir Kirilov.

    This project is licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0). A copy of the licence text is included in this repository. If not, see https://www.gnu.org/licenses/.