๐ฆ Multipart and Tar utilities for the Web Streams API
https://github.com/kitten/multitars.git
multitars is a memory-efficient parser and producer of Tar archives
and multipart/form-data bodies.
The goal of multitars is to allow any JavaScript runtime that supports the
Web Streams API standard
to efficiently consume and/or produce Tar and form-data ReadableStream data without buffering
them in full.
This has been built with the explicit purpose in mind to:
Request bodies in the tar or multipart/form-data formatRequest bodies in the tar or multipart/form-data formattar or multipart/form-data streamsnode-tar's support of the Tar format (including PAX)Content-Length header in boundariesStreamFile which extends the standard File APIparseMultipart(stream: ReadableStream, params: ParseMultipartParams) => AsyncGenerator<StreamFile>ReadableStreamcontentType: The raw Content-Type header to search a boundary=* inAsyncGenerator) of StreamFile with individual form-data values.
When a StreamFile isn't consumed, it's skipped before the next one is emitted.
streamMultipart(entries: AsyncIterable<FormEntry> | Iterable<FormEntry>): AsyncGenerator<Uint8Array>Iterable or AsyncIterable of FormEntrys[string, string | Uint8Array | Blob | File] tuplesUint8Array chunks encoding the output body stream.
multipartContentType: stringThe string value that Content-Type should be set to when sending streamMultipart()'s output as request bodies.
This contains a seeded multipart boundary identifier.
untar(stream: ReadableStream) => AsyncGenerator<TarFile | TarChunk>ReadableStreamAsyncGenerator) of TarFile, for files in the Tar archive, and TarChunk for non-files.
When a TarFile/TarChunk isn't consumed, it's skipped before the next one is emitted.
tar(entries: AsyncIterable<TarChunk | TarFile> | Iterable<TarChunk | TarFile>) => AsyncGenerator<Uint8Array>Iterable or AsyncIterable of TarChunks and TarFilesUint8Array chunks encoding the output Tar archive stream.
The Tar archive will use PAX headers in its output.
interface TarChunkHeaderA TarFile or TarChunk represent entries in a Tar archive. They have a set of common properties based on the Tar headers.
Properties:
mode: Permission fieldsuid: User ID (if applicable/set, otherwise 0)gid: Group ID (if applicable/set, otherwise 0)mtime: Modified Time (if applicable/set, otherwise 0)linkname: Only set for symlinks (the linked to name)uname: User Name (if applicable/set)gname: Group Name (if applicable/set)typeflag: TarTypeFlag: The type of the Tar entryenum TarTypeFlagexport enum TarTypeFlag {
FILE = 48 /* '0': regular file */,
LINK = 49 /* '1': link */,
SYMLINK = 50 /* '2': symbolic link */,
DIRECTORY = 53 /* '5': directory */,
}
class TarFile implements TarChunkHeaderA TarFile represents a file in a Tar archive. It can be consumed or streamed like a regular File.
Its typeflag property is always set to TarTypeFlag.FILE.
class TarChunk implements TarChunkHeaderA TarChunk represents a non-file in a Tar archive, which are hardlinks, symlinks, or directories.
They typically don't carry content bodies, but their content is preserved if they do contain any data.
Note that TarChunks for directories (typeflag: TarTypeFlag.DIRECTORY) are optional and multitars does
not validate the directory structure of Tar archives since it streams any Tar contents. Tar archives may
contain nested files in directories without any TarChunk for directories being emitted.