[![npm](https://img.shields.io/npm/v/browser-stream-tar.svg)](https://www.npmjs.com/package/browser-stream-tar)
[![License](https://img.shields.io/badge/License-MIT--Clause-blue.svg)](https://spdx.org/licenses/MIT.html)
[![Typed with TypeScript](https://flat.badgen.net/badge/icon/Typed?icon=typescript\&label\&labelColor=blue\&color=555555)](https://typescriptlang.org)
[![bundlejs](https://deno.bundlejs.com/?q=browser-stream-tar\&badge=detailed)](https://bundlejs.com/?q=browser-stream-tar)
[![downloads](http://img.shields.io/npm/dm/browser-stream-tar.svg?style=flat-square)](https://npmjs.org/package/browser-stream-tar)
[![GitHub Issues](https://img.shields.io/github/issues/k0nsti/browser-stream-tar.svg?style=flat-square)](https://github.com/k0nsti/browser-stream-tar/issues)
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fk0nsti%2Fbrowser-stream-tar%2Fbadge\&style=flat)](https://actions-badge.atrox.dev/k0nsti/browser-stream-tar/goto)
[![Styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![Known Vulnerabilities](https://snyk.io/test/github/k0nsti/browser-stream-tar/badge.svg)](https://snyk.io/test/github/k0nsti/browser-stream-tar)
[![Coverage Status](https://coveralls.io/repos/k0nsti/browser-stream-tar/badge.svg)](https://coveralls.io/github/k0nsti/browser-stream-tar)

# browser-stream-tar

split tar web-stream into a sequence of Files

# example

```js
import { files } from "browser-stream-tar";

const response = await fetch("some tar file");
for await (const file of files(response.body)) {
  console.log(file.name);
  // do something with entry.stream()
}
```

# API

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

### Table of Contents

*   [BLOCKSIZE](#blocksize)
*   [decodePaxHeader](#decodepaxheader)
    *   [Parameters](#parameters)
*   [decodeHeader](#decodeheader)
    *   [Parameters](#parameters-1)
*   [files](#files)
    *   [Parameters](#parameters-2)
*   [enqueue](#enqueue)
*   [buffer](#buffer)
*   [decodeString](#decodestring)
    *   [Parameters](#parameters-3)
*   [decodeInteger](#decodeinteger)
    *   [Parameters](#parameters-4)
*   [fill](#fill)
    *   [Parameters](#parameters-5)
*   [skip](#skip)
    *   [Parameters](#parameters-6)
*   [streamToUint8Array](#streamtouint8array)
    *   [Parameters](#parameters-7)

## BLOCKSIZE

Field Name   Byte Offset     Length in Bytes Field Type
name         0               100             NUL-terminated if NUL fits
mode         100             8
uid          108             8
gid          116             8
size         124             12
mtime        136             12
chksum       148             8
typeflag     156             1               see below
linkname     157             100             NUL-terminated if NUL fits
magic        257             6               must be TMAGIC (NUL term.)
version      263             2               must be TVERSION
uname        265             32              NUL-terminated
gname        297             32              NUL-terminated
devmajor     329             8
devminor     337             8
prefix       345             155             NUL-terminated if NUL fits

Type: [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)

## decodePaxHeader

*   **See**: <https://www.systutorials.com/docs/linux/man/5-star/>

Decodes a PAX header

### Parameters

*   `reader` **ReadableStreamReader<[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)>** where to read from
*   `buffer` **[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)**&#x20;
*   `header` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** to be filled with values form buffer

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)>** buffer positioned after the consumed bytes

## decodeHeader

Decodes the next header.

### Parameters

*   `reader` **ReadableStreamReader<[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)>** where to read from
*   `buffer` **([Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))**&#x20;
*   `header` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** to be filled with values form buffer and reader

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<([Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))>** buffer positioned after the consumed bytes

## files

Provide tar entry iterator.

### Parameters

*   `tar` **ReadableStream**&#x20;

Returns **AsyncIterable\<File>**&#x20;

## enqueue

\--512--|-----512------|
|  R |     O   |
|
DDDDDDDDDDDD---------HHHH
|    |         |
A0   A0        A1

## buffer

+--------- size --------+
|         +- remaining -+- overflow -+
|         |             |            |
HDD ... DDDDDDDDDDDDDDDDDD------------HHHHHH
\[BUFFER .... ]             \[BUFFER ... ]
+-----------  skip --------+

## decodeString

Convert bytes into string.

### Parameters

*   `bytes` **[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)**&#x20;

Returns **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**&#x20;

## decodeInteger

Convert ASCII octal number into number.

### Parameters

*   `bytes` **[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)**&#x20;

Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**&#x20;

## fill

Read bytes from a reader and append them to a given buffer until a requested length of the buffer is reached.

### Parameters

*   `reader` **ReadableStreamReader<[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)>** where to read from
*   `buffer` **[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)?** initial buffer or undefined
*   `length` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** desired buffer length

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<([Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))>** filled up buffer

## skip

Skip some bytes from a buffer.

### Parameters

*   `reader` **ReadableStreamReader<[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)>** where to read from
*   `buffer` **[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)**&#x20;
*   `length` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** to be skipped

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<([Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))>** buffer positionend after skipped bytes

## streamToUint8Array

Reads web stream content into a Uint8Array.

### Parameters

*   `stream` **ReadableStream**&#x20;

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Uint8Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)>**&#x20;

# install

With [npm](http://npmjs.org) do:

```shell
npm install browser-stream-tar
```

# license

BSD-2-Clause
