[6a3a178] | 1 | # node-tar
|
---|
| 2 |
|
---|
| 3 | [Fast](./benchmarks) and full-featured Tar for Node.js
|
---|
| 4 |
|
---|
| 5 | The API is designed to mimic the behavior of `tar(1)` on unix systems.
|
---|
| 6 | If you are familiar with how tar works, most of this will hopefully be
|
---|
| 7 | straightforward for you. If not, then hopefully this module can teach
|
---|
| 8 | you useful unix skills that may come in handy someday :)
|
---|
| 9 |
|
---|
| 10 | ## Background
|
---|
| 11 |
|
---|
| 12 | A "tar file" or "tarball" is an archive of file system entries
|
---|
| 13 | (directories, files, links, etc.) The name comes from "tape archive".
|
---|
| 14 | If you run `man tar` on almost any Unix command line, you'll learn
|
---|
| 15 | quite a bit about what it can do, and its history.
|
---|
| 16 |
|
---|
| 17 | Tar has 5 main top-level commands:
|
---|
| 18 |
|
---|
| 19 | * `c` Create an archive
|
---|
| 20 | * `r` Replace entries within an archive
|
---|
| 21 | * `u` Update entries within an archive (ie, replace if they're newer)
|
---|
| 22 | * `t` List out the contents of an archive
|
---|
| 23 | * `x` Extract an archive to disk
|
---|
| 24 |
|
---|
| 25 | The other flags and options modify how this top level function works.
|
---|
| 26 |
|
---|
| 27 | ## High-Level API
|
---|
| 28 |
|
---|
| 29 | These 5 functions are the high-level API. All of them have a
|
---|
| 30 | single-character name (for unix nerds familiar with `tar(1)`) as well
|
---|
| 31 | as a long name (for everyone else).
|
---|
| 32 |
|
---|
| 33 | All the high-level functions take the following arguments, all three
|
---|
| 34 | of which are optional and may be omitted.
|
---|
| 35 |
|
---|
| 36 | 1. `options` - An optional object specifying various options
|
---|
| 37 | 2. `paths` - An array of paths to add or extract
|
---|
| 38 | 3. `callback` - Called when the command is completed, if async. (If
|
---|
| 39 | sync or no file specified, providing a callback throws a
|
---|
| 40 | `TypeError`.)
|
---|
| 41 |
|
---|
| 42 | If the command is sync (ie, if `options.sync=true`), then the
|
---|
| 43 | callback is not allowed, since the action will be completed immediately.
|
---|
| 44 |
|
---|
| 45 | If a `file` argument is specified, and the command is async, then a
|
---|
| 46 | `Promise` is returned. In this case, if async, a callback may be
|
---|
| 47 | provided which is called when the command is completed.
|
---|
| 48 |
|
---|
| 49 | If a `file` option is not specified, then a stream is returned. For
|
---|
| 50 | `create`, this is a readable stream of the generated archive. For
|
---|
| 51 | `list` and `extract` this is a writable stream that an archive should
|
---|
| 52 | be written into. If a file is not specified, then a callback is not
|
---|
| 53 | allowed, because you're already getting a stream to work with.
|
---|
| 54 |
|
---|
| 55 | `replace` and `update` only work on existing archives, and so require
|
---|
| 56 | a `file` argument.
|
---|
| 57 |
|
---|
| 58 | Sync commands without a file argument return a stream that acts on its
|
---|
| 59 | input immediately in the same tick. For readable streams, this means
|
---|
| 60 | that all of the data is immediately available by calling
|
---|
| 61 | `stream.read()`. For writable streams, it will be acted upon as soon
|
---|
| 62 | as it is provided, but this can be at any time.
|
---|
| 63 |
|
---|
| 64 | ### Warnings and Errors
|
---|
| 65 |
|
---|
| 66 | Tar emits warnings and errors for recoverable and unrecoverable situations,
|
---|
| 67 | respectively. In many cases, a warning only affects a single entry in an
|
---|
| 68 | archive, or is simply informing you that it's modifying an entry to comply
|
---|
| 69 | with the settings provided.
|
---|
| 70 |
|
---|
| 71 | Unrecoverable warnings will always raise an error (ie, emit `'error'` on
|
---|
| 72 | streaming actions, throw for non-streaming sync actions, reject the
|
---|
| 73 | returned Promise for non-streaming async operations, or call a provided
|
---|
| 74 | callback with an `Error` as the first argument). Recoverable errors will
|
---|
| 75 | raise an error only if `strict: true` is set in the options.
|
---|
| 76 |
|
---|
| 77 | Respond to (recoverable) warnings by listening to the `warn` event.
|
---|
| 78 | Handlers receive 3 arguments:
|
---|
| 79 |
|
---|
| 80 | - `code` String. One of the error codes below. This may not match
|
---|
| 81 | `data.code`, which preserves the original error code from fs and zlib.
|
---|
| 82 | - `message` String. More details about the error.
|
---|
| 83 | - `data` Metadata about the error. An `Error` object for errors raised by
|
---|
| 84 | fs and zlib. All fields are attached to errors raisd by tar. Typically
|
---|
| 85 | contains the following fields, as relevant:
|
---|
| 86 | - `tarCode` The tar error code.
|
---|
| 87 | - `code` Either the tar error code, or the error code set by the
|
---|
| 88 | underlying system.
|
---|
| 89 | - `file` The archive file being read or written.
|
---|
| 90 | - `cwd` Working directory for creation and extraction operations.
|
---|
| 91 | - `entry` The entry object (if it could be created) for `TAR_ENTRY_INFO`,
|
---|
| 92 | `TAR_ENTRY_INVALID`, and `TAR_ENTRY_ERROR` warnings.
|
---|
| 93 | - `header` The header object (if it could be created, and the entry could
|
---|
| 94 | not be created) for `TAR_ENTRY_INFO` and `TAR_ENTRY_INVALID` warnings.
|
---|
| 95 | - `recoverable` Boolean. If `false`, then the warning will emit an
|
---|
| 96 | `error`, even in non-strict mode.
|
---|
| 97 |
|
---|
| 98 | #### Error Codes
|
---|
| 99 |
|
---|
| 100 | * `TAR_ENTRY_INFO` An informative error indicating that an entry is being
|
---|
| 101 | modified, but otherwise processed normally. For example, removing `/` or
|
---|
| 102 | `C:\` from absolute paths if `preservePaths` is not set.
|
---|
| 103 |
|
---|
| 104 | * `TAR_ENTRY_INVALID` An indication that a given entry is not a valid tar
|
---|
| 105 | archive entry, and will be skipped. This occurs when:
|
---|
| 106 | - a checksum fails,
|
---|
| 107 | - a `linkpath` is missing for a link type, or
|
---|
| 108 | - a `linkpath` is provided for a non-link type.
|
---|
| 109 |
|
---|
| 110 | If every entry in a parsed archive raises an `TAR_ENTRY_INVALID` error,
|
---|
| 111 | then the archive is presumed to be unrecoverably broken, and
|
---|
| 112 | `TAR_BAD_ARCHIVE` will be raised.
|
---|
| 113 |
|
---|
| 114 | * `TAR_ENTRY_ERROR` The entry appears to be a valid tar archive entry, but
|
---|
| 115 | encountered an error which prevented it from being unpacked. This occurs
|
---|
| 116 | when:
|
---|
| 117 | - an unrecoverable fs error happens during unpacking,
|
---|
| 118 | - an entry has `..` in the path and `preservePaths` is not set, or
|
---|
| 119 | - an entry is extracting through a symbolic link, when `preservePaths` is
|
---|
| 120 | not set.
|
---|
| 121 |
|
---|
| 122 | * `TAR_ENTRY_UNSUPPORTED` An indication that a given entry is
|
---|
| 123 | a valid archive entry, but of a type that is unsupported, and so will be
|
---|
| 124 | skipped in archive creation or extracting.
|
---|
| 125 |
|
---|
| 126 | * `TAR_ABORT` When parsing gzipped-encoded archives, the parser will
|
---|
| 127 | abort the parse process raise a warning for any zlib errors encountered.
|
---|
| 128 | Aborts are considered unrecoverable for both parsing and unpacking.
|
---|
| 129 |
|
---|
| 130 | * `TAR_BAD_ARCHIVE` The archive file is totally hosed. This can happen for
|
---|
| 131 | a number of reasons, and always occurs at the end of a parse or extract:
|
---|
| 132 |
|
---|
| 133 | - An entry body was truncated before seeing the full number of bytes.
|
---|
| 134 | - The archive contained only invalid entries, indicating that it is
|
---|
| 135 | likely not an archive, or at least, not an archive this library can
|
---|
| 136 | parse.
|
---|
| 137 |
|
---|
| 138 | `TAR_BAD_ARCHIVE` is considered informative for parse operations, but
|
---|
| 139 | unrecoverable for extraction. Note that, if encountered at the end of an
|
---|
| 140 | extraction, tar WILL still have extracted as much it could from the
|
---|
| 141 | archive, so there may be some garbage files to clean up.
|
---|
| 142 |
|
---|
| 143 | Errors that occur deeper in the system (ie, either the filesystem or zlib)
|
---|
| 144 | will have their error codes left intact, and a `tarCode` matching one of
|
---|
| 145 | the above will be added to the warning metadata or the raised error object.
|
---|
| 146 |
|
---|
| 147 | Errors generated by tar will have one of the above codes set as the
|
---|
| 148 | `error.code` field as well, but since errors originating in zlib or fs will
|
---|
| 149 | have their original codes, it's better to read `error.tarCode` if you wish
|
---|
| 150 | to see how tar is handling the issue.
|
---|
| 151 |
|
---|
| 152 | ### Examples
|
---|
| 153 |
|
---|
| 154 | The API mimics the `tar(1)` command line functionality, with aliases
|
---|
| 155 | for more human-readable option and function names. The goal is that
|
---|
| 156 | if you know how to use `tar(1)` in Unix, then you know how to use
|
---|
| 157 | `require('tar')` in JavaScript.
|
---|
| 158 |
|
---|
| 159 | To replicate `tar czf my-tarball.tgz files and folders`, you'd do:
|
---|
| 160 |
|
---|
| 161 | ```js
|
---|
| 162 | tar.c(
|
---|
| 163 | {
|
---|
| 164 | gzip: <true|gzip options>,
|
---|
| 165 | file: 'my-tarball.tgz'
|
---|
| 166 | },
|
---|
| 167 | ['some', 'files', 'and', 'folders']
|
---|
| 168 | ).then(_ => { .. tarball has been created .. })
|
---|
| 169 | ```
|
---|
| 170 |
|
---|
| 171 | To replicate `tar cz files and folders > my-tarball.tgz`, you'd do:
|
---|
| 172 |
|
---|
| 173 | ```js
|
---|
| 174 | tar.c( // or tar.create
|
---|
| 175 | {
|
---|
| 176 | gzip: <true|gzip options>
|
---|
| 177 | },
|
---|
| 178 | ['some', 'files', 'and', 'folders']
|
---|
| 179 | ).pipe(fs.createWriteStream('my-tarball.tgz'))
|
---|
| 180 | ```
|
---|
| 181 |
|
---|
| 182 | To replicate `tar xf my-tarball.tgz` you'd do:
|
---|
| 183 |
|
---|
| 184 | ```js
|
---|
| 185 | tar.x( // or tar.extract(
|
---|
| 186 | {
|
---|
| 187 | file: 'my-tarball.tgz'
|
---|
| 188 | }
|
---|
| 189 | ).then(_=> { .. tarball has been dumped in cwd .. })
|
---|
| 190 | ```
|
---|
| 191 |
|
---|
| 192 | To replicate `cat my-tarball.tgz | tar x -C some-dir --strip=1`:
|
---|
| 193 |
|
---|
| 194 | ```js
|
---|
| 195 | fs.createReadStream('my-tarball.tgz').pipe(
|
---|
| 196 | tar.x({
|
---|
| 197 | strip: 1,
|
---|
| 198 | C: 'some-dir' // alias for cwd:'some-dir', also ok
|
---|
| 199 | })
|
---|
| 200 | )
|
---|
| 201 | ```
|
---|
| 202 |
|
---|
| 203 | To replicate `tar tf my-tarball.tgz`, do this:
|
---|
| 204 |
|
---|
| 205 | ```js
|
---|
| 206 | tar.t({
|
---|
| 207 | file: 'my-tarball.tgz',
|
---|
| 208 | onentry: entry => { .. do whatever with it .. }
|
---|
| 209 | })
|
---|
| 210 | ```
|
---|
| 211 |
|
---|
| 212 | To replicate `cat my-tarball.tgz | tar t` do:
|
---|
| 213 |
|
---|
| 214 | ```js
|
---|
| 215 | fs.createReadStream('my-tarball.tgz')
|
---|
| 216 | .pipe(tar.t())
|
---|
| 217 | .on('entry', entry => { .. do whatever with it .. })
|
---|
| 218 | ```
|
---|
| 219 |
|
---|
| 220 | To do anything synchronous, add `sync: true` to the options. Note
|
---|
| 221 | that sync functions don't take a callback and don't return a promise.
|
---|
| 222 | When the function returns, it's already done. Sync methods without a
|
---|
| 223 | file argument return a sync stream, which flushes immediately. But,
|
---|
| 224 | of course, it still won't be done until you `.end()` it.
|
---|
| 225 |
|
---|
| 226 | To filter entries, add `filter: <function>` to the options.
|
---|
| 227 | Tar-creating methods call the filter with `filter(path, stat)`.
|
---|
| 228 | Tar-reading methods (including extraction) call the filter with
|
---|
| 229 | `filter(path, entry)`. The filter is called in the `this`-context of
|
---|
| 230 | the `Pack` or `Unpack` stream object.
|
---|
| 231 |
|
---|
| 232 | The arguments list to `tar t` and `tar x` specify a list of filenames
|
---|
| 233 | to extract or list, so they're equivalent to a filter that tests if
|
---|
| 234 | the file is in the list.
|
---|
| 235 |
|
---|
| 236 | For those who _aren't_ fans of tar's single-character command names:
|
---|
| 237 |
|
---|
| 238 | ```
|
---|
| 239 | tar.c === tar.create
|
---|
| 240 | tar.r === tar.replace (appends to archive, file is required)
|
---|
| 241 | tar.u === tar.update (appends if newer, file is required)
|
---|
| 242 | tar.x === tar.extract
|
---|
| 243 | tar.t === tar.list
|
---|
| 244 | ```
|
---|
| 245 |
|
---|
| 246 | Keep reading for all the command descriptions and options, as well as
|
---|
| 247 | the low-level API that they are built on.
|
---|
| 248 |
|
---|
| 249 | ### tar.c(options, fileList, callback) [alias: tar.create]
|
---|
| 250 |
|
---|
| 251 | Create a tarball archive.
|
---|
| 252 |
|
---|
| 253 | The `fileList` is an array of paths to add to the tarball. Adding a
|
---|
| 254 | directory also adds its children recursively.
|
---|
| 255 |
|
---|
| 256 | An entry in `fileList` that starts with an `@` symbol is a tar archive
|
---|
| 257 | whose entries will be added. To add a file that starts with `@`,
|
---|
| 258 | prepend it with `./`.
|
---|
| 259 |
|
---|
| 260 | The following options are supported:
|
---|
| 261 |
|
---|
| 262 | - `file` Write the tarball archive to the specified filename. If this
|
---|
| 263 | is specified, then the callback will be fired when the file has been
|
---|
| 264 | written, and a promise will be returned that resolves when the file
|
---|
| 265 | is written. If a filename is not specified, then a Readable Stream
|
---|
| 266 | will be returned which will emit the file data. [Alias: `f`]
|
---|
| 267 | - `sync` Act synchronously. If this is set, then any provided file
|
---|
| 268 | will be fully written after the call to `tar.c`. If this is set,
|
---|
| 269 | and a file is not provided, then the resulting stream will already
|
---|
| 270 | have the data ready to `read` or `emit('data')` as soon as you
|
---|
| 271 | request it.
|
---|
| 272 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 273 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 274 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 275 | - `cwd` The current working directory for creating the archive.
|
---|
| 276 | Defaults to `process.cwd()`. [Alias: `C`]
|
---|
| 277 | - `prefix` A path portion to prefix onto the entries in the archive.
|
---|
| 278 | - `gzip` Set to any truthy value to create a gzipped archive, or an
|
---|
| 279 | object with settings for `zlib.Gzip()` [Alias: `z`]
|
---|
| 280 | - `filter` A function that gets called with `(path, stat)` for each
|
---|
| 281 | entry being added. Return `true` to add the entry to the archive,
|
---|
| 282 | or `false` to omit it.
|
---|
| 283 | - `portable` Omit metadata that is system-specific: `ctime`, `atime`,
|
---|
| 284 | `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and `nlink`. Note
|
---|
| 285 | that `mtime` is still included, because this is necessary for other
|
---|
| 286 | time-based operations. Additionally, `mode` is set to a "reasonable
|
---|
| 287 | default" for most unix systems, based on a `umask` value of `0o22`.
|
---|
| 288 | - `preservePaths` Allow absolute paths. By default, `/` is stripped
|
---|
| 289 | from absolute paths. [Alias: `P`]
|
---|
| 290 | - `mode` The mode to set on the created file archive
|
---|
| 291 | - `noDirRecurse` Do not recursively archive the contents of
|
---|
| 292 | directories. [Alias: `n`]
|
---|
| 293 | - `follow` Set to true to pack the targets of symbolic links. Without
|
---|
| 294 | this option, symbolic links are archived as such. [Alias: `L`, `h`]
|
---|
| 295 | - `noPax` Suppress pax extended headers. Note that this means that
|
---|
| 296 | long paths and linkpaths will be truncated, and large or negative
|
---|
| 297 | numeric values may be interpreted incorrectly.
|
---|
| 298 | - `noMtime` Set to true to omit writing `mtime` values for entries.
|
---|
| 299 | Note that this prevents using other mtime-based features like
|
---|
| 300 | `tar.update` or the `keepNewer` option with the resulting tar archive.
|
---|
| 301 | [Alias: `m`, `no-mtime`]
|
---|
| 302 | - `mtime` Set to a `Date` object to force a specific `mtime` for
|
---|
| 303 | everything added to the archive. Overridden by `noMtime`.
|
---|
| 304 |
|
---|
| 305 | The following options are mostly internal, but can be modified in some
|
---|
| 306 | advanced use cases, such as re-using caches between runs.
|
---|
| 307 |
|
---|
| 308 | - `linkCache` A Map object containing the device and inode value for
|
---|
| 309 | any file whose nlink is > 1, to identify hard links.
|
---|
| 310 | - `statCache` A Map object that caches calls `lstat`.
|
---|
| 311 | - `readdirCache` A Map object that caches calls to `readdir`.
|
---|
| 312 | - `jobs` A number specifying how many concurrent jobs to run.
|
---|
| 313 | Defaults to 4.
|
---|
| 314 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 315 | Defaults to 16 MB.
|
---|
| 316 |
|
---|
| 317 | ### tar.x(options, fileList, callback) [alias: tar.extract]
|
---|
| 318 |
|
---|
| 319 | Extract a tarball archive.
|
---|
| 320 |
|
---|
| 321 | The `fileList` is an array of paths to extract from the tarball. If
|
---|
| 322 | no paths are provided, then all the entries are extracted.
|
---|
| 323 |
|
---|
| 324 | If the archive is gzipped, then tar will detect this and unzip it.
|
---|
| 325 |
|
---|
| 326 | Note that all directories that are created will be forced to be
|
---|
| 327 | writable, readable, and listable by their owner, to avoid cases where
|
---|
| 328 | a directory prevents extraction of child entries by virtue of its
|
---|
| 329 | mode.
|
---|
| 330 |
|
---|
| 331 | Most extraction errors will cause a `warn` event to be emitted. If
|
---|
| 332 | the `cwd` is missing, or not a directory, then the extraction will
|
---|
| 333 | fail completely.
|
---|
| 334 |
|
---|
| 335 | The following options are supported:
|
---|
| 336 |
|
---|
| 337 | - `cwd` Extract files relative to the specified directory. Defaults
|
---|
| 338 | to `process.cwd()`. If provided, this must exist and must be a
|
---|
| 339 | directory. [Alias: `C`]
|
---|
| 340 | - `file` The archive file to extract. If not specified, then a
|
---|
| 341 | Writable stream is returned where the archive data should be
|
---|
| 342 | written. [Alias: `f`]
|
---|
| 343 | - `sync` Create files and directories synchronously.
|
---|
| 344 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 345 | - `filter` A function that gets called with `(path, entry)` for each
|
---|
| 346 | entry being unpacked. Return `true` to unpack the entry from the
|
---|
| 347 | archive, or `false` to skip it.
|
---|
| 348 | - `newer` Set to true to keep the existing file on disk if it's newer
|
---|
| 349 | than the file in the archive. [Alias: `keep-newer`,
|
---|
| 350 | `keep-newer-files`]
|
---|
| 351 | - `keep` Do not overwrite existing files. In particular, if a file
|
---|
| 352 | appears more than once in an archive, later copies will not
|
---|
| 353 | overwrite earlier copies. [Alias: `k`, `keep-existing`]
|
---|
| 354 | - `preservePaths` Allow absolute paths, paths containing `..`, and
|
---|
| 355 | extracting through symbolic links. By default, `/` is stripped from
|
---|
| 356 | absolute paths, `..` paths are not extracted, and any file whose
|
---|
| 357 | location would be modified by a symbolic link is not extracted.
|
---|
| 358 | [Alias: `P`]
|
---|
| 359 | - `unlink` Unlink files before creating them. Without this option,
|
---|
| 360 | tar overwrites existing files, which preserves existing hardlinks.
|
---|
| 361 | With this option, existing hardlinks will be broken, as will any
|
---|
| 362 | symlink that would affect the location of an extracted file. [Alias:
|
---|
| 363 | `U`]
|
---|
| 364 | - `strip` Remove the specified number of leading path elements.
|
---|
| 365 | Pathnames with fewer elements will be silently skipped. Note that
|
---|
| 366 | the pathname is edited after applying the filter, but before
|
---|
| 367 | security checks. [Alias: `strip-components`, `stripComponents`]
|
---|
| 368 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 369 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 370 | - `preserveOwner` If true, tar will set the `uid` and `gid` of
|
---|
| 371 | extracted entries to the `uid` and `gid` fields in the archive.
|
---|
| 372 | This defaults to true when run as root, and false otherwise. If
|
---|
| 373 | false, then files and directories will be set with the owner and
|
---|
| 374 | group of the user running the process. This is similar to `-p` in
|
---|
| 375 | `tar(1)`, but ACLs and other system-specific data is never unpacked
|
---|
| 376 | in this implementation, and modes are set by default already.
|
---|
| 377 | [Alias: `p`]
|
---|
| 378 | - `uid` Set to a number to force ownership of all extracted files and
|
---|
| 379 | folders, and all implicitly created directories, to be owned by the
|
---|
| 380 | specified user id, regardless of the `uid` field in the archive.
|
---|
| 381 | Cannot be used along with `preserveOwner`. Requires also setting a
|
---|
| 382 | `gid` option.
|
---|
| 383 | - `gid` Set to a number to force ownership of all extracted files and
|
---|
| 384 | folders, and all implicitly created directories, to be owned by the
|
---|
| 385 | specified group id, regardless of the `gid` field in the archive.
|
---|
| 386 | Cannot be used along with `preserveOwner`. Requires also setting a
|
---|
| 387 | `uid` option.
|
---|
| 388 | - `noMtime` Set to true to omit writing `mtime` value for extracted
|
---|
| 389 | entries. [Alias: `m`, `no-mtime`]
|
---|
| 390 | - `transform` Provide a function that takes an `entry` object, and
|
---|
| 391 | returns a stream, or any falsey value. If a stream is provided,
|
---|
| 392 | then that stream's data will be written instead of the contents of
|
---|
| 393 | the archive entry. If a falsey value is provided, then the entry is
|
---|
| 394 | written to disk as normal. (To exclude items from extraction, use
|
---|
| 395 | the `filter` option described above.)
|
---|
| 396 | - `onentry` A function that gets called with `(entry)` for each entry
|
---|
| 397 | that passes the filter.
|
---|
| 398 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 399 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 400 | - `noChmod` Set to true to omit calling `fs.chmod()` to ensure that the
|
---|
| 401 | extracted file matches the entry mode. This also suppresses the call to
|
---|
| 402 | `process.umask()` to determine the default umask value, since tar will
|
---|
| 403 | extract with whatever mode is provided, and let the process `umask` apply
|
---|
| 404 | normally.
|
---|
| 405 |
|
---|
| 406 | The following options are mostly internal, but can be modified in some
|
---|
| 407 | advanced use cases, such as re-using caches between runs.
|
---|
| 408 |
|
---|
| 409 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 410 | Defaults to 16 MB.
|
---|
| 411 | - `umask` Filter the modes of entries like `process.umask()`.
|
---|
| 412 | - `dmode` Default mode for directories
|
---|
| 413 | - `fmode` Default mode for files
|
---|
| 414 | - `dirCache` A Map object of which directories exist.
|
---|
| 415 | - `maxMetaEntrySize` The maximum size of meta entries that is
|
---|
| 416 | supported. Defaults to 1 MB.
|
---|
| 417 |
|
---|
| 418 | Note that using an asynchronous stream type with the `transform`
|
---|
| 419 | option will cause undefined behavior in sync extractions.
|
---|
| 420 | [MiniPass](http://npm.im/minipass)-based streams are designed for this
|
---|
| 421 | use case.
|
---|
| 422 |
|
---|
| 423 | ### tar.t(options, fileList, callback) [alias: tar.list]
|
---|
| 424 |
|
---|
| 425 | List the contents of a tarball archive.
|
---|
| 426 |
|
---|
| 427 | The `fileList` is an array of paths to list from the tarball. If
|
---|
| 428 | no paths are provided, then all the entries are listed.
|
---|
| 429 |
|
---|
| 430 | If the archive is gzipped, then tar will detect this and unzip it.
|
---|
| 431 |
|
---|
| 432 | Returns an event emitter that emits `entry` events with
|
---|
| 433 | `tar.ReadEntry` objects. However, they don't emit `'data'` or `'end'`
|
---|
| 434 | events. (If you want to get actual readable entries, use the
|
---|
| 435 | `tar.Parse` class instead.)
|
---|
| 436 |
|
---|
| 437 | The following options are supported:
|
---|
| 438 |
|
---|
| 439 | - `cwd` Extract files relative to the specified directory. Defaults
|
---|
| 440 | to `process.cwd()`. [Alias: `C`]
|
---|
| 441 | - `file` The archive file to list. If not specified, then a
|
---|
| 442 | Writable stream is returned where the archive data should be
|
---|
| 443 | written. [Alias: `f`]
|
---|
| 444 | - `sync` Read the specified file synchronously. (This has no effect
|
---|
| 445 | when a file option isn't specified, because entries are emitted as
|
---|
| 446 | fast as they are parsed from the stream anyway.)
|
---|
| 447 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 448 | - `filter` A function that gets called with `(path, entry)` for each
|
---|
| 449 | entry being listed. Return `true` to emit the entry from the
|
---|
| 450 | archive, or `false` to skip it.
|
---|
| 451 | - `onentry` A function that gets called with `(entry)` for each entry
|
---|
| 452 | that passes the filter. This is important for when both `file` and
|
---|
| 453 | `sync` are set, because it will be called synchronously.
|
---|
| 454 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 455 | Defaults to 16 MB.
|
---|
| 456 | - `noResume` By default, `entry` streams are resumed immediately after
|
---|
| 457 | the call to `onentry`. Set `noResume: true` to suppress this
|
---|
| 458 | behavior. Note that by opting into this, the stream will never
|
---|
| 459 | complete until the entry data is consumed.
|
---|
| 460 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 461 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 462 |
|
---|
| 463 | ### tar.u(options, fileList, callback) [alias: tar.update]
|
---|
| 464 |
|
---|
| 465 | Add files to an archive if they are newer than the entry already in
|
---|
| 466 | the tarball archive.
|
---|
| 467 |
|
---|
| 468 | The `fileList` is an array of paths to add to the tarball. Adding a
|
---|
| 469 | directory also adds its children recursively.
|
---|
| 470 |
|
---|
| 471 | An entry in `fileList` that starts with an `@` symbol is a tar archive
|
---|
| 472 | whose entries will be added. To add a file that starts with `@`,
|
---|
| 473 | prepend it with `./`.
|
---|
| 474 |
|
---|
| 475 | The following options are supported:
|
---|
| 476 |
|
---|
| 477 | - `file` Required. Write the tarball archive to the specified
|
---|
| 478 | filename. [Alias: `f`]
|
---|
| 479 | - `sync` Act synchronously. If this is set, then any provided file
|
---|
| 480 | will be fully written after the call to `tar.c`.
|
---|
| 481 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 482 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 483 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 484 | - `cwd` The current working directory for adding entries to the
|
---|
| 485 | archive. Defaults to `process.cwd()`. [Alias: `C`]
|
---|
| 486 | - `prefix` A path portion to prefix onto the entries in the archive.
|
---|
| 487 | - `gzip` Set to any truthy value to create a gzipped archive, or an
|
---|
| 488 | object with settings for `zlib.Gzip()` [Alias: `z`]
|
---|
| 489 | - `filter` A function that gets called with `(path, stat)` for each
|
---|
| 490 | entry being added. Return `true` to add the entry to the archive,
|
---|
| 491 | or `false` to omit it.
|
---|
| 492 | - `portable` Omit metadata that is system-specific: `ctime`, `atime`,
|
---|
| 493 | `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and `nlink`. Note
|
---|
| 494 | that `mtime` is still included, because this is necessary for other
|
---|
| 495 | time-based operations. Additionally, `mode` is set to a "reasonable
|
---|
| 496 | default" for most unix systems, based on a `umask` value of `0o22`.
|
---|
| 497 | - `preservePaths` Allow absolute paths. By default, `/` is stripped
|
---|
| 498 | from absolute paths. [Alias: `P`]
|
---|
| 499 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 500 | Defaults to 16 MB.
|
---|
| 501 | - `noDirRecurse` Do not recursively archive the contents of
|
---|
| 502 | directories. [Alias: `n`]
|
---|
| 503 | - `follow` Set to true to pack the targets of symbolic links. Without
|
---|
| 504 | this option, symbolic links are archived as such. [Alias: `L`, `h`]
|
---|
| 505 | - `noPax` Suppress pax extended headers. Note that this means that
|
---|
| 506 | long paths and linkpaths will be truncated, and large or negative
|
---|
| 507 | numeric values may be interpreted incorrectly.
|
---|
| 508 | - `noMtime` Set to true to omit writing `mtime` values for entries.
|
---|
| 509 | Note that this prevents using other mtime-based features like
|
---|
| 510 | `tar.update` or the `keepNewer` option with the resulting tar archive.
|
---|
| 511 | [Alias: `m`, `no-mtime`]
|
---|
| 512 | - `mtime` Set to a `Date` object to force a specific `mtime` for
|
---|
| 513 | everything added to the archive. Overridden by `noMtime`.
|
---|
| 514 |
|
---|
| 515 | ### tar.r(options, fileList, callback) [alias: tar.replace]
|
---|
| 516 |
|
---|
| 517 | Add files to an existing archive. Because later entries override
|
---|
| 518 | earlier entries, this effectively replaces any existing entries.
|
---|
| 519 |
|
---|
| 520 | The `fileList` is an array of paths to add to the tarball. Adding a
|
---|
| 521 | directory also adds its children recursively.
|
---|
| 522 |
|
---|
| 523 | An entry in `fileList` that starts with an `@` symbol is a tar archive
|
---|
| 524 | whose entries will be added. To add a file that starts with `@`,
|
---|
| 525 | prepend it with `./`.
|
---|
| 526 |
|
---|
| 527 | The following options are supported:
|
---|
| 528 |
|
---|
| 529 | - `file` Required. Write the tarball archive to the specified
|
---|
| 530 | filename. [Alias: `f`]
|
---|
| 531 | - `sync` Act synchronously. If this is set, then any provided file
|
---|
| 532 | will be fully written after the call to `tar.c`.
|
---|
| 533 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 534 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 535 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 536 | - `cwd` The current working directory for adding entries to the
|
---|
| 537 | archive. Defaults to `process.cwd()`. [Alias: `C`]
|
---|
| 538 | - `prefix` A path portion to prefix onto the entries in the archive.
|
---|
| 539 | - `gzip` Set to any truthy value to create a gzipped archive, or an
|
---|
| 540 | object with settings for `zlib.Gzip()` [Alias: `z`]
|
---|
| 541 | - `filter` A function that gets called with `(path, stat)` for each
|
---|
| 542 | entry being added. Return `true` to add the entry to the archive,
|
---|
| 543 | or `false` to omit it.
|
---|
| 544 | - `portable` Omit metadata that is system-specific: `ctime`, `atime`,
|
---|
| 545 | `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and `nlink`. Note
|
---|
| 546 | that `mtime` is still included, because this is necessary for other
|
---|
| 547 | time-based operations. Additionally, `mode` is set to a "reasonable
|
---|
| 548 | default" for most unix systems, based on a `umask` value of `0o22`.
|
---|
| 549 | - `preservePaths` Allow absolute paths. By default, `/` is stripped
|
---|
| 550 | from absolute paths. [Alias: `P`]
|
---|
| 551 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 552 | Defaults to 16 MB.
|
---|
| 553 | - `noDirRecurse` Do not recursively archive the contents of
|
---|
| 554 | directories. [Alias: `n`]
|
---|
| 555 | - `follow` Set to true to pack the targets of symbolic links. Without
|
---|
| 556 | this option, symbolic links are archived as such. [Alias: `L`, `h`]
|
---|
| 557 | - `noPax` Suppress pax extended headers. Note that this means that
|
---|
| 558 | long paths and linkpaths will be truncated, and large or negative
|
---|
| 559 | numeric values may be interpreted incorrectly.
|
---|
| 560 | - `noMtime` Set to true to omit writing `mtime` values for entries.
|
---|
| 561 | Note that this prevents using other mtime-based features like
|
---|
| 562 | `tar.update` or the `keepNewer` option with the resulting tar archive.
|
---|
| 563 | [Alias: `m`, `no-mtime`]
|
---|
| 564 | - `mtime` Set to a `Date` object to force a specific `mtime` for
|
---|
| 565 | everything added to the archive. Overridden by `noMtime`.
|
---|
| 566 |
|
---|
| 567 |
|
---|
| 568 | ## Low-Level API
|
---|
| 569 |
|
---|
| 570 | ### class tar.Pack
|
---|
| 571 |
|
---|
| 572 | A readable tar stream.
|
---|
| 573 |
|
---|
| 574 | Has all the standard readable stream interface stuff. `'data'` and
|
---|
| 575 | `'end'` events, `read()` method, `pause()` and `resume()`, etc.
|
---|
| 576 |
|
---|
| 577 | #### constructor(options)
|
---|
| 578 |
|
---|
| 579 | The following options are supported:
|
---|
| 580 |
|
---|
| 581 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 582 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 583 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 584 | - `cwd` The current working directory for creating the archive.
|
---|
| 585 | Defaults to `process.cwd()`.
|
---|
| 586 | - `prefix` A path portion to prefix onto the entries in the archive.
|
---|
| 587 | - `gzip` Set to any truthy value to create a gzipped archive, or an
|
---|
| 588 | object with settings for `zlib.Gzip()`
|
---|
| 589 | - `filter` A function that gets called with `(path, stat)` for each
|
---|
| 590 | entry being added. Return `true` to add the entry to the archive,
|
---|
| 591 | or `false` to omit it.
|
---|
| 592 | - `portable` Omit metadata that is system-specific: `ctime`, `atime`,
|
---|
| 593 | `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and `nlink`. Note
|
---|
| 594 | that `mtime` is still included, because this is necessary for other
|
---|
| 595 | time-based operations. Additionally, `mode` is set to a "reasonable
|
---|
| 596 | default" for most unix systems, based on a `umask` value of `0o22`.
|
---|
| 597 | - `preservePaths` Allow absolute paths. By default, `/` is stripped
|
---|
| 598 | from absolute paths.
|
---|
| 599 | - `linkCache` A Map object containing the device and inode value for
|
---|
| 600 | any file whose nlink is > 1, to identify hard links.
|
---|
| 601 | - `statCache` A Map object that caches calls `lstat`.
|
---|
| 602 | - `readdirCache` A Map object that caches calls to `readdir`.
|
---|
| 603 | - `jobs` A number specifying how many concurrent jobs to run.
|
---|
| 604 | Defaults to 4.
|
---|
| 605 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 606 | Defaults to 16 MB.
|
---|
| 607 | - `noDirRecurse` Do not recursively archive the contents of
|
---|
| 608 | directories.
|
---|
| 609 | - `follow` Set to true to pack the targets of symbolic links. Without
|
---|
| 610 | this option, symbolic links are archived as such.
|
---|
| 611 | - `noPax` Suppress pax extended headers. Note that this means that
|
---|
| 612 | long paths and linkpaths will be truncated, and large or negative
|
---|
| 613 | numeric values may be interpreted incorrectly.
|
---|
| 614 | - `noMtime` Set to true to omit writing `mtime` values for entries.
|
---|
| 615 | Note that this prevents using other mtime-based features like
|
---|
| 616 | `tar.update` or the `keepNewer` option with the resulting tar archive.
|
---|
| 617 | - `mtime` Set to a `Date` object to force a specific `mtime` for
|
---|
| 618 | everything added to the archive. Overridden by `noMtime`.
|
---|
| 619 |
|
---|
| 620 | #### add(path)
|
---|
| 621 |
|
---|
| 622 | Adds an entry to the archive. Returns the Pack stream.
|
---|
| 623 |
|
---|
| 624 | #### write(path)
|
---|
| 625 |
|
---|
| 626 | Adds an entry to the archive. Returns true if flushed.
|
---|
| 627 |
|
---|
| 628 | #### end()
|
---|
| 629 |
|
---|
| 630 | Finishes the archive.
|
---|
| 631 |
|
---|
| 632 | ### class tar.Pack.Sync
|
---|
| 633 |
|
---|
| 634 | Synchronous version of `tar.Pack`.
|
---|
| 635 |
|
---|
| 636 | ### class tar.Unpack
|
---|
| 637 |
|
---|
| 638 | A writable stream that unpacks a tar archive onto the file system.
|
---|
| 639 |
|
---|
| 640 | All the normal writable stream stuff is supported. `write()` and
|
---|
| 641 | `end()` methods, `'drain'` events, etc.
|
---|
| 642 |
|
---|
| 643 | Note that all directories that are created will be forced to be
|
---|
| 644 | writable, readable, and listable by their owner, to avoid cases where
|
---|
| 645 | a directory prevents extraction of child entries by virtue of its
|
---|
| 646 | mode.
|
---|
| 647 |
|
---|
| 648 | `'close'` is emitted when it's done writing stuff to the file system.
|
---|
| 649 |
|
---|
| 650 | Most unpack errors will cause a `warn` event to be emitted. If the
|
---|
| 651 | `cwd` is missing, or not a directory, then an error will be emitted.
|
---|
| 652 |
|
---|
| 653 | #### constructor(options)
|
---|
| 654 |
|
---|
| 655 | - `cwd` Extract files relative to the specified directory. Defaults
|
---|
| 656 | to `process.cwd()`. If provided, this must exist and must be a
|
---|
| 657 | directory.
|
---|
| 658 | - `filter` A function that gets called with `(path, entry)` for each
|
---|
| 659 | entry being unpacked. Return `true` to unpack the entry from the
|
---|
| 660 | archive, or `false` to skip it.
|
---|
| 661 | - `newer` Set to true to keep the existing file on disk if it's newer
|
---|
| 662 | than the file in the archive.
|
---|
| 663 | - `keep` Do not overwrite existing files. In particular, if a file
|
---|
| 664 | appears more than once in an archive, later copies will not
|
---|
| 665 | overwrite earlier copies.
|
---|
| 666 | - `preservePaths` Allow absolute paths, paths containing `..`, and
|
---|
| 667 | extracting through symbolic links. By default, `/` is stripped from
|
---|
| 668 | absolute paths, `..` paths are not extracted, and any file whose
|
---|
| 669 | location would be modified by a symbolic link is not extracted.
|
---|
| 670 | - `unlink` Unlink files before creating them. Without this option,
|
---|
| 671 | tar overwrites existing files, which preserves existing hardlinks.
|
---|
| 672 | With this option, existing hardlinks will be broken, as will any
|
---|
| 673 | symlink that would affect the location of an extracted file.
|
---|
| 674 | - `strip` Remove the specified number of leading path elements.
|
---|
| 675 | Pathnames with fewer elements will be silently skipped. Note that
|
---|
| 676 | the pathname is edited after applying the filter, but before
|
---|
| 677 | security checks.
|
---|
| 678 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 679 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 680 | - `umask` Filter the modes of entries like `process.umask()`.
|
---|
| 681 | - `dmode` Default mode for directories
|
---|
| 682 | - `fmode` Default mode for files
|
---|
| 683 | - `dirCache` A Map object of which directories exist.
|
---|
| 684 | - `maxMetaEntrySize` The maximum size of meta entries that is
|
---|
| 685 | supported. Defaults to 1 MB.
|
---|
| 686 | - `preserveOwner` If true, tar will set the `uid` and `gid` of
|
---|
| 687 | extracted entries to the `uid` and `gid` fields in the archive.
|
---|
| 688 | This defaults to true when run as root, and false otherwise. If
|
---|
| 689 | false, then files and directories will be set with the owner and
|
---|
| 690 | group of the user running the process. This is similar to `-p` in
|
---|
| 691 | `tar(1)`, but ACLs and other system-specific data is never unpacked
|
---|
| 692 | in this implementation, and modes are set by default already.
|
---|
| 693 | - `win32` True if on a windows platform. Causes behavior where
|
---|
| 694 | filenames containing `<|>?` chars are converted to
|
---|
| 695 | windows-compatible values while being unpacked.
|
---|
| 696 | - `uid` Set to a number to force ownership of all extracted files and
|
---|
| 697 | folders, and all implicitly created directories, to be owned by the
|
---|
| 698 | specified user id, regardless of the `uid` field in the archive.
|
---|
| 699 | Cannot be used along with `preserveOwner`. Requires also setting a
|
---|
| 700 | `gid` option.
|
---|
| 701 | - `gid` Set to a number to force ownership of all extracted files and
|
---|
| 702 | folders, and all implicitly created directories, to be owned by the
|
---|
| 703 | specified group id, regardless of the `gid` field in the archive.
|
---|
| 704 | Cannot be used along with `preserveOwner`. Requires also setting a
|
---|
| 705 | `uid` option.
|
---|
| 706 | - `noMtime` Set to true to omit writing `mtime` value for extracted
|
---|
| 707 | entries.
|
---|
| 708 | - `transform` Provide a function that takes an `entry` object, and
|
---|
| 709 | returns a stream, or any falsey value. If a stream is provided,
|
---|
| 710 | then that stream's data will be written instead of the contents of
|
---|
| 711 | the archive entry. If a falsey value is provided, then the entry is
|
---|
| 712 | written to disk as normal. (To exclude items from extraction, use
|
---|
| 713 | the `filter` option described above.)
|
---|
| 714 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 715 | - `onentry` A function that gets called with `(entry)` for each entry
|
---|
| 716 | that passes the filter.
|
---|
| 717 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 718 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 719 | - `noChmod` Set to true to omit calling `fs.chmod()` to ensure that the
|
---|
| 720 | extracted file matches the entry mode. This also suppresses the call to
|
---|
| 721 | `process.umask()` to determine the default umask value, since tar will
|
---|
| 722 | extract with whatever mode is provided, and let the process `umask` apply
|
---|
| 723 | normally.
|
---|
| 724 |
|
---|
| 725 | ### class tar.Unpack.Sync
|
---|
| 726 |
|
---|
| 727 | Synchronous version of `tar.Unpack`.
|
---|
| 728 |
|
---|
| 729 | Note that using an asynchronous stream type with the `transform`
|
---|
| 730 | option will cause undefined behavior in sync unpack streams.
|
---|
| 731 | [MiniPass](http://npm.im/minipass)-based streams are designed for this
|
---|
| 732 | use case.
|
---|
| 733 |
|
---|
| 734 | ### class tar.Parse
|
---|
| 735 |
|
---|
| 736 | A writable stream that parses a tar archive stream. All the standard
|
---|
| 737 | writable stream stuff is supported.
|
---|
| 738 |
|
---|
| 739 | If the archive is gzipped, then tar will detect this and unzip it.
|
---|
| 740 |
|
---|
| 741 | Emits `'entry'` events with `tar.ReadEntry` objects, which are
|
---|
| 742 | themselves readable streams that you can pipe wherever.
|
---|
| 743 |
|
---|
| 744 | Each `entry` will not emit until the one before it is flushed through,
|
---|
| 745 | so make sure to either consume the data (with `on('data', ...)` or
|
---|
| 746 | `.pipe(...)`) or throw it away with `.resume()` to keep the stream
|
---|
| 747 | flowing.
|
---|
| 748 |
|
---|
| 749 | #### constructor(options)
|
---|
| 750 |
|
---|
| 751 | Returns an event emitter that emits `entry` events with
|
---|
| 752 | `tar.ReadEntry` objects.
|
---|
| 753 |
|
---|
| 754 | The following options are supported:
|
---|
| 755 |
|
---|
| 756 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 757 | - `filter` A function that gets called with `(path, entry)` for each
|
---|
| 758 | entry being listed. Return `true` to emit the entry from the
|
---|
| 759 | archive, or `false` to skip it.
|
---|
| 760 | - `onentry` A function that gets called with `(entry)` for each entry
|
---|
| 761 | that passes the filter.
|
---|
| 762 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 763 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 764 |
|
---|
| 765 | #### abort(error)
|
---|
| 766 |
|
---|
| 767 | Stop all parsing activities. This is called when there are zlib
|
---|
| 768 | errors. It also emits an unrecoverable warning with the error provided.
|
---|
| 769 |
|
---|
| 770 | ### class tar.ReadEntry extends [MiniPass](http://npm.im/minipass)
|
---|
| 771 |
|
---|
| 772 | A representation of an entry that is being read out of a tar archive.
|
---|
| 773 |
|
---|
| 774 | It has the following fields:
|
---|
| 775 |
|
---|
| 776 | - `extended` The extended metadata object provided to the constructor.
|
---|
| 777 | - `globalExtended` The global extended metadata object provided to the
|
---|
| 778 | constructor.
|
---|
| 779 | - `remain` The number of bytes remaining to be written into the
|
---|
| 780 | stream.
|
---|
| 781 | - `blockRemain` The number of 512-byte blocks remaining to be written
|
---|
| 782 | into the stream.
|
---|
| 783 | - `ignore` Whether this entry should be ignored.
|
---|
| 784 | - `meta` True if this represents metadata about the next entry, false
|
---|
| 785 | if it represents a filesystem object.
|
---|
| 786 | - All the fields from the header, extended header, and global extended
|
---|
| 787 | header are added to the ReadEntry object. So it has `path`, `type`,
|
---|
| 788 | `size`, `mode`, and so on.
|
---|
| 789 |
|
---|
| 790 | #### constructor(header, extended, globalExtended)
|
---|
| 791 |
|
---|
| 792 | Create a new ReadEntry object with the specified header, extended
|
---|
| 793 | header, and global extended header values.
|
---|
| 794 |
|
---|
| 795 | ### class tar.WriteEntry extends [MiniPass](http://npm.im/minipass)
|
---|
| 796 |
|
---|
| 797 | A representation of an entry that is being written from the file
|
---|
| 798 | system into a tar archive.
|
---|
| 799 |
|
---|
| 800 | Emits data for the Header, and for the Pax Extended Header if one is
|
---|
| 801 | required, as well as any body data.
|
---|
| 802 |
|
---|
| 803 | Creating a WriteEntry for a directory does not also create
|
---|
| 804 | WriteEntry objects for all of the directory contents.
|
---|
| 805 |
|
---|
| 806 | It has the following fields:
|
---|
| 807 |
|
---|
| 808 | - `path` The path field that will be written to the archive. By
|
---|
| 809 | default, this is also the path from the cwd to the file system
|
---|
| 810 | object.
|
---|
| 811 | - `portable` Omit metadata that is system-specific: `ctime`, `atime`,
|
---|
| 812 | `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and `nlink`. Note
|
---|
| 813 | that `mtime` is still included, because this is necessary for other
|
---|
| 814 | time-based operations. Additionally, `mode` is set to a "reasonable
|
---|
| 815 | default" for most unix systems, based on a `umask` value of `0o22`.
|
---|
| 816 | - `myuid` If supported, the uid of the user running the current
|
---|
| 817 | process.
|
---|
| 818 | - `myuser` The `env.USER` string if set, or `''`. Set as the entry
|
---|
| 819 | `uname` field if the file's `uid` matches `this.myuid`.
|
---|
| 820 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 821 | Defaults to 1 MB.
|
---|
| 822 | - `linkCache` A Map object containing the device and inode value for
|
---|
| 823 | any file whose nlink is > 1, to identify hard links.
|
---|
| 824 | - `statCache` A Map object that caches calls `lstat`.
|
---|
| 825 | - `preservePaths` Allow absolute paths. By default, `/` is stripped
|
---|
| 826 | from absolute paths.
|
---|
| 827 | - `cwd` The current working directory for creating the archive.
|
---|
| 828 | Defaults to `process.cwd()`.
|
---|
| 829 | - `absolute` The absolute path to the entry on the filesystem. By
|
---|
| 830 | default, this is `path.resolve(this.cwd, this.path)`, but it can be
|
---|
| 831 | overridden explicitly.
|
---|
| 832 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 833 | - `win32` True if on a windows platform. Causes behavior where paths
|
---|
| 834 | replace `\` with `/` and filenames containing the windows-compatible
|
---|
| 835 | forms of `<|>?:` characters are converted to actual `<|>?:` characters
|
---|
| 836 | in the archive.
|
---|
| 837 | - `noPax` Suppress pax extended headers. Note that this means that
|
---|
| 838 | long paths and linkpaths will be truncated, and large or negative
|
---|
| 839 | numeric values may be interpreted incorrectly.
|
---|
| 840 | - `noMtime` Set to true to omit writing `mtime` values for entries.
|
---|
| 841 | Note that this prevents using other mtime-based features like
|
---|
| 842 | `tar.update` or the `keepNewer` option with the resulting tar archive.
|
---|
| 843 |
|
---|
| 844 |
|
---|
| 845 | #### constructor(path, options)
|
---|
| 846 |
|
---|
| 847 | `path` is the path of the entry as it is written in the archive.
|
---|
| 848 |
|
---|
| 849 | The following options are supported:
|
---|
| 850 |
|
---|
| 851 | - `portable` Omit metadata that is system-specific: `ctime`, `atime`,
|
---|
| 852 | `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and `nlink`. Note
|
---|
| 853 | that `mtime` is still included, because this is necessary for other
|
---|
| 854 | time-based operations. Additionally, `mode` is set to a "reasonable
|
---|
| 855 | default" for most unix systems, based on a `umask` value of `0o22`.
|
---|
| 856 | - `maxReadSize` The maximum buffer size for `fs.read()` operations.
|
---|
| 857 | Defaults to 1 MB.
|
---|
| 858 | - `linkCache` A Map object containing the device and inode value for
|
---|
| 859 | any file whose nlink is > 1, to identify hard links.
|
---|
| 860 | - `statCache` A Map object that caches calls `lstat`.
|
---|
| 861 | - `preservePaths` Allow absolute paths. By default, `/` is stripped
|
---|
| 862 | from absolute paths.
|
---|
| 863 | - `cwd` The current working directory for creating the archive.
|
---|
| 864 | Defaults to `process.cwd()`.
|
---|
| 865 | - `absolute` The absolute path to the entry on the filesystem. By
|
---|
| 866 | default, this is `path.resolve(this.cwd, this.path)`, but it can be
|
---|
| 867 | overridden explicitly.
|
---|
| 868 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 869 | - `win32` True if on a windows platform. Causes behavior where paths
|
---|
| 870 | replace `\` with `/`.
|
---|
| 871 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 872 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 873 | - `noMtime` Set to true to omit writing `mtime` values for entries.
|
---|
| 874 | Note that this prevents using other mtime-based features like
|
---|
| 875 | `tar.update` or the `keepNewer` option with the resulting tar archive.
|
---|
| 876 | - `umask` Set to restrict the modes on the entries in the archive,
|
---|
| 877 | somewhat like how umask works on file creation. Defaults to
|
---|
| 878 | `process.umask()` on unix systems, or `0o22` on Windows.
|
---|
| 879 |
|
---|
| 880 | #### warn(message, data)
|
---|
| 881 |
|
---|
| 882 | If strict, emit an error with the provided message.
|
---|
| 883 |
|
---|
| 884 | Othewise, emit a `'warn'` event with the provided message and data.
|
---|
| 885 |
|
---|
| 886 | ### class tar.WriteEntry.Sync
|
---|
| 887 |
|
---|
| 888 | Synchronous version of tar.WriteEntry
|
---|
| 889 |
|
---|
| 890 | ### class tar.WriteEntry.Tar
|
---|
| 891 |
|
---|
| 892 | A version of tar.WriteEntry that gets its data from a tar.ReadEntry
|
---|
| 893 | instead of from the filesystem.
|
---|
| 894 |
|
---|
| 895 | #### constructor(readEntry, options)
|
---|
| 896 |
|
---|
| 897 | `readEntry` is the entry being read out of another archive.
|
---|
| 898 |
|
---|
| 899 | The following options are supported:
|
---|
| 900 |
|
---|
| 901 | - `portable` Omit metadata that is system-specific: `ctime`, `atime`,
|
---|
| 902 | `uid`, `gid`, `uname`, `gname`, `dev`, `ino`, and `nlink`. Note
|
---|
| 903 | that `mtime` is still included, because this is necessary for other
|
---|
| 904 | time-based operations. Additionally, `mode` is set to a "reasonable
|
---|
| 905 | default" for most unix systems, based on a `umask` value of `0o22`.
|
---|
| 906 | - `preservePaths` Allow absolute paths. By default, `/` is stripped
|
---|
| 907 | from absolute paths.
|
---|
| 908 | - `strict` Treat warnings as crash-worthy errors. Default false.
|
---|
| 909 | - `onwarn` A function that will get called with `(code, message, data)` for
|
---|
| 910 | any warnings encountered. (See "Warnings and Errors")
|
---|
| 911 | - `noMtime` Set to true to omit writing `mtime` values for entries.
|
---|
| 912 | Note that this prevents using other mtime-based features like
|
---|
| 913 | `tar.update` or the `keepNewer` option with the resulting tar archive.
|
---|
| 914 |
|
---|
| 915 | ### class tar.Header
|
---|
| 916 |
|
---|
| 917 | A class for reading and writing header blocks.
|
---|
| 918 |
|
---|
| 919 | It has the following fields:
|
---|
| 920 |
|
---|
| 921 | - `nullBlock` True if decoding a block which is entirely composed of
|
---|
| 922 | `0x00` null bytes. (Useful because tar files are terminated by
|
---|
| 923 | at least 2 null blocks.)
|
---|
| 924 | - `cksumValid` True if the checksum in the header is valid, false
|
---|
| 925 | otherwise.
|
---|
| 926 | - `needPax` True if the values, as encoded, will require a Pax
|
---|
| 927 | extended header.
|
---|
| 928 | - `path` The path of the entry.
|
---|
| 929 | - `mode` The 4 lowest-order octal digits of the file mode. That is,
|
---|
| 930 | read/write/execute permissions for world, group, and owner, and the
|
---|
| 931 | setuid, setgid, and sticky bits.
|
---|
| 932 | - `uid` Numeric user id of the file owner
|
---|
| 933 | - `gid` Numeric group id of the file owner
|
---|
| 934 | - `size` Size of the file in bytes
|
---|
| 935 | - `mtime` Modified time of the file
|
---|
| 936 | - `cksum` The checksum of the header. This is generated by adding all
|
---|
| 937 | the bytes of the header block, treating the checksum field itself as
|
---|
| 938 | all ascii space characters (that is, `0x20`).
|
---|
| 939 | - `type` The human-readable name of the type of entry this represents,
|
---|
| 940 | or the alphanumeric key if unknown.
|
---|
| 941 | - `typeKey` The alphanumeric key for the type of entry this header
|
---|
| 942 | represents.
|
---|
| 943 | - `linkpath` The target of Link and SymbolicLink entries.
|
---|
| 944 | - `uname` Human-readable user name of the file owner
|
---|
| 945 | - `gname` Human-readable group name of the file owner
|
---|
| 946 | - `devmaj` The major portion of the device number. Always `0` for
|
---|
| 947 | files, directories, and links.
|
---|
| 948 | - `devmin` The minor portion of the device number. Always `0` for
|
---|
| 949 | files, directories, and links.
|
---|
| 950 | - `atime` File access time.
|
---|
| 951 | - `ctime` File change time.
|
---|
| 952 |
|
---|
| 953 | #### constructor(data, [offset=0])
|
---|
| 954 |
|
---|
| 955 | `data` is optional. It is either a Buffer that should be interpreted
|
---|
| 956 | as a tar Header starting at the specified offset and continuing for
|
---|
| 957 | 512 bytes, or a data object of keys and values to set on the header
|
---|
| 958 | object, and eventually encode as a tar Header.
|
---|
| 959 |
|
---|
| 960 | #### decode(block, offset)
|
---|
| 961 |
|
---|
| 962 | Decode the provided buffer starting at the specified offset.
|
---|
| 963 |
|
---|
| 964 | Buffer length must be greater than 512 bytes.
|
---|
| 965 |
|
---|
| 966 | #### set(data)
|
---|
| 967 |
|
---|
| 968 | Set the fields in the data object.
|
---|
| 969 |
|
---|
| 970 | #### encode(buffer, offset)
|
---|
| 971 |
|
---|
| 972 | Encode the header fields into the buffer at the specified offset.
|
---|
| 973 |
|
---|
| 974 | Returns `this.needPax` to indicate whether a Pax Extended Header is
|
---|
| 975 | required to properly encode the specified data.
|
---|
| 976 |
|
---|
| 977 | ### class tar.Pax
|
---|
| 978 |
|
---|
| 979 | An object representing a set of key-value pairs in an Pax extended
|
---|
| 980 | header entry.
|
---|
| 981 |
|
---|
| 982 | It has the following fields. Where the same name is used, they have
|
---|
| 983 | the same semantics as the tar.Header field of the same name.
|
---|
| 984 |
|
---|
| 985 | - `global` True if this represents a global extended header, or false
|
---|
| 986 | if it is for a single entry.
|
---|
| 987 | - `atime`
|
---|
| 988 | - `charset`
|
---|
| 989 | - `comment`
|
---|
| 990 | - `ctime`
|
---|
| 991 | - `gid`
|
---|
| 992 | - `gname`
|
---|
| 993 | - `linkpath`
|
---|
| 994 | - `mtime`
|
---|
| 995 | - `path`
|
---|
| 996 | - `size`
|
---|
| 997 | - `uid`
|
---|
| 998 | - `uname`
|
---|
| 999 | - `dev`
|
---|
| 1000 | - `ino`
|
---|
| 1001 | - `nlink`
|
---|
| 1002 |
|
---|
| 1003 | #### constructor(object, global)
|
---|
| 1004 |
|
---|
| 1005 | Set the fields set in the object. `global` is a boolean that defaults
|
---|
| 1006 | to false.
|
---|
| 1007 |
|
---|
| 1008 | #### encode()
|
---|
| 1009 |
|
---|
| 1010 | Return a Buffer containing the header and body for the Pax extended
|
---|
| 1011 | header entry, or `null` if there is nothing to encode.
|
---|
| 1012 |
|
---|
| 1013 | #### encodeBody()
|
---|
| 1014 |
|
---|
| 1015 | Return a string representing the body of the pax extended header
|
---|
| 1016 | entry.
|
---|
| 1017 |
|
---|
| 1018 | #### encodeField(fieldName)
|
---|
| 1019 |
|
---|
| 1020 | Return a string representing the key/value encoding for the specified
|
---|
| 1021 | fieldName, or `''` if the field is unset.
|
---|
| 1022 |
|
---|
| 1023 | ### tar.Pax.parse(string, extended, global)
|
---|
| 1024 |
|
---|
| 1025 | Return a new Pax object created by parsing the contents of the string
|
---|
| 1026 | provided.
|
---|
| 1027 |
|
---|
| 1028 | If the `extended` object is set, then also add the fields from that
|
---|
| 1029 | object. (This is necessary because multiple metadata entries can
|
---|
| 1030 | occur in sequence.)
|
---|
| 1031 |
|
---|
| 1032 | ### tar.types
|
---|
| 1033 |
|
---|
| 1034 | A translation table for the `type` field in tar headers.
|
---|
| 1035 |
|
---|
| 1036 | #### tar.types.name.get(code)
|
---|
| 1037 |
|
---|
| 1038 | Get the human-readable name for a given alphanumeric code.
|
---|
| 1039 |
|
---|
| 1040 | #### tar.types.code.get(name)
|
---|
| 1041 |
|
---|
| 1042 | Get the alphanumeric code for a given human-readable name.
|
---|