node-tar/types-tar/index.d.ts

765 lines
22 KiB
TypeScript
Executable File

// Type definitions for tar 4.0
// Project: https://github.com/npm/node-tar
// Definitions by: Maxime LUCE <https://github.com/SomaticIT>, Connor Peet <https://github.com/connor4312>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TODO: When/if typings for [fstream](https://github.com/npm/fstream) are written, refactor this typing to use it for the various streams.
/// <reference types="node" />
import stream = require('stream');
import events = require('events');
import zlib = require('zlib');
import MiniPass = require('minipass');
// #region Interfaces
export interface HeaderProperties {
path: string;
mode?: number | undefined;
noProprietary?: boolean | undefined;
uid?: number | undefined;
gid?: number | undefined;
size?: number | undefined;
mtime?: number | undefined;
type?: string | undefined;
uname?: string | undefined;
gname?: string | undefined;
devmaj?: number | undefined;
devmin?: number | undefined;
}
export interface ExtractOptions {
type?: string | undefined;
Directory?: boolean | undefined;
path?: string | undefined;
strip?: number | undefined;
}
export interface ParseStream extends NodeJS.ReadWriteStream {
position: number;
_stream: stream.Stream;
_ended: boolean;
_streamEnd(): void;
_process(c: Buffer): void;
_startEntry(c: Buffer): void;
}
export interface PackStream extends NodeJS.ReadWriteStream {
writable: boolean;
readable: boolean;
_noProprietary: boolean;
_global: HeaderProperties;
_buffer: stream.Stream[];
_currentEntry: any;
_processing: boolean;
_pipeRoot: stream.Stream;
_needDrain: boolean;
_paused: boolean;
addGlobal(props: HeaderProperties): void;
add(stream: stream.Stream): boolean;
destroy(): void;
_process(): void;
}
// #endregion
// #region Enums
export interface Fields {
path: number;
mode: number;
uid: number;
gid: number;
size: number;
mtime: number;
cksum: number;
type: number;
linkpath: number;
ustar: number;
ustarvar: number;
uname: number;
gname: number;
devmaj: number;
devmin: number;
prefix: number;
fill: number;
}
export type fields = Fields; // alias for backwards compatbility
export const fieldSize: number[];
export const fieldOffs: number[];
export const fieldEnds: number[];
/**
* Different values of the 'type' field
* paths match the values of Stats.isX() functions, where appropriate
*/
export const types: {
0: string;
"\0": string;
"": string;
1: string;
2: string;
3: string;
4: string;
5: string;
6: string;
7: string;
g: string;
x: string;
A: string;
D: string;
I: string;
K: string;
L: string;
M: string;
N: string;
S: string;
V: string;
X: string;
File: string;
OldFile: string;
Link: string;
SymbolicLick: string;
CharacterDevice: string;
BlockDevice: string;
Directory: string;
FIFO: string;
ContiguousFile: string;
GlobalExtendedHeader: string;
ExtendedHeader: string;
SolarisACL: string;
GNUDumpDir: string;
INode: string;
NextFileHasLonLinkPath: string;
NextFileHasLongPath: string;
ContinuationFile: string;
TapeVolumeHeader: string;
OldExtendedHeader: string;
};
/**
* Values for the mode field
*/
export const modes: {
suid: number;
sgid: number;
svtx: number;
uread: number;
uwrite: number;
uexec: number;
gread: number;
gwrite: number;
gexec: number;
oread: number;
owrite: number;
oexec: number;
};
export const numeric: {
mode: boolean;
uid: boolean;
gid: boolean;
size: boolean;
mtime: boolean;
devmaj: boolean;
devmin: boolean;
cksum: boolean;
atime: boolean;
ctime: boolean;
dev: boolean;
ino: boolean;
nlink: boolean;
};
export const knownExtended: {
atime: boolean;
charset: boolean;
comment: boolean;
ctime: boolean;
gid: boolean;
gname: boolean;
linkpat: boolean;
mtime: boolean;
path: boolean;
realtime: boolean;
security: boolean;
size: boolean;
uid: boolean;
uname: boolean;
};
export const headerSize: number;
export const blockSize: number;
//#endregion
//#region Global Methods
/**
* Returns a writable stream. Write tar data to it and it will emit entry events for each entry parsed from the tarball. This is used by tar.Extract.
*/
export function Parse(): ParseStream;
/**
* Returns a through stream. Use fstream to write files into the pack stream and you will receive tar archive data from the pack stream.
* This only works with directories, it does not work with individual files.
* The optional properties object are used to set properties in the tar 'Global Extended Header'.
*/
export function Pack(props?: HeaderProperties): PackStream;
/**
* Returns a through stream. Write tar data to the stream and the files in the tarball will be extracted onto the filesystem.
* options can be:
* ```
* {
* path: '/path/to/extract/tar/into',
* strip: 0, // how many path segments to strip from the root when extracting
* }
* ```
* options also get passed to the fstream.Writer instance that tar uses internally.
*/
export function Extract(opts: ExtractOptions | string): ParseStream;
export interface FileStat extends stream.Readable, Fields {
header: HeaderProperties;
startBlockSize: number;
blockRemain: number;
remain: number;
meta: boolean;
ignore: boolean;
size: number;
}
export interface ReadEntry extends MiniPass, HeaderProperties {
/** The extended metadata object provided to the constructor. */
extended: any;
/** The global extended metadata object provided to the constructor. */
globalExtended: any;
/** The number of bytes remaining to be written into the stream. */
remain: number;
/** The number of 512-byte blocks remaining to be written into the stream. */
blockRemain: number;
/** Whether this entry should be ignored. */
ignore: boolean;
/**
* True if this represents metadata about the next entry, false if it
* represents a filesystem object.
*/
meta: boolean;
}
export interface CreateOptions {
/**
* A function that will get called with (message, data)
* for any warnings encountered.
*/
onwarn?(message: string, data: Buffer): void;
/**
* Treat warnings as crash-worthy errors. Default false.
*/
strict?: boolean | undefined;
/**
* The current working directory for creating the archive. Defaults to process.cwd().
*/
cwd?: string | undefined;
/**
* Alias for cwd.
*/
C?: string | undefined;
/**
* Set to any truthy value to create a gzipped archive,
* or an object with settings for zlib.Gzip()
*/
gzip?: boolean | zlib.ZlibOptions | undefined;
/**
* Alias for gzip.
*/
z?: boolean | zlib.ZlibOptions | undefined;
/**
* A function that gets called with (path, stat) for each entry being
* added. Return true to add the entry to the archive, or false to omit it.
*/
filter?(path: string, stat: FileStat): boolean;
/**
* Omit metadata that is system-specific: ctime, atime, uid, gid, uname,
* gname, dev, ino, and nlink. Note that mtime is still included,
* because this is necessary other time-based operations.
*/
portable?: boolean | undefined;
/**
* Allow absolute paths. By default, / is stripped from absolute paths.
*/
preservePaths?: boolean | undefined;
/**
* Alias for presevePaths.
*/
P?: boolean | undefined;
/**
* The mode to set on the created file archive.
*/
mode?: number | undefined;
/**
* Do not recursively archive the contents of directories.
*/
noDirRecurse?: boolean | undefined;
/**
* Set to true to pack the targets of symbolic links. Without this
* option, symbolic links are archived as such.
*/
follow?: boolean | undefined;
/**
* Alias for follow.
*/
L?: boolean | undefined;
/**
* Alias for follow.
*/
h?: boolean | undefined;
/**
* Suppress pax extended headers. Note that this means that long paths and
* linkpaths will be truncated, and large or negative numeric values
* may be interpreted incorrectly.
*/
noPax?: boolean | undefined;
/**
* A path portion to prefix onto the entries in the archive.
*/
prefix?: string | undefined;
}
export interface ExtractOptions {
/**
* A function that will get called with (message, data)
* for any warnings encountered.
*/
onwarn?(message: string, data: Buffer): void;
/**
* Treat warnings as crash-worthy errors. Default false.
*/
strict?: boolean | undefined;
/**
* Extract files relative to the specified directory. Defaults to
* process.cwd(). If provided, this must exist and must be a directory.
*/
cwd?: string | undefined;
/**
* Alias for cwd.
*/
C?: string | undefined;
/**
* A function that gets called with (path, stat) for each entry being
* added. Return true to emit the entry from the archive, or false to skip it.
*/
filter?(path: string, stat: FileStat): boolean;
/**
* Set to true to keep the existing file on disk if it's newer than
* the file in the archive.
*/
newer?: boolean | undefined;
/**
* Alias for newer.
*/
'keep-newer'?: boolean | undefined;
/**
* Alias for newer.
*/
'keep-newer-files'?: boolean | undefined;
/**
* Do not overwrite existing files. In particular, if a file appears more
* than once in an archive, later copies will not overwrite earlier copies
*/
keep?: boolean | undefined;
/**
* Alias for keep.
*/
k?: boolean | undefined;
/**
* Alias for keep.
*/
'keep-existing'?: boolean | undefined;
/**
* Unlink files before creating them. Without this option, tar overwrites
* existing files, which preserves existing hardlinks. With this option,
* existing hardlinks will be broken, as will any symlink that would
* affect the location of an extracted file.
*/
unlink?: boolean | undefined;
/**
* Remove the specified number of leading path elements. Pathnames with
* fewer elements will be silently skipped. Note that the pathname
* is edited after applying the filter, but before security checks.
*/
strip?: number | undefined;
/**
* Alias for strip.
*/
'strip-components'?: number | undefined;
/**
* Alias for strip.
*/
stripComponents?: number | undefined;
/**
* If true, tar will set the uid and gid of extracted entries to the uid
* and gid fields in the archive. This defaults to true when run as root,
* and false otherwise. If false, then files and directories will be set
* with the owner and group of the user running the process. This is
* similar to -p in tar(1), but ACLs and other system-specific data is
* never unpacked in this implementation, and modes
* are set by default already.
*/
preserveOwner?: boolean | undefined;
/**
* Alias for preserveOwner.
*/
p?: boolean | undefined;
/**
* Set to a number to force ownership of all extracted files and folders,
* and all implicitly created directories, to be owned by the specified
* user id, regardless of the uid field in the archive. Cannot be used
* along with preserveOwner. Requires also setting a gid option.
*/
uid?: number | undefined;
/**
* Set to a number to force ownership of all extracted files and folders,
* and all implicitly created directories, to be owned by the specified
* group id, regardless of the gid field in the archive. Cannot be used
* along with preserveOwner. Requires also setting a uid option
*/
gid?: number | undefined;
/**
* Set to true to omit writing mtime value for extracted entries.
* [Alias: m, no-mtime]
*/
noMtime?: boolean | undefined;
m?: boolean | undefined;
'no-mtime'?: boolean | undefined;
/**
* Provide a function that takes an entry object, and returns a stream,
* or any falsey value. If a stream is provided, then that stream's data
* will be written instead of the contents of the archive entry. If a
* falsey value is provided, then the entry is written to disk as normal.
* (To exclude items from extraction, use the filter option described above.)
*/
transform?(entry: ReadEntry): NodeJS.WritableStream | undefined | false | null;
/**
* A function that gets called with (entry) for each entry that passes the
* filter.
*/
onentry?(entry: ReadEntry): void;
// The following options are mostly internal, but can be modified in some
// advanced use cases, such as re-using caches between runs.
/**
* The maximum buffer size for fs.read() operations (in bytes). Defaults to 16 MB.
*/
maxReadSize?: number | undefined;
/**
* The maximum size of meta entries that is supported. Defaults to 1 MB.
*/
maxMetaEntrySize?: number | undefined;
}
export interface ListOptions {
/**
* Treat warnings as crash-worthy errors. Default false.
*/
strict?: boolean | undefined;
/**
* Extract files relative to the specified directory. Defaults to
* process.cwd(). If provided, this must exist and must be a directory.
*/
cwd?: string | undefined;
/**
* Alias for cwd.
*/
C?: string | undefined;
/**
* A function that gets called with (path, stat) for each entry being
* added. Return true to emit the entry from the archive, or false to skip it.
*/
filter?(path: string, entry: FileStat): boolean;
/**
* A function that gets called with (entry) for each entry that passes the
* filter. This is important for when both file and sync are set, because
* it will be called synchronously.
*/
onentry?(entry: FileStat): void;
/**
* The maximum buffer size for fs.read() operations. Defaults to 16 MB.
*/
maxReadSize?: number | undefined;
/**
* By default, entry streams are resumed immediately after the call to
* onentry. Set noResume: true to suppress this behavior. Note that by
* opting into this, the stream will never complete until the entry
* data is consumed.
*/
noResume?: boolean | undefined;
}
export interface ReplaceOptions {
/**
* Required. Write the tarball archive to the specified filename.
*/
file: string;
/**
* Act synchronously. If this is set, then any provided file will be
* fully written after the call to tar.c.
*/
sync?: boolean | undefined;
/**
* A function that will get called with (message, data)
* for any warnings encountered.
*/
onwarn?(message: string, data: Buffer): void;
/**
* Treat warnings as crash-worthy errors. Default false.
*/
strict?: boolean | undefined;
/**
* Extract files relative to the specified directory. Defaults to
* process.cwd(). If provided, this must exist and must be a directory.
*/
cwd?: string | undefined;
/**
* Alias for cwd.
*/
C?: string | undefined;
/**
* A path portion to prefix onto the entries in the archive.
*/
prefix?: string | undefined;
/**
* Set to any truthy value to create a gzipped archive,
* or an object with settings for zlib.Gzip()
*/
gzip?: boolean | zlib.ZlibOptions | undefined;
/**
* A function that gets called with (path, stat) for each entry being
* added. Return true to emit the entry from the archive, or false to skip it.
*/
filter?(path: string, stat: FileStat): boolean;
/**
* Allow absolute paths. By default, / is stripped from absolute paths.
*/
preservePaths?: boolean | undefined;
/**
* The maximum buffer size for fs.read() operations. Defaults to 16 MB.
*/
maxReadSize?: number | undefined;
/**
* Do not recursively archive the contents of directories.
*/
noDirRecurse?: boolean | undefined;
/**
* Set to true to pack the targets of symbolic links. Without this
* option, symbolic links are archived as such.
*/
follow?: boolean | undefined;
/**
* Alias for follow.
*/
L?: boolean | undefined;
/**
* Alias for follow.
*/
h?: boolean | undefined;
/**
* uppress pax extended headers. Note that this means that long paths and
* linkpaths will be truncated, and large or negative numeric values
* may be interpreted incorrectly.
*/
noPax?: boolean | undefined;
}
export interface FileOptions {
/**
* Uses the given file as the input or output of this function.
*/
file?: string | undefined;
/**
* Alias for file.
*/
f?: string | undefined;
}
/**
* Create a tarball archive. The fileList is an array of paths to add to the
* tarball. Adding a directory also adds its children recursively. An entry in
* fileList that starts with an @ symbol is a tar archive whose entries will
* be added. To add a file that starts with @, prepend it with `./`.
*
* Archive data may be read from the returned stream.
*/
export function create(options: CreateOptions, fileList: ReadonlyArray<string>, callback?: (err?: Error) => void): stream.Readable;
/**
* Create a tarball archive. The fileList is an array of paths to add to the
* tarball. Adding a directory also adds its children recursively. An entry in
* fileList that starts with an @ symbol is a tar archive whose entries will
* be added. To add a file that starts with @, prepend it with `./`.
*/
export function create(options: CreateOptions & FileOptions, fileList: ReadonlyArray<string>): Promise<void>;
export function create(options: CreateOptions & FileOptions & { sync: true }, fileList: ReadonlyArray<string>): void;
export function create(options: CreateOptions & FileOptions, fileList: ReadonlyArray<string>, callback: (err?: Error) => void): void;
/**
* Alias for create
*/
export const c: typeof create;
/**
* Extract a tarball archive. The fileList is an array of paths to extract
* from the tarball. If no paths are provided, then all the entries are
* extracted. If the archive is gzipped, then tar will detect this and unzip
* it. Note that all directories that are created will be forced to be
* writable, readable, and listable by their owner, to avoid cases where a
* directory prevents extraction of child entries by virtue of its mode. Most
* extraction errors will cause a warn event to be emitted. If the cwd is
* missing, or not a directory, then the extraction will fail completely.
*
* Archive data should be written to the returned stream.
*/
export function extract(options: ExtractOptions, fileList?: ReadonlyArray<string>, callback?: (err?: Error) => void): stream.Writable;
/**
* Extract a tarball archive. The fileList is an array of paths to extract
* from the tarball. If no paths are provided, then all the entries are
* extracted. If the archive is gzipped, then tar will detect this and unzip
* it. Note that all directories that are created will be forced to be
* writable, readable, and listable by their owner, to avoid cases where a
* directory prevents extraction of child entries by virtue of its mode. Most
* extraction errors will cause a warn event to be emitted. If the cwd is
* missing, or not a directory, then the extraction will fail completely.
*/
export function extract(options: ExtractOptions & FileOptions, fileList?: ReadonlyArray<string>): Promise<void>;
export function extract(options: ExtractOptions & FileOptions & { sync: true }, fileList?: ReadonlyArray<string>): void;
export function extract(options: ExtractOptions & FileOptions, fileList: ReadonlyArray<string> | undefined, callback: (err?: Error) => void): void;
/**
* Alias for extract
*/
export const x: typeof extract;
/**
* List the contents of a tarball archive. The fileList is an array of paths
* to list from the tarball. If no paths are provided, then all the entries
* are listed. If the archive is gzipped, then tar will detect this and unzip
* it.
*
* Archive data should be written to the returned stream.
*/
export function list(options?: ListOptions & FileOptions, fileList?: ReadonlyArray<string>, callback?: (err?: Error) => void): stream.Writable;
/**
* List the contents of a tarball archive. The fileList is an array of paths
* to list from the tarball. If no paths are provided, then all the entries
* are listed. If the archive is gzipped, then tar will detect this and unzip
* it.
*/
export function list(options: ListOptions & FileOptions, fileList?: ReadonlyArray<string>): Promise<void>;
export function list(options: ListOptions & FileOptions & { sync: true }, fileList?: ReadonlyArray<string>): void;
/**
* Alias for list
*/
export const t: typeof list;
/**
* Add files to an existing archive. Because later entries override earlier
* entries, this effectively replaces any existing entries. The fileList is an
* array of paths to add to the tarball. Adding a directory also adds its
* children recursively. An entry in fileList that starts with an @ symbol is
* a tar archive whose entries will be added. To add a file that
* starts with @, prepend it with ./.
*/
export function replace(options: ReplaceOptions, fileList?: ReadonlyArray<string>): Promise<void>;
export function replace(options: ReplaceOptions, fileList: ReadonlyArray<string> | undefined, callback: (err?: Error) => void): Promise<void>;
/**
* Alias for replace
*/
export const r: typeof replace;
/**
* Add files to an archive if they are newer than the entry already in the
* tarball archive. The fileList is an array of paths to add to the tarball.
* Adding a directory also adds its children recursively. An entry in fileList
* that starts with an @ symbol is a tar archive whose entries will be added.
* To add a file that starts with @, prepend it with ./.
*/
export function update(options: ReplaceOptions, fileList?: ReadonlyArray<string>): Promise<void>;
export function update(options: ReplaceOptions, fileList: ReadonlyArray<string> | undefined, callback: (err?: Error) => void): Promise<void>;
/**
* Alias for update
*/
export const u: typeof update;