pax_global_header00006660000000000000000000000064152200527270014514gustar00rootroot0000000000000052 comment=be440da64e9fe80c68c755d8147328ea1cc2a9ad isaacs-node-tar-0a52f00/000077500000000000000000000000001522005272700150055ustar00rootroot00000000000000isaacs-node-tar-0a52f00/.github/000077500000000000000000000000001522005272700163455ustar00rootroot00000000000000isaacs-node-tar-0a52f00/.github/workflows/000077500000000000000000000000001522005272700204025ustar00rootroot00000000000000isaacs-node-tar-0a52f00/.github/workflows/ci.yml000066400000000000000000000017341522005272700215250ustar00rootroot00000000000000name: CI on: push: branches: ["main"] pull_request: paths: - 'src/**' - 'test/**' - '*.json' - '*.js' - '*.ts' - 'lib/**' - 'scripts/**' - '.github/workflows/ci.yml' - 'package.json' workflow_dispatch: permissions: contents: read jobs: build: strategy: matrix: node-version: [22.x, 24.x, 26.x] platform: - os: ubuntu-latest shell: bash - os: macos-latest shell: bash fail-fast: false runs-on: ${{ matrix.platform.os }} defaults: run: shell: ${{ matrix.platform.shell }} steps: - name: Checkout Repository uses: actions/checkout@v6 - name: Use Nodejs ${{ matrix.node-version }} uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} - name: Install dependencies run: npm install - name: Run Tests run: npm test -- -c -t0 isaacs-node-tar-0a52f00/.github/workflows/typedoc.yml000066400000000000000000000016461522005272700226030ustar00rootroot00000000000000name: typedoc on: push: branches: ["main"] workflow_dispatch: permissions: contents: read pages: write id-token: write concurrency: group: "pages" cancel-in-progress: true jobs: deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Use Nodejs ${{ matrix.node-version }} uses: actions/setup-node@v6 with: node-version: 20.x - name: Install dependencies run: npm install - name: Generate typedocs run: npm run typedoc - name: Setup Pages uses: actions/configure-pages@v5 - name: Upload artifact uses: actions/upload-pages-artifact@v4 with: path: './docs' - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 isaacs-node-tar-0a52f00/.gitignore000066400000000000000000000010301522005272700167670ustar00rootroot00000000000000# This file is automatically added by @npmcli/template-oss. Do not edit. # ignore everything in the root /* # keep these !**/.gitignore !/.prettierignore !/.prettierrc.json !/.taprc !/src !/.tshy !/.commitlintrc.js !/tsconfig.json !/.eslintrc.js !/.eslintrc.local.* !/.github/ !/.gitignore !/.npmrc !/.release-please-manifest.json !/bin/ !/CHANGELOG* !/CODE_OF_CONDUCT.md !/index.js !/lib/ !/LICENSE* !/map.js !/package.json !/package-lock.json !/README* !/release-please-config.json !/scripts/ !/SECURITY.md !/tap-snapshots/ !/test/ isaacs-node-tar-0a52f00/.prettierignore000066400000000000000000000003111522005272700200430ustar00rootroot00000000000000/node_modules /tsconfig.json /package-lock.json /package.json /LICENSE.md /example /.github /dist /.env /tap-snapshots /.nyc_output /coverage /benchmark /.tap /test/fixture /test/fixtures /.tshy /docs isaacs-node-tar-0a52f00/.prettierrc.json000066400000000000000000000003521522005272700201410ustar00rootroot00000000000000{ "experimentalTernaries": true, "semi": false, "printWidth": 75, "tabWidth": 2, "useTabs": false, "singleQuote": true, "jsxSingleQuote": false, "bracketSameLine": true, "arrowParens": "avoid", "endOfLine": "lf" } isaacs-node-tar-0a52f00/.taprc000066400000000000000000000001151522005272700161140ustar00rootroot00000000000000# vim: set filetype=yaml : coverage-map: "map.js" timeout: 0 typecheck: true isaacs-node-tar-0a52f00/.tshy/000077500000000000000000000000001522005272700160525ustar00rootroot00000000000000isaacs-node-tar-0a52f00/.tshy/build.json000066400000000000000000000002261522005272700200440ustar00rootroot00000000000000{ "extends": "../tsconfig.json", "compilerOptions": { "rootDir": "../src", "module": "nodenext", "moduleResolution": "nodenext" } } isaacs-node-tar-0a52f00/.tshy/commonjs.json000066400000000000000000000004301522005272700205670ustar00rootroot00000000000000{ "extends": "./build.json", "include": [ "../src/**/*.ts", "../src/**/*.cts", "../src/**/*.tsx", "../src/**/*.json" ], "exclude": [ "../src/**/*.mts", "../src/package.json" ], "compilerOptions": { "outDir": "../.tshy-build/commonjs" } } isaacs-node-tar-0a52f00/.tshy/esm.json000066400000000000000000000003741522005272700175350ustar00rootroot00000000000000{ "extends": "./build.json", "include": [ "../src/**/*.ts", "../src/**/*.mts", "../src/**/*.tsx", "../src/**/*.json" ], "exclude": [ "../src/package.json" ], "compilerOptions": { "outDir": "../.tshy-build/esm" } } isaacs-node-tar-0a52f00/CHANGELOG.md000066400000000000000000000067061522005272700166270ustar00rootroot00000000000000# Changelog ## 7.5 - Added `zstd` compression support. - Consistent TOCTOU behavior in sync t.list - Only read from ustar block if not specified in Pax - Fix sync tar.list when file size reduces while reading - Sanitize absolute linkpaths properly - Prevent writing hardlink entries to the archive ahead of their file target ## 7.4 - Deprecate `onentry` in favor of `onReadEntry` for clarity. ## 7.3 - Add `onWriteEntry` option ## 7.2 - DRY the command definitions into a single `makeCommand` method, and update the type signatures to more appropriately infer the return type from the options and arguments provided. ## 7.1 - Update minipass to v7.1.0 - Update the type definitions of `write()` and `end()` methods on `Unpack` and `Parser` classes to be compatible with the NodeJS.WritableStream type in the latest versions of `@types/node`. ## 7.0 - Drop support for node <18 - Rewrite in TypeScript, provide ESM and CommonJS hybrid interface - Add tree-shake friendly exports, like `import('tar/create')` and `import('tar/read-entry')` to get individual functions or classes. - Add `chmod` option that defaults to false, and deprecate `noChmod`. That is, reverse the default option regarding explicitly setting file system modes to match tar entry settings. - Add `processUmask` option to avoid having to call `process.umask()` when `chmod: true` (or `noChmod: false`) is set. ## 6.2 - Add support for brotli compression - Add `maxDepth` option to prevent extraction into excessively deep folders. ## 6.1 - remove dead link to benchmarks (#313) (@yetzt) - add examples/explanation of using tar.t (@isaacs) - ensure close event is emitted after stream has ended (@webark) - replace deprecated String.prototype.substr() (@CommanderRoot, @lukekarrys) ## 6.0 - Drop support for node 6 and 8 - fix symlinks and hardlinks on windows being packed with `\`-style path targets ## 5.0 - Address unpack race conditions using path reservations - Change large-numbers errors from TypeError to Error - Add `TAR_*` error codes - Raise `TAR_BAD_ARCHIVE` warning/error when there are no valid entries found in an archive - do not treat ignored entries as an invalid archive - drop support for node v4 - unpack: conditionally use a file mapping to write files on Windows - Set more portable 'mode' value in portable mode - Set `portable` gzip option in portable mode ## 4.4 - Add 'mtime' option to tar creation to force mtime - unpack: only reuse file fs entries if nlink = 1 - unpack: rename before unlinking files on Windows - Fix encoding/decoding of base-256 numbers - Use `stat` instead of `lstat` when checking CWD - Always provide a callback to fs.close() ## 4.3 - Add 'transform' unpack option ## 4.2 - Fail when zlib fails ## 4.1 - Add noMtime flag for tar creation ## 4.0 - unpack: raise error if cwd is missing or not a dir - pack: don't drop dots from dotfiles when prefixing ## 3.1 - Support `@file.tar` as an entry argument to copy entries from one tar file to another. - Add `noPax` option - `noResume` option for tar.t - win32: convert `>| All interactions in this repo are covered by the [npm Code of Conduct](https://docs.npmjs.com/policies/conduct) The npm cli team may, at its own discretion, moderate, remove, or edit any interactions such as pull requests, issues, and comments. isaacs-node-tar-0a52f00/LICENSE.md000066400000000000000000000030201522005272700164040ustar00rootroot00000000000000# Blue Oak Model License Version 1.0.0 ## Purpose This license gives everyone as much permission to work with this software as possible, while protecting contributors from liability. ## Acceptance In order to receive this license, you must agree to its rules. The rules of this license are both obligations under that agreement and conditions to your license. You must not do anything with this software that triggers a rule that you cannot or will not follow. ## Copyright Each contributor licenses you to do everything with this software that would otherwise infringe that contributor's copyright in it. ## Notices You must ensure that everyone who gets a copy of any part of this software from you, with or without changes, also gets the text of this license or a link to . ## Excuse If anyone notifies you in writing that you have not complied with [Notices](#notices), you can keep your license by taking all practical steps to comply within 30 days after the notice. If you do not do so, your license ends immediately. ## Patent Each contributor licenses you to do everything with this software that would otherwise infringe any patent claims they can license or become able to license. ## Reliability No contributor can revoke this license. ## No Liability ***As far as the law allows, this software comes as is, without any warranty or condition, and no contributor will be liable to anyone for any damages related to this software or this license, under any kind of legal claim.*** isaacs-node-tar-0a52f00/README.md000066400000000000000000001461751522005272700163020ustar00rootroot00000000000000# node-tar Fast and full-featured Tar for Node.js The API is designed to mimic the behavior of `tar(1)` on unix systems. If you are familiar with how tar works, most of this will hopefully be straightforward for you. If not, then hopefully this module can teach you useful unix skills that may come in handy someday :) ## Security Information Significant efforts have been taken to harden this library against a wide variety of filesystem based attacks, especially as it is used to unpack packages that are published by unknown agents to [the npm registry](https://npmjs.com/). A brief overview of some of the hardening that has gone into this implementation. (Note that most of these are disabled if `preservePaths: true` is set in the options.) - Paths that attempt to walk up outside of the extraction target are ignored, and a warning is raised. - `Link` and `SymbolicLink` entries are not allowed to target locations outside of the extraction folder. - Extraction is not allowed through a symbolic link that appears within the extraction target. - Absolute paths are turned into relative paths underneath the extraction target. - Character Device, Block Device, and FIFO entries are never extracted. - File and directory ownership is not mutated unless `forceChown` is set, or the extraction is run as root. - File and directory modes in the archive are ignored, unless the `chmod: true` option is set. - A path-reservation system is used to ensure that even when multiple entries are being extracted in parallel, subsequent entries with the same filename will not interfere with one another (for example, exchanging a file with a symbolic link while it is being written to). - Unicode characters in path names are fully normalized, to prevent evading these protections with unicode equivalences. It is frankly unlikely that any tar implementation in JavaScript is going to be as secure as this one, unless a similar amount of work is put into it, putting it to the test over many years of intensive use and scrutiny. You can vibe-code a tar extractor in an afternoon, but you'll regret it. > [!WARNING] > > **However**, all that being said, _care must still be taken_ > when dealing with data from unknown sources, especially when > extracting files, with this or any library, no matter how > hardened it may be. It is _your_ responsibility to use this > library safely. 1. **NEVER** extract tarball data into a folder that could be potentially controlled by an unknown actor. A clever attacker can swap out the target of an extracted file with a symbolic link to some location of their choosing, resulting in writing files outside the target folder. There is no reasonable way to harden against this category of attack, and security reports about it will be closed. [TOCTOU](https://cwe.mitre.org/data/definitions/367.html) exposure is unavoidable when creating files based on entries in an archive file. 2. If you are unpacking tarballs that may come from an unknown source, it is **highly recommended** that you use a filter function that rejects all hardlinks and symbolic links. Link files are historically the root of nearly every file extraction vulnerability. (npm filters links out of package artifacts for this reason.) 3. If you are extracting tarballs that are compressed (eg, with gzip, brotli, or zstd), then it is a very good idea to also filter out any files that are excessively large. Even if you are restricting the size of the archive file itself, an excessively large file of repetitive data can compress down very small, and extract to take up a lot of disk space. 4. **Stay up to date.** Old versions of tar are not maintained or tested for newly discovered security advisories, and should be assumed to contain every known security vulnerability, and many that are unknown. If you find a security vulnerability in node-tar, where it is not properly enforcing the intended security protections, then please report it using the GitHub Security Advisories system, where it will be triaged and corrected if possible. ## Background A "tar file" or "tarball" is an archive of file system entries (directories, files, links, etc.) The name comes from "tape archive". If you run `man tar` on almost any Unix command line, you'll learn quite a bit about what it can do, and its history. Tar has 5 main top-level commands: - `c` Create an archive - `r` Replace entries within an archive - `u` Update entries within an archive (ie, replace if they're newer) - `t` List out the contents of an archive - `x` Extract an archive to disk The other flags and options modify how this top level function works. ## High-Level API These 5 functions are the high-level API. All of them have a single-character name (for unix nerds familiar with `tar(1)`) as well as a long name (for everyone else). All the high-level functions take the following arguments, all three of which are optional and may be omitted. 1. `options` - An optional object specifying various options 2. `paths` - An array of paths to add or extract 3. `callback` - Called when the command is completed, if async. (If sync or no file specified, providing a callback throws a `TypeError`.) If the command is sync (ie, if `options.sync=true`), then the callback is not allowed, since the action will be completed immediately. If a `file` argument is specified, and the command is async, then a `Promise` is returned. In this case, if async, a callback may be provided which is called when the command is completed. If a `file` option is not specified, then a stream is returned. For `create`, this is a readable stream of the generated archive. For `list` and `extract` this is a writable stream that an archive should be written into. If a file is not specified, then a callback is not allowed, because you're already getting a stream to work with. `replace` and `update` only work on existing archives, and so require a `file` argument. Sync commands without a file argument return a stream that acts on its input immediately in the same tick. For readable streams, this means that all of the data is immediately available by calling `stream.read()`. For writable streams, it will be acted upon as soon as it is provided, but this can be at any time. ### Warnings and Errors Tar emits warnings and errors for recoverable and unrecoverable situations, respectively. In many cases, a warning only affects a single entry in an archive, or is simply informing you that it's modifying an entry to comply with the settings provided. Unrecoverable warnings will always raise an error (ie, emit `'error'` on streaming actions, throw for non-streaming sync actions, reject the returned Promise for non-streaming async operations, or call a provided callback with an `Error` as the first argument). Recoverable errors will raise an error only if `strict: true` is set in the options. Respond to (recoverable) warnings by listening to the `warn` event. Handlers receive 3 arguments: - `code` String. One of the error codes below. This may not match `data.code`, which preserves the original error code from fs and zlib. - `message` String. More details about the error. - `data` Metadata about the error. An `Error` object for errors raised by fs and zlib. All fields are attached to errors raisd by tar. Typically contains the following fields, as relevant: - `tarCode` The tar error code. - `code` Either the tar error code, or the error code set by the underlying system. - `file` The archive file being read or written. - `cwd` Working directory for creation and extraction operations. - `entry` The entry object (if it could be created) for `TAR_ENTRY_INFO`, `TAR_ENTRY_INVALID`, and `TAR_ENTRY_ERROR` warnings. - `header` The header object (if it could be created, and the entry could not be created) for `TAR_ENTRY_INFO` and `TAR_ENTRY_INVALID` warnings. - `recoverable` Boolean. If `false`, then the warning will emit an `error`, even in non-strict mode. #### Error Codes - `TAR_ENTRY_INFO` An informative error indicating that an entry is being modified, but otherwise processed normally. For example, removing `/` or `C:\` from absolute paths if `preservePaths` is not set. - `TAR_ENTRY_INVALID` An indication that a given entry is not a valid tar archive entry, and will be skipped. This occurs when: - a checksum fails, - a `linkpath` is missing for a link type, or - a `linkpath` is provided for a non-link type. If every entry in a parsed archive raises an `TAR_ENTRY_INVALID` error, then the archive is presumed to be unrecoverably broken, and `TAR_BAD_ARCHIVE` will be raised. - `TAR_ENTRY_ERROR` The entry appears to be a valid tar archive entry, but encountered an error which prevented it from being unpacked. This occurs when: - an unrecoverable fs error happens during unpacking, - an entry is trying to extract into an excessively deep location (by default, limited to 1024 subfolders), - an entry has `..` in the path and `preservePaths` is not set, or - an entry is extracting through a symbolic link, when `preservePaths` is not set. - `TAR_ENTRY_UNSUPPORTED` An indication that a given entry is a valid archive entry, but of a type that is unsupported, and so will be skipped in archive creation or extracting. - `TAR_ABORT` When parsing gzipped-encoded archives, the parser will abort the parse process raise a warning for any zlib errors encountered. Aborts are considered unrecoverable for both parsing and unpacking. - `TAR_BAD_ARCHIVE` The archive file is totally hosed. This can happen for a number of reasons, and always occurs at the end of a parse or extract: - An entry body was truncated before seeing the full number of bytes. - The archive contained only invalid entries, indicating that it is likely not an archive, or at least, not an archive this library can parse. `TAR_BAD_ARCHIVE` is considered informative for parse operations, but unrecoverable for extraction. Note that, if encountered at the end of an extraction, tar WILL still have extracted as much it could from the archive, so there may be some garbage files to clean up. Errors that occur deeper in the system (ie, either the filesystem or zlib) will have their error codes left intact, and a `tarCode` matching one of the above will be added to the warning metadata or the raised error object. Errors generated by tar will have one of the above codes set as the `error.code` field as well, but since errors originating in zlib or fs will have their original codes, it's better to read `error.tarCode` if you wish to see how tar is handling the issue. ### Examples The API mimics the `tar(1)` command line functionality, with aliases for more human-readable option and function names. The goal is that if you know how to use `tar(1)` in Unix, then you know how to use `import('tar')` in JavaScript. To replicate `tar czf my-tarball.tgz files and folders`, you'd do: ```js import { create } from 'tar' create( { gzip: , file: 'my-tarball.tgz' }, ['some', 'files', 'and', 'folders'] ).then(_ => { .. tarball has been created .. }) ``` To replicate `tar cz files and folders > my-tarball.tgz`, you'd do: ```js // if you're familiar with the tar(1) cli flags, this can be nice import * as tar from 'tar' tar.c( { // 'z' is alias for 'gzip' option z: }, ['some', 'files', 'and', 'folders'] ).pipe(fs.createWriteStream('my-tarball.tgz')) ``` To replicate `tar xf my-tarball.tgz` you'd do: ```js tar.x( // or `tar.extract` { // or `file:` f: 'my-tarball.tgz' } ).then(_=> { .. tarball has been dumped in cwd .. }) ``` To replicate `cat my-tarball.tgz | tar x -C some-dir --strip=1`: ```js fs.createReadStream('my-tarball.tgz').pipe( tar.x({ strip: 1, C: 'some-dir', // alias for cwd:'some-dir', also ok }), ) ``` To replicate `tar tf my-tarball.tgz`, do this: ```js tar.t({ file: 'my-tarball.tgz', onReadEntry: entry => { .. do whatever with it .. } }) ``` For example, to just get the list of filenames from an archive: ```js const getEntryFilenames = async tarballFilename => { const filenames = [] await tar.t({ file: tarballFilename, onReadEntry: entry => filenames.push(entry.path), }) return filenames } ``` To replicate `cat my-tarball.tgz | tar t` do: ```js fs.createReadStream('my-tarball.tgz') .pipe(tar.t()) .on('entry', entry => { .. do whatever with it .. }) ``` To do anything synchronous, add `sync: true` to the options. Note that sync functions don't take a callback and don't return a promise. When the function returns, it's already done. Sync methods without a file argument return a sync stream, which flushes immediately. But, of course, it still won't be done until you `.end()` it. ```js const getEntryFilenamesSync = tarballFilename => { const filenames = [] tar.t({ file: tarballFilename, onReadEntry: entry => filenames.push(entry.path), sync: true, }) return filenames } ``` To filter entries, add `filter: ` to the options. Tar-creating methods call the filter with `filter(path, stat)`. Tar-reading methods (including extraction) call the filter with `filter(path, entry)`. The filter is called in the `this`-context of the `Pack` or `Unpack` stream object. The arguments list to `tar t` and `tar x` specify a list of filenames to extract or list, so they're equivalent to a filter that tests if the file is in the list. For those who _aren't_ fans of tar's single-character command names: ``` tar.c === tar.create tar.r === tar.replace (appends to archive, file is required) tar.u === tar.update (appends if newer, file is required) tar.x === tar.extract tar.t === tar.list ``` Keep reading for all the command descriptions and options, as well as the low-level API that they are built on. ### tar.c(options, fileList, callback) [alias: tar.create] 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 `./`. The following options are supported: - `file` Write the tarball archive to the specified filename. If this is specified, then the callback will be fired when the file has been written, and a promise will be returned that resolves when the file is written. If a filename is not specified, then a Readable Stream will be returned which will emit the file data. [Alias: `f`] - `sync` Act synchronously. If this is set, then any provided file will be fully written after the call to `tar.c`. If this is set, and a file is not provided, then the resulting stream will already have the data ready to `read` or `emit('data')` as soon as you request it. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `strict` Treat warnings as crash-worthy errors. Default false. - `cwd` The current working directory for creating the archive. Defaults to `process.cwd()`. [Alias: `C`] - `prefix` A path portion to prefix onto the entries in the archive. - `gzip` Set to any truthy value to create a gzipped archive, or an object with settings for `zlib.Gzip()` [Alias: `z`] - `filter` 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. - `portable` 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 for other time-based operations. Additionally, `mode` is set to a "reasonable default" for most unix systems, based on a `umask` value of `0o22`. - `preservePaths` Allow absolute paths. By default, `/` is stripped from absolute paths. [Alias: `P`] - `mode` The mode to set on the created file archive - `noDirRecurse` Do not recursively archive the contents of directories. [Alias: `n`] - `follow` Set to true to pack the targets of symbolic links. Without this option, symbolic links are archived as such. [Alias: `L`, `h`] - `noPax` 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. - `noMtime` Set to true to omit writing `mtime` values for entries. Note that this prevents using other mtime-based features like `tar.update` or the `keepNewer` option with the resulting tar archive. [Alias: `m`, `no-mtime`] - `mtime` Set to a `Date` object to force a specific `mtime` for everything added to the archive. Overridden by `noMtime`. - `onWriteEntry` Called with each `WriteEntry` or `WriteEntrySync` that is created in the course of writing the archive. The following options are mostly internal, but can be modified in some advanced use cases, such as re-using caches between runs. - `linkCache` A Map object containing the device and inode value for any file whose nlink is > 1, to identify hard links. - `statCache` A Map object that caches calls `lstat`. - `readdirCache` A Map object that caches calls to `readdir`. - `jobs` A number specifying how many concurrent jobs to run. Defaults to 4. - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 16 MB. #### Using `onWriteEntry` to alter entries The `onWriteEntry` function, if provided, will get a reference to each `entry` object on its way into the archive. If any fields on this entry are changed, then these changes will be reflected in the entry that is written to the archive. The return value of the function is ignored. All that matters is the final state of the entry object. This can also be used to track the files added to an archive, for example. ```js import * as tar from 'tar' const filesAdded = [] tar.c( { sync: true, file: 'lowercase-executable.tar', onWriteEntry(entry) { // initially, it's uppercase and 0o644 console.log('adding', entry.path, entry.stat.mode.toString(8)) // make all the paths lowercase entry.path = entry.path.toLowerCase() // make the entry executable entry.stat.mode = 0o755 // in the archive, it's lowercase and 0o755 filesAdded.push([entry.path, entry.stat.mode.toString(8)]) }, }, ['./bin'], ) console.log('added', filesAdded) ``` Then, if the `./bin` directory contained `SOME-BIN`, it would show up in the archive as: ``` $ node create-lowercase-executable.js adding ./bin/SOME-BIN 644 added [[ './bin/some-bin', '755' ]] $ tar cvf lowercase-executable.tar -rwxr-xr-x 0 isaacs 20 47731 Aug 14 08:56 ./bin/some-bin ``` with a lowercase name and a mode of `0o755`. ### tar.x(options, fileList, callback) [alias: tar.extract] 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. The following options are supported: - `cwd` Extract files relative to the specified directory. Defaults to `process.cwd()`. If provided, this must exist and must be a directory. [Alias: `C`] - `file` The archive file to extract. If not specified, then a Writable stream is returned where the archive data should be written. [Alias: `f`] - `sync` Create files and directories synchronously. - `strict` Treat warnings as crash-worthy errors. Default false. - `filter` A function that gets called with `(path, entry)` for each entry being unpacked. Return `true` to unpack the entry from the archive, or `false` to skip it. - `newer` Set to true to keep the existing file on disk if it's newer than the file in the archive. [Alias: `keep-newer`, `keep-newer-files`] - `keep` Do not overwrite existing files. In particular, if a file appears more than once in an archive, later copies will not overwrite earlier copies. [Alias: `k`, `keep-existing`] - `preservePaths` Allow absolute paths, paths containing `..`, and extracting through symbolic links. By default, `/` is stripped from absolute paths, `..` paths are not extracted, and any file whose location would be modified by a symbolic link is not extracted. [Alias: `P`] - `unlink` 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. [Alias: `U`] - `strip` 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. [Alias: `strip-components`, `stripComponents`] - `preserveOwner` 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. [Alias: `p`] - `uid` 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. - `gid` 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. - `noMtime` Set to true to omit writing `mtime` value for extracted entries. [Alias: `m`, `no-mtime`] - `transform` 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.) - `onReadEntry` A function that gets called with `(entry)` for each entry that passes the filter. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `chmod` Set to true to call `fs.chmod()` to ensure that the extracted file matches the entry mode. This may necessitate a call to the deprecated and thread-unsafe `process.umask()` method to determine the default umask value, unless a `processUmask` options is also provided. Otherwise tar will extract with whatever mode is provided, and let the process `umask` apply normally. - `processUmask` Set to an explicit numeric value to avoid calling `process.umask()` when `chmod: true` is set. - `maxDepth` The maximum depth of subfolders to extract into. This defaults to 1024. Anything deeper than the limit will raise a warning and skip the entry. Set to `Infinity` to remove the limitation. - `maxDecompressionRatio` Defaults to 1000. The maximum ratio of decommpressed bytes to compressed bytes, in a compressed archive. Set to `Infinity` to allow explosive decompression. The following options are mostly internal, but can be modified in some advanced use cases, such as re-using caches between runs. - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 16 MB. - `umask` Filter the modes of entries like `process.umask()`. - `dmode` Default mode for directories - `fmode` Default mode for files - `maxMetaEntrySize` The maximum size of meta entries that is supported. Defaults to 1 MB. Note that using an asynchronous stream type with the `transform` option will cause undefined behavior in sync extractions. [MiniPass](http://npm.im/minipass)-based streams are designed for this use case. ### tar.t(options, fileList, callback) [alias: tar.list] 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. If the `file` option is _not_ provided, then returns an event emitter that emits `entry` events with `tar.ReadEntry` objects. However, they don't emit `'data'` or `'end'` events. (If you want to get actual readable entries, use the `tar.Parser` class instead.) If a `file` option _is_ provided, then the return value will be a promise that resolves when the file has been fully traversed in async mode, or `undefined` if `sync: true` is set. Thus, you _must_ specify an `onReadEntry` method in order to do anything useful with the data it parses. The following options are supported: - `file` The archive file to list. If not specified, then a Writable stream is returned where the archive data should be written. [Alias: `f`] - `sync` Read the specified file synchronously. (This has no effect when a file option isn't specified, because entries are emitted as fast as they are parsed from the stream anyway.) - `strict` Treat warnings as crash-worthy errors. Default false. - `filter` A function that gets called with `(path, entry)` for each entry being listed. Return `true` to emit the entry from the archive, or `false` to skip it. - `onReadEntry` A function that gets called with `(entry)` for each entry that passes the filter. This is important for when `file` is set, because there is no other way to do anything useful with this method. - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 16 MB. - `noResume` By default, `entry` streams are resumed immediately after the call to `onReadEntry`. Set `noResume: true` to suppress this behavior. Note that by opting into this, the stream will never complete until the entry data is consumed. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `maxDecompressionRatio` Defaults to 1000. The maximum ratio of decommpressed bytes to compressed bytes, in a compressed archive. Set to `Infinity` to allow explosive decompression. ### tar.u(options, fileList, callback) [alias: tar.update] 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 `./`. The following options are supported: - `file` Required. Write the tarball archive to the specified filename. [Alias: `f`] - `sync` Act synchronously. If this is set, then any provided file will be fully written after the call to `tar.c`. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `strict` Treat warnings as crash-worthy errors. Default false. - `cwd` The current working directory for adding entries to the archive. Defaults to `process.cwd()`. [Alias: `C`] - `prefix` A path portion to prefix onto the entries in the archive. - `gzip` Set to any truthy value to create a gzipped archive, or an object with settings for `zlib.Gzip()` [Alias: `z`] - `filter` 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. - `portable` 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 for other time-based operations. Additionally, `mode` is set to a "reasonable default" for most unix systems, based on a `umask` value of `0o22`. - `preservePaths` Allow absolute paths. By default, `/` is stripped from absolute paths. [Alias: `P`] - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 16 MB. - `noDirRecurse` Do not recursively archive the contents of directories. [Alias: `n`] - `follow` Set to true to pack the targets of symbolic links. Without this option, symbolic links are archived as such. [Alias: `L`, `h`] - `noPax` 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. - `noMtime` Set to true to omit writing `mtime` values for entries. Note that this prevents using other mtime-based features like `tar.update` or the `keepNewer` option with the resulting tar archive. [Alias: `m`, `no-mtime`] - `mtime` Set to a `Date` object to force a specific `mtime` for everything added to the archive. Overridden by `noMtime`. - `onWriteEntry` Called with each `WriteEntry` or `WriteEntrySync` that is created in the course of writing the archive. ### tar.r(options, fileList, callback) [alias: tar.replace] 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 `./`. The following options are supported: - `file` Required. Write the tarball archive to the specified filename. [Alias: `f`] - `sync` Act synchronously. If this is set, then any provided file will be fully written after the call to `tar.c`. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `strict` Treat warnings as crash-worthy errors. Default false. - `cwd` The current working directory for adding entries to the archive. Defaults to `process.cwd()`. [Alias: `C`] - `prefix` A path portion to prefix onto the entries in the archive. - `gzip` Set to any truthy value to create a gzipped archive, or an object with settings for `zlib.Gzip()` [Alias: `z`] - `filter` 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. - `portable` 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 for other time-based operations. Additionally, `mode` is set to a "reasonable default" for most unix systems, based on a `umask` value of `0o22`. - `preservePaths` Allow absolute paths. By default, `/` is stripped from absolute paths. [Alias: `P`] - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 16 MB. - `noDirRecurse` Do not recursively archive the contents of directories. [Alias: `n`] - `follow` Set to true to pack the targets of symbolic links. Without this option, symbolic links are archived as such. [Alias: `L`, `h`] - `noPax` 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. - `noMtime` Set to true to omit writing `mtime` values for entries. Note that this prevents using other mtime-based features like `tar.update` or the `keepNewer` option with the resulting tar archive. [Alias: `m`, `no-mtime`] - `mtime` Set to a `Date` object to force a specific `mtime` for everything added to the archive. Overridden by `noMtime`. - `onWriteEntry` Called with each `WriteEntry` or `WriteEntrySync` that is created in the course of writing the archive. ## Low-Level API ### class Pack A readable tar stream. Has all the standard readable stream interface stuff. `'data'` and `'end'` events, `read()` method, `pause()` and `resume()`, etc. #### constructor(options) The following options are supported: - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `strict` Treat warnings as crash-worthy errors. Default false. - `cwd` The current working directory for creating the archive. Defaults to `process.cwd()`. - `prefix` A path portion to prefix onto the entries in the archive. - `gzip` Set to any truthy value to create a gzipped archive, or an object with settings for `zlib.Gzip()` - `filter` 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. - `portable` 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 for other time-based operations. Additionally, `mode` is set to a "reasonable default" for most unix systems, based on a `umask` value of `0o22`. - `preservePaths` Allow absolute paths. By default, `/` is stripped from absolute paths. - `linkCache` A Map object containing the device and inode value for any file whose nlink is > 1, to identify hard links. - `statCache` A Map object that caches calls `lstat`. - `readdirCache` A Map object that caches calls to `readdir`. - `jobs` A number specifying how many concurrent jobs to run. Defaults to 4. - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 16 MB. - `noDirRecurse` Do not recursively archive the contents of directories. - `follow` Set to true to pack the targets of symbolic links. Without this option, symbolic links are archived as such. - `noPax` 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. - `noMtime` Set to true to omit writing `mtime` values for entries. Note that this prevents using other mtime-based features like `tar.update` or the `keepNewer` option with the resulting tar archive. - `mtime` Set to a `Date` object to force a specific `mtime` for everything added to the archive. Overridden by `noMtime`. - `onWriteEntry` Called with each `WriteEntry` or `WriteEntrySync` that is created in the course of writing the archive. #### add(path) Adds an entry to the archive. Returns the Pack stream. #### write(path) Adds an entry to the archive. Returns true if flushed. #### end() Finishes the archive. ### class PackSync Synchronous version of `Pack`. ### class Unpack A writable stream that unpacks a tar archive onto the file system. All the normal writable stream stuff is supported. `write()` and `end()` methods, `'drain'` events, etc. 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. `'close'` is emitted when it's done writing stuff to the file system. Most unpack errors will cause a `warn` event to be emitted. If the `cwd` is missing, or not a directory, then an error will be emitted. #### constructor(options) - `cwd` Extract files relative to the specified directory. Defaults to `process.cwd()`. If provided, this must exist and must be a directory. - `filter` A function that gets called with `(path, entry)` for each entry being unpacked. Return `true` to unpack the entry from the archive, or `false` to skip it. - `newer` Set to true to keep the existing file on disk if it's newer than the file in the archive. - `keep` Do not overwrite existing files. In particular, if a file appears more than once in an archive, later copies will not overwrite earlier copies. - `preservePaths` Allow absolute paths, paths containing `..`, and extracting through symbolic links. By default, `/` is stripped from absolute paths, `..` paths are not extracted, and any file whose location would be modified by a symbolic link is not extracted. - `unlink` 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. - `strip` 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. - `umask` Filter the modes of entries like `process.umask()`. - `dmode` Default mode for directories - `fmode` Default mode for files - `maxMetaEntrySize` The maximum size of meta entries that is supported. Defaults to 1 MB. - `preserveOwner` 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. - `win32` True if on a windows platform. Causes behavior where filenames containing `<|>?` chars are converted to windows-compatible values while being unpacked. - `uid` 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. - `gid` 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. - `noMtime` Set to true to omit writing `mtime` value for extracted entries. - `transform` 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.) - `strict` Treat warnings as crash-worthy errors. Default false. - `onReadEntry` A function that gets called with `(entry)` for each entry that passes the filter. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `chmod` Set to true to call `fs.chmod()` to ensure that the extracted file matches the entry mode. This may necessitate a call to the deprecated and thread-unsafe `process.umask()` method to determine the default umask value, unless a `processUmask` options is also provided. Otherwise tar will extract with whatever mode is provided, and let the process `umask` apply normally. - `processUmask` Set to an explicit numeric value to avoid calling `process.umask()` when `chmod: true` is set. - `maxDepth` The maximum depth of subfolders to extract into. This defaults to 1024. Anything deeper than the limit will raise a warning and skip the entry. Set to `Infinity` to remove the limitation. - `maxDecompressionRatio` Defaults to 1000. The maximum ratio of decommpressed bytes to compressed bytes, in a compressed archive. Set to `Infinity` to allow explosive decompression. ### class UnpackSync Synchronous version of `Unpack`. Note that using an asynchronous stream type with the `transform` option will cause undefined behavior in sync unpack streams. [MiniPass](http://npm.im/minipass)-based streams are designed for this use case. ### class tar.Parser A writable stream that parses a tar archive stream. All the standard writable stream stuff is supported. If the archive is gzipped, then tar will detect this and unzip it. Emits `'entry'` events with `tar.ReadEntry` objects, which are themselves readable streams that you can pipe wherever. Each `entry` will not emit until the one before it is flushed through, so make sure to either consume the data (with `on('data', ...)` or `.pipe(...)`) or throw it away with `.resume()` to keep the stream flowing. #### constructor(options) Returns an event emitter that emits `entry` events with `tar.ReadEntry` objects. The following options are supported: - `strict` Treat warnings as crash-worthy errors. Default false. - `filter` A function that gets called with `(path, entry)` for each entry being listed. Return `true` to emit the entry from the archive, or `false` to skip it. - `onReadEntry` A function that gets called with `(entry)` for each entry that passes the filter. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") #### abort(error) Stop all parsing activities. This is called when there are zlib errors. It also emits an unrecoverable warning with the error provided. ### class tar.ReadEntry extends [MiniPass](http://npm.im/minipass) A representation of an entry that is being read out of a tar archive. It has the following fields: - `extended` The extended metadata object provided to the constructor. - `globalExtended` The global extended metadata object provided to the constructor. - `remain` The number of bytes remaining to be written into the stream. - `blockRemain` The number of 512-byte blocks remaining to be written into the stream. - `ignore` Whether this entry should be ignored. - `meta` True if this represents metadata about the next entry, false if it represents a filesystem object. - All the fields from the header, extended header, and global extended header are added to the ReadEntry object. So it has `path`, `type`, `size`, `mode`, and so on. #### constructor(header, extended, globalExtended) Create a new ReadEntry object with the specified header, extended header, and global extended header values. ### class tar.WriteEntry extends [MiniPass](http://npm.im/minipass) A representation of an entry that is being written from the file system into a tar archive. Emits data for the Header, and for the Pax Extended Header if one is required, as well as any body data. Creating a WriteEntry for a directory does not also create WriteEntry objects for all of the directory contents. It has the following fields: - `path` The path field that will be written to the archive. By default, this is also the path from the cwd to the file system object. - `portable` 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 for other time-based operations. Additionally, `mode` is set to a "reasonable default" for most unix systems, based on a `umask` value of `0o22`. - `myuid` If supported, the uid of the user running the current process. - `myuser` The `env.USER` string if set, or `''`. Set as the entry `uname` field if the file's `uid` matches `this.myuid`. - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 1 MB. - `linkCache` A Map object containing the device and inode value for any file whose nlink is > 1, to identify hard links. - `statCache` A Map object that caches calls `lstat`. - `preservePaths` Allow absolute paths. By default, `/` is stripped from absolute paths. - `cwd` The current working directory for creating the archive. Defaults to `process.cwd()`. - `absolute` The absolute path to the entry on the filesystem. By default, this is `path.resolve(this.cwd, this.path)`, but it can be overridden explicitly. - `strict` Treat warnings as crash-worthy errors. Default false. - `win32` True if on a windows platform. Causes behavior where paths replace `\` with `/` and filenames containing the windows-compatible forms of `<|>?:` characters are converted to actual `<|>?:` characters in the archive. - `noPax` 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. - `noMtime` Set to true to omit writing `mtime` values for entries. Note that this prevents using other mtime-based features like `tar.update` or the `keepNewer` option with the resulting tar archive. #### constructor(path, options) `path` is the path of the entry as it is written in the archive. The following options are supported: - `portable` 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 for other time-based operations. Additionally, `mode` is set to a "reasonable default" for most unix systems, based on a `umask` value of `0o22`. - `maxReadSize` The maximum buffer size for `fs.read()` operations. Defaults to 1 MB. - `linkCache` A Map object containing the device and inode value for any file whose nlink is > 1, to identify hard links. - `statCache` A Map object that caches calls `lstat`. - `preservePaths` Allow absolute paths. By default, `/` is stripped from absolute paths. - `cwd` The current working directory for creating the archive. Defaults to `process.cwd()`. - `absolute` The absolute path to the entry on the filesystem. By default, this is `path.resolve(this.cwd, this.path)`, but it can be overridden explicitly. - `strict` Treat warnings as crash-worthy errors. Default false. - `win32` True if on a windows platform. Causes behavior where paths replace `\` with `/`. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `noMtime` Set to true to omit writing `mtime` values for entries. Note that this prevents using other mtime-based features like `tar.update` or the `keepNewer` option with the resulting tar archive. - `umask` Set to restrict the modes on the entries in the archive, somewhat like how umask works on file creation. Defaults to `process.umask()` on unix systems, or `0o22` on Windows. #### warn(message, data) If strict, emit an error with the provided message. Otherwise, emit a `'warn'` event with the provided message and data. ### class tar.WriteEntry.Sync Synchronous version of tar.WriteEntry ### class tar.WriteEntry.Tar A version of tar.WriteEntry that gets its data from a tar.ReadEntry instead of from the filesystem. #### constructor(readEntry, options) `readEntry` is the entry being read out of another archive. The following options are supported: - `portable` 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 for other time-based operations. Additionally, `mode` is set to a "reasonable default" for most unix systems, based on a `umask` value of `0o22`. - `preservePaths` Allow absolute paths. By default, `/` is stripped from absolute paths. - `strict` Treat warnings as crash-worthy errors. Default false. - `onwarn` A function that will get called with `(code, message, data)` for any warnings encountered. (See "Warnings and Errors") - `noMtime` Set to true to omit writing `mtime` values for entries. Note that this prevents using other mtime-based features like `tar.update` or the `keepNewer` option with the resulting tar archive. ### class tar.Header A class for reading and writing header blocks. It has the following fields: - `nullBlock` True if decoding a block which is entirely composed of `0x00` null bytes. (Useful because tar files are terminated by at least 2 null blocks.) - `cksumValid` True if the checksum in the header is valid, false otherwise. - `needPax` True if the values, as encoded, will require a Pax extended header. - `path` The path of the entry. - `mode` The 4 lowest-order octal digits of the file mode. That is, read/write/execute permissions for world, group, and owner, and the setuid, setgid, and sticky bits. - `uid` Numeric user id of the file owner - `gid` Numeric group id of the file owner - `size` Size of the file in bytes - `mtime` Modified time of the file - `cksum` The checksum of the header. This is generated by adding all the bytes of the header block, treating the checksum field itself as all ascii space characters (that is, `0x20`). - `type` The human-readable name of the type of entry this represents, or the alphanumeric key if unknown. - `typeKey` The alphanumeric key for the type of entry this header represents. - `linkpath` The target of Link and SymbolicLink entries. - `uname` Human-readable user name of the file owner - `gname` Human-readable group name of the file owner - `devmaj` The major portion of the device number. Always `0` for files, directories, and links. - `devmin` The minor portion of the device number. Always `0` for files, directories, and links. - `atime` File access time. - `ctime` File change time. #### constructor(data, [offset=0]) `data` is optional. It is either a Buffer that should be interpreted as a tar Header starting at the specified offset and continuing for 512 bytes, or a data object of keys and values to set on the header object, and eventually encode as a tar Header. #### decode(block, offset) Decode the provided buffer starting at the specified offset. Buffer length must be greater than 512 bytes. #### set(data) Set the fields in the data object. #### encode(buffer, offset) Encode the header fields into the buffer at the specified offset. Returns `this.needPax` to indicate whether a Pax Extended Header is required to properly encode the specified data. ### class tar.Pax An object representing a set of key-value pairs in an Pax extended header entry. It has the following fields. Where the same name is used, they have the same semantics as the tar.Header field of the same name. - `global` True if this represents a global extended header, or false if it is for a single entry. - `atime` - `charset` - `comment` - `ctime` - `gid` - `gname` - `linkpath` - `mtime` - `path` - `size` - `uid` - `uname` - `dev` - `ino` - `nlink` #### constructor(object, global) Set the fields set in the object. `global` is a boolean that defaults to false. #### encode() Return a Buffer containing the header and body for the Pax extended header entry, or `null` if there is nothing to encode. #### encodeBody() Return a string representing the body of the pax extended header entry. #### encodeField(fieldName) Return a string representing the key/value encoding for the specified fieldName, or `''` if the field is unset. ### tar.Pax.parse(string, extended, global) Return a new Pax object created by parsing the contents of the string provided. If the `extended` object is set, then also add the fields from that object. (This is necessary because multiple metadata entries can occur in sequence.) ### tar.types A translation table for the `type` field in tar headers. #### tar.types.name.get(code) Get the human-readable name for a given alphanumeric code. #### tar.types.code.get(name) Get the alphanumeric code for a given human-readable name. isaacs-node-tar-0a52f00/map.js000066400000000000000000000004001522005272700161120ustar00rootroot00000000000000import { basename } from 'path' const map = test => test === 'map.js' ? test : test === 'unpack.js' ? ['src/unpack.ts', 'src/mkdir.ts'] : test === 'load-all.js' ? [] : `src/${test.replace(/js$/, 'ts')}` export default test => map(basename(test)) isaacs-node-tar-0a52f00/package-lock.json000066400000000000000000005634631522005272700202420ustar00rootroot00000000000000{ "name": "tar", "version": "7.5.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tar", "version": "7.5.19", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "devDependencies": { "@types/node": "^25.9.1", "chmodr": "^2.0.2", "end-of-stream": "^1.4.3", "esbuild": "^0.28.0", "events-to-array": "^2.0.3", "mutate-fs": "^2.1.1", "nock": "^13.5.4", "oxlint": "^1.67.0", "oxlint-tsgolint": "^0.23.0", "prettier": "^3.8.3", "rimraf": "^6.1.2", "tap": "^21.7.4", "tshy": "^4.1.2", "typedoc": "^0.28.19" }, "engines": { "node": ">=18" } }, "node_modules/@alcalzone/ansi-tokenize": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.1.3.tgz", "integrity": "sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^4.0.0" }, "engines": { "node": ">=14.13.1" } }, "node_modules/@base2/pretty-print-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/@bcoe/v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" } }, "node_modules/@esbuild/aix-ppc64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", "cpu": [ "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-arm": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", "cpu": [ "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", "cpu": [ "loong64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", "cpu": [ "mips64el" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", "cpu": [ "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", "cpu": [ "riscv64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", "cpu": [ "s390x" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/netbsd-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/openharmony-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "openharmony" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", "cpu": [ "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": ">=18" } }, "node_modules/@gar/promise-retry": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.3.tgz", "integrity": "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==", "dev": true, "license": "MIT", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@gerrit0/mini-shiki": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.23.0.tgz", "integrity": "sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==", "dev": true, "license": "MIT", "dependencies": { "@shikijs/engine-oniguruma": "^3.23.0", "@shikijs/langs": "^3.23.0", "@shikijs/themes": "^3.23.0", "@shikijs/types": "^3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@isaacs/cliui": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "license": "ISC", "dependencies": { "minipass": "^7.0.4" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@isaacs/ts-node-temp-fork-for-pr-2009": { "version": "10.9.7", "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.7.tgz", "integrity": "sha512-9f0bhUr9TnwwpgUhEpr3FjxSaH/OHaARkE2F9fM0lS4nIs2GNerrvGwQz493dk0JKlTaGYVrKbq36vA/whZ34g==", "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node14": "*", "@tsconfig/node16": "*", "@tsconfig/node18": "*", "@tsconfig/node20": "*", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1" }, "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=4.2" }, "peerDependenciesMeta": { "@swc/core": { "optional": true }, "@swc/wasm": { "optional": true } } }, "node_modules/@isaacs/ts-node-temp-fork-for-pr-2009/node_modules/diff": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/@isaacs/which": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@isaacs/which/-/which-7.0.4.tgz", "integrity": "sha512-qXToWZFY9CKvWsveV3R5VHNJLQkHTIJXO9J4Xa1UgNwVCRA2LEsmvWC84MIdnezFLsjn2Q+GzbL/8yVF1/ozJw==", "dev": true, "license": "ISC", "dependencies": { "isexe": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@istanbuljs/schema": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@npmcli/agent": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.2.tgz", "integrity": "sha512-EUEuWAxnL07Sp5/iC/1X6Xj+XThUvnbei9zfRWZdEXa7lss9RTHMhAHBeg+MZ5To9s/gGaSI+UwZTPdYMvKSeg==", "dev": true, "license": "ISC", "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/fs": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", "dev": true, "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/git": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", "dev": true, "license": "ISC", "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/promise-spawn": "^9.0.0", "ini": "^6.0.0", "lru-cache": "^11.2.1", "npm-pick-manifest": "^11.0.1", "proc-log": "^6.0.0", "semver": "^7.3.5", "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/installed-package-contents": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", "dev": true, "license": "ISC", "dependencies": { "npm-bundled": "^5.0.0", "npm-normalize-package-bin": "^5.0.0" }, "bin": { "installed-package-contents": "bin/index.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/node-gyp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", "dev": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/package-json": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/git": "^7.0.0", "glob": "^13.0.0", "hosted-git-info": "^9.0.0", "json-parse-even-better-errors": "^5.0.0", "proc-log": "^6.0.0", "semver": "^7.5.3", "spdx-expression-parse": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/promise-spawn": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", "dev": true, "license": "ISC", "dependencies": { "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/redact": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", "dev": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@npmcli/run-script": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^5.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "node-gyp": "^12.1.0", "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@oxlint-tsgolint/darwin-arm64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-0.23.0.tgz", "integrity": "sha512-gOs9PVr2wEg4ox9z0aJo+RKhhImW86YL5N6yav8BK/rgPsIrwN/igSZ+pbRr723NFvUNKde9fgMhRA6JrXAOZw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@oxlint-tsgolint/darwin-x64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-0.23.0.tgz", "integrity": "sha512-kjJ8B+7n4tB9VJdxS5A9GdJt6/bYpzbu4lXp2uO1S3sRmCB5gDEABlGoiePNApRWaW+xqL4b4xgiE727jSLhuA==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@oxlint-tsgolint/linux-arm64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-0.23.0.tgz", "integrity": "sha512-6dCZuKNu135seMXilkRk9SpCx6i1XgmiipYGalLij5WVRX6ZYS8c4xI7preN/zv9fCXhsQclTIMDu2Y/cytTjw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@oxlint-tsgolint/linux-x64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-0.23.0.tgz", "integrity": "sha512-3bdilnyA7kmSTjK27rvjIjSxL5SIg3wt7vwNiRkouWB83ytssyKnuGvxSYJxgMEmFpSutzaBzcCUM2jDtPGcgA==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@oxlint-tsgolint/win32-arm64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-0.23.0.tgz", "integrity": "sha512-j+OEp44SVYiQ+ZD+uttsX7u6L9SvmbbQ77SO1pSFCcJlsVMeCk8qZsjhKfGKuT/jIA+ipOJMVs/+pqUfObBWNw==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@oxlint-tsgolint/win32-x64": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-0.23.0.tgz", "integrity": "sha512-5MyjFuqf+g8OUPJBSGWHJtmoWnzFJYyOg4To9WMQshZYEWig/vtu7JtJ03VWnzHv9LJkAUeApY0gVCOywFR/iQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@oxlint/binding-android-arm-eabi": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.67.0.tgz", "integrity": "sha512-VrSi571rDv1N8HaEDM+DEX8nmT0y9jJo8tzzW13vsOWTx59xQczCIJx68n2zWOXRT5YKZsOZXp4qkHN/10x4mw==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-android-arm64": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.67.0.tgz", "integrity": "sha512-l6+NdYxMoRohix5r5bbigW16LPicceCwGcQ6LKKuE1kUdjgFfQolJjrJsQYPFetIs78Gxj/G/f5TEGoTCwj9nQ==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-darwin-arm64": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.67.0.tgz", "integrity": "sha512-jOzXxS1AxFxhImLIRbtGIMrEwaXcgMw3gR57WB1cRk8ai+vpr6726kxXqVvlNsrXtJ/FrmOm8RxlC0m8SW24Qg==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-darwin-x64": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.67.0.tgz", "integrity": "sha512-3DFAVY94OqjIZHXIPz37yGRSWwOFTAqChQ64/M69GYLawzP0KiwdhDNfqdKKYT0bTR/DNxmMnQsj3ns+8+X/Lg==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-freebsd-x64": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.67.0.tgz", "integrity": "sha512-e4dDKZuLu8TR9DEBssWSDahlPgZBwojTTHZUvnjBRJfJJbpxYCjfjKfi0Z1+CSLMiJBwI2yCDtRM1XJQaARjmg==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-arm-gnueabihf": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.67.0.tgz", "integrity": "sha512-BKytFdcQzbITV3xlnzDUDTEDtbUMCCiC4EaNTDZ4FyT8gdNvBC4gfiLucXp/sQl0XU3p7syTlorUWVVVBZab2g==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-arm-musleabihf": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.67.0.tgz", "integrity": "sha512-XYAv0esBDX7BpTzRDjVX2Vdj+zndd8ll2dFQiaeQ6zTZr7A8GRDTN7fH3FP3jU+O0vCDx85oH/EtG7BzPgAXuw==", "cpu": [ "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-arm64-gnu": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.67.0.tgz", "integrity": "sha512-zizRMjA0i6u/2B0evgda04iycu+MoNuf1pBy6Eh+1CjC5wMEG7qN5zdDKTCvFc0KSYSDM9QTG3gjZHirgtQuKg==", "cpu": [ "arm64" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-arm64-musl": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.67.0.tgz", "integrity": "sha512-zB/Tf6sUjmmvvbva9Gj3JTJ8rJ9t4I8/U0o6vSRtd0DRIsIuyegBwJAzhSUFQHdMijIRJkW0exs/yBhpw2S20w==", "cpu": [ "arm64" ], "dev": true, "libc": [ "musl" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-ppc64-gnu": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.67.0.tgz", "integrity": "sha512-kgU40Gt74CK0TCsF51KZymkIwN9U0BajKsMijB52zPqOeZU9NAHkA/NSQkZDHEaCakx42DxhXkODiAqf2b4Gug==", "cpu": [ "ppc64" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-riscv64-gnu": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.67.0.tgz", "integrity": "sha512-tOYhkk/iaG9aD3FvGpBFd1Lrw0x0RaVoJBxjUkfNzS50rC5NS5BteNCwgr8A2zCdADrIIoze6D7u6U5Ic++/iQ==", "cpu": [ "riscv64" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-riscv64-musl": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.67.0.tgz", "integrity": "sha512-sEtywrPb+0b+tHYl1SDCrw903fiC4eyKoNqzP3v+f2JT3Xcv4NEYG+P8rj+eEnX7IWhqV/xj8/JmcmVj21CXaA==", "cpu": [ "riscv64" ], "dev": true, "libc": [ "musl" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-s390x-gnu": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.67.0.tgz", "integrity": "sha512-BvR8Moa0zCLxroOx4vZaZN9nUfwAUpSTwjZdxZyKy4bv3PrzrXrxKR/ZQ0L9wNSvlPhnMJeZfa3q5w6ZCTuN6Q==", "cpu": [ "s390x" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-x64-gnu": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.67.0.tgz", "integrity": "sha512-mm2cxM6fksOpq6l0uFws8BUGKAR4dNa/cZCn37Npq7PFbhD5HDJqWfnoIvTaeRKMy5XdS2tO0MA0qbHDrnXAAA==", "cpu": [ "x64" ], "dev": true, "libc": [ "glibc" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-linux-x64-musl": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.67.0.tgz", "integrity": "sha512-WmbMuLapKyDlobMkXAaAL0Y+Uczh4LETfIfQsUpbId4Ip8Ai82/jqeYTOoUCkuuhBFapgqP253+d83tLKOksJg==", "cpu": [ "x64" ], "dev": true, "libc": [ "musl" ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-openharmony-arm64": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.67.0.tgz", "integrity": "sha512-9g/PqxYJelzzTAOR5Y+RiRqdeydhEuXv2KxNeFcAKQ7UsvnWSY1OP4MsuPMbTO2Pf70tz7mFhl1j13H3fyh+8g==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "openharmony" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-win32-arm64-msvc": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.67.0.tgz", "integrity": "sha512-2VhwE6Gatb0vJGnN0TBuQMbKCOiZlSQ/zJvVWYLK4a9d4iDiJOen/yVQkGpmsJ90MuH66fzi0kEKI0jRQMDxGA==", "cpu": [ "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-win32-ia32-msvc": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.67.0.tgz", "integrity": "sha512-EQ3VExXfeM1InbE5+JjufhZZTWy+kHUwgt3yZR7gQ47Je/mE0WspQPan0OJznh493L5anM210YNJtH1PXjTSFg==", "cpu": [ "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxlint/binding-win32-x64-msvc": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.67.0.tgz", "integrity": "sha512-bw24y+/1MHS4QDkons3YyHkPT9uCMoLHHgQhb+mb8NOjTYwub1CZ+K9Ngr8aO5DMrDrkqHwTzlTwFP2vS8Y/ZQ==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, "node_modules/@shikijs/engine-oniguruma": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.23.0" } }, "node_modules/@shikijs/themes": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", "dev": true, "license": "MIT", "dependencies": { "@shikijs/types": "3.23.0" } }, "node_modules/@shikijs/types": { "version": "3.23.0", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", "dev": true, "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "node_modules/@shikijs/vscode-textmate": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "dev": true, "license": "MIT" }, "node_modules/@sigstore/bundle": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", "dev": true, "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/core": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.2.1.tgz", "integrity": "sha512-qRsxPnCrbC/puegGxKuynfnxgLiHqWStrSjxkoB4YKqq3Z3s4cyZyj42ZdWFAEblNP65C+rBH8EuREHIXoi83g==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/protobuf-specs": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.1.tgz", "integrity": "sha512-/ScWUhhoFasJsSRGTVBwId1loQjjnjAfE4djL6ZhrXRpNCmPTnUKF5Jokd58ILseOMjzET3UrMOtJPS9sYeI0g==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/sign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.1.tgz", "integrity": "sha512-Hf4xglukg0XXQ2RiD5vSoLjdPe8OBUPA8XeVjUObheuDcWdYWrnH/BNmxZCzkAy68MzmNCxXLeurJvs6hcP2OQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@gar/promise-retry": "^1.0.2", "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.2.0", "@sigstore/protobuf-specs": "^0.5.0", "make-fetch-happen": "^15.0.4", "proc-log": "^6.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/tuf": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.2.tgz", "integrity": "sha512-TCAzTy0xzdP79EnxSjq9KQ3eaR7+FmudLC6eRKknVKZbV7ZNlGLClAAQb/HMNJ5n2OBNk2GT1tEmU0xuPr+SLQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.5.0", "tuf-js": "^4.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@sigstore/verify": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.1.tgz", "integrity": "sha512-qv7+G3J2cc6wwFj3yKvXOamzqhMwSk1ogPGmhpS8iXllcPrJaIIBA+4HbttlHVu1pqWTdmaCH/WE7UOC51kdoA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.2.1", "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@tapjs/after": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/@tapjs/after/-/after-3.3.10.tgz", "integrity": "sha512-zAeZAUZ9Su5PgTvczJLzlbUObpAMSFqnd+mIVp1TpgVn6Hc/elPEzZ9oe1hWdz8bInKdisdcx0LK0sv2qJO/dQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "is-actual-promise": "^1.0.1" }, "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/after-each": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/after-each/-/after-each-4.3.10.tgz", "integrity": "sha512-KxcIPOOQ9NtH84kiKfT1bFvRH5b3mJxjv7YP4f5hDxMp5Vqw2BzRW/Rq1StpXKCa+simwEUAu+8wINHXhRSOCQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "function-loop": "^4.0.0" }, "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/asserts": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/asserts/-/asserts-4.3.10.tgz", "integrity": "sha512-3MkErdpu7U6AdFzHVChOu0oaN+1ZmbPXOhpangZEdtMtSxYVV9H2Nxc8b4VDCImOgwexBs8LBrOOz58/x3JmUg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/stack": "4.3.3", "is-actual-promise": "^1.0.1", "tcompare": "9.3.2", "trivial-deferred": "^2.0.0" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/before": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/before/-/before-4.3.10.tgz", "integrity": "sha512-PEdVsfd8kmihyhgTN2YAAysdw1ZVFszQEClc66dyxN+0OSh9KvVxHFWITEj6JfMPi64ciiS+eyk7SKHfdRp08Q==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "is-actual-promise": "^1.0.1" }, "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/before-each": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/before-each/-/before-each-4.3.10.tgz", "integrity": "sha512-ND90VdYmN4jURtcNXC+BuH+hXr4tFecXHrJq8yM6/ns6Qa4jsBvkQdUv4Ct19rqOAzGidie41ro3Kq0V/KTonw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "function-loop": "^4.0.0" }, "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/chdir": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/@tapjs/chdir/-/chdir-3.3.10.tgz", "integrity": "sha512-taCFaRSlIZzs9b0HYGstsukl/mn5In6XBoaX3XssIivGMR0fPzjb3CKB7fA+tYUYTn+BZ14OJxwWb2FGx9sOGA==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/config": { "version": "5.6.4", "resolved": "https://registry.npmjs.org/@tapjs/config/-/config-5.6.4.tgz", "integrity": "sha512-mLUpuW4rtPYoLXGBxd8SoUQRVvNmudL+8FlZXV2N1pVPjEt9xDZNtqslDGcueVYMzT8nM5xZlSOeCJL0WUf5mg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/core": "4.5.8", "@tapjs/test": "4.4.8", "chalk": "^5.6.2", "jackspeak": "^4.2.3", "polite-json": "^5.0.0", "tap-yaml": "4.4.2", "walk-up-path": "^4.0.0" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8", "@tapjs/test": "4.4.8" } }, "node_modules/@tapjs/core": { "version": "4.5.8", "resolved": "https://registry.npmjs.org/@tapjs/core/-/core-4.5.8.tgz", "integrity": "sha512-A6RTyqbkpYAZoJkmg3T8mgaHe6hx0ROjomfAGkjjRcvASInzN0dCG0Ynu1rP2YWGGSFGXV8UqWUMIVGBrtQTqw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/processinfo": "^3.1.12", "@tapjs/stack": "4.3.3", "@tapjs/test": "4.4.8", "async-hook-domain": "^4.0.1", "diff": "^8.0.2", "is-actual-promise": "^1.0.1", "minipass": "^7.0.4", "signal-exit": "4.1", "tap-parser": "18.3.4", "tap-yaml": "4.4.2", "tcompare": "9.3.2", "trivial-deferred": "^2.0.0" }, "engines": { "node": "20 || >=22" } }, "node_modules/@tapjs/error-serdes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@tapjs/error-serdes/-/error-serdes-4.3.2.tgz", "integrity": "sha512-NNJTvozk0rY4Vhf94SECEYSO38/eQvbZvZSrmzrmD2cj5YYx7l+7qQC0fcgYpIzwlA31kciesbhnV8rINiKejg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "minipass": "^7.0.4" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@tapjs/filter": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/filter/-/filter-4.3.10.tgz", "integrity": "sha512-89tnzQDXrsKGxKozQ4IzX8XwqaBoINnapky8YFjmiYBEFXo3kYZJtr3m/ppEaDkzgJyb3kUFyF7ZqJQjlbg2CQ==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/fixture": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/fixture/-/fixture-4.3.10.tgz", "integrity": "sha512-5DelAGzyrOci4Axaqo846+53EANoTgyPXAu2eO8qGNN/RSQeerWpH0x6H/vd3s0QevusWTw1X+KzGzx7pyusgg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "mkdirp": "^3.0.0", "rimraf": "^6.0.0" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/intercept": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/intercept/-/intercept-4.3.10.tgz", "integrity": "sha512-99uzsc6VRpsUbbwsuWv9HjMF2QAce+daKbCrKg8Z8JvZ5Mg1bBR9PNXjG12NnZjljlTA3k+aJ+bs8umdu6kEUg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/after": "3.3.10", "@tapjs/stack": "4.3.3" }, "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/mock": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/@tapjs/mock/-/mock-4.4.8.tgz", "integrity": "sha512-MRxOLJYGKQ0dyONymPZS7i7Z/re5vz+OO/Ik44lUGx82VWZ2J3I1ldquEKGm7aq4RGIjf666jgHa9wrgUmhJiA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/after": "3.3.10", "@tapjs/stack": "4.3.3", "resolve-import": "^2.4.0", "walk-up-path": "^4.0.0" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/node-serialize": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/node-serialize/-/node-serialize-4.3.10.tgz", "integrity": "sha512-obAwYrhwqMR1szqctPFF3bpkw/1jBXU2A7F2a8MLirII3+/VcyR4cEb8nSCUSCjNvzPHX1vhmQ8lUADB0+1Xxg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/error-serdes": "4.3.2", "@tapjs/stack": "4.3.3", "tap-parser": "18.3.4" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/processinfo": { "version": "3.1.12", "resolved": "https://registry.npmjs.org/@tapjs/processinfo/-/processinfo-3.1.12.tgz", "integrity": "sha512-ZkYxCTEDL2ZEvvPHyZK1kvqm1t5mjRrwaGKRGFAhKh/qqaSSklk7fasqpX6fE4XLYpGf4J01C/sMztz+DkY0dg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "node-options-to-argv": "^1.0.0", "pirates": "^4.0.5", "process-on-spawn": "^1.0.0", "signal-exit": "^4.0.2", "uuid": "^14.0.0" }, "engines": { "node": ">=16.17" } }, "node_modules/@tapjs/reporter": { "version": "4.4.10", "resolved": "https://registry.npmjs.org/@tapjs/reporter/-/reporter-4.4.10.tgz", "integrity": "sha512-E3Xtk5e3k76woEOvAUayfXLZUN+u2rErwBI0RXHpAUyx97cH4rFdtOgNU6spFJD4w4TDhuJrnoCsEpHC9P7sGA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/config": "5.6.4", "@tapjs/stack": "4.3.3", "chalk": "^5.6.2", "ink": "^5.2.1", "minipass": "^7.0.4", "ms": "^2.1.3", "patch-console": "^2.0.0", "prismjs-terminal": "^1.2.3", "react": "^18.2.0", "string-length": "^6.0.0", "tap-parser": "18.3.4", "tap-yaml": "4.4.2", "tcompare": "9.3.2" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/run": { "version": "4.5.8", "resolved": "https://registry.npmjs.org/@tapjs/run/-/run-4.5.8.tgz", "integrity": "sha512-CZFa9qBEcMjZIbDX12rbuGFGQ3Ct7N/Bn7Lk3/kQWe9tR/l05oFvp7zn/2YyjkRvZv2a5YxvhHZ7Hv3Mk5tr0w==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/which": "^7.0.4", "@tapjs/after": "3.3.10", "@tapjs/before": "4.3.10", "@tapjs/config": "5.6.4", "@tapjs/processinfo": "^3.1.12", "@tapjs/reporter": "4.4.10", "@tapjs/spawn": "4.3.10", "@tapjs/stdin": "4.3.10", "@tapjs/test": "4.4.8", "c8": "^10.1.3", "chalk": "^5.6.2", "chokidar": "^4.0.2", "foreground-child": "^4.0.0", "glob": "^13.0.2", "minipass": "^7.0.4", "mkdirp": "^3.0.1", "node-options-to-argv": "^1.0.0", "opener": "^1.5.2", "pacote": "^21.0.4", "path-scurry": "^2.0.0", "resolve-import": "^2.4.0", "rimraf": "^6.0.0", "semver": "^7.7.2", "signal-exit": "^4.1.0", "tap-parser": "18.3.4", "tap-yaml": "4.4.2", "tcompare": "9.3.2", "trivial-deferred": "^2.0.0" }, "bin": { "tap-run": "dist/esm/index.js" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/snapshot": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/snapshot/-/snapshot-4.3.10.tgz", "integrity": "sha512-N08scJXaqX5WG6lWgw2bieVprcavSO+MAfnvCkP/G5wPOFgvzgbMh1/EFRpJvIlvwCXmdvqsU79Ka5fjkkVtLA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "is-actual-promise": "^1.0.1", "tcompare": "9.3.2", "trivial-deferred": "^2.0.0" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/spawn": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/spawn/-/spawn-4.3.10.tgz", "integrity": "sha512-xXQJ5H7xNYwYUcho6c9ErBuQLTQ2KFjEkn5fuMs/1IKKqf8JJ9zZQlPzNhfytendw6Bv14PxS9kjVrvvozbnSA==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/stack": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@tapjs/stack/-/stack-4.3.3.tgz", "integrity": "sha512-7T64b+OIyU0WitBzu8ksfwt+EvtSrh6aHYhQD0lImrDqxw2Jdwvd43F6sEFXiAA+sO/d0ERUn+OJW3zYNpygTg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@tapjs/stdin": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/stdin/-/stdin-4.3.10.tgz", "integrity": "sha512-vip3JDKW6BumPL9LTE25pMiw4sbsNHMvhSUK4T4SfEbZ/7mmRudtSMrozSiqUzcQKNyNR9A8bQM2pOe8uWwXmQ==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/test": { "version": "4.4.8", "resolved": "https://registry.npmjs.org/@tapjs/test/-/test-4.4.8.tgz", "integrity": "sha512-h9VUaICX+bo3KBHCf5Ky6buo3OaGS+HrUghjMcXB//m24MKfKBd00EOWznhIqwmppDWoapVJ0BZuL6KnyKPGjg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.7", "@tapjs/after": "3.3.10", "@tapjs/after-each": "4.3.10", "@tapjs/asserts": "4.3.10", "@tapjs/before": "4.3.10", "@tapjs/before-each": "4.3.10", "@tapjs/chdir": "3.3.10", "@tapjs/filter": "4.3.10", "@tapjs/fixture": "4.3.10", "@tapjs/intercept": "4.3.10", "@tapjs/mock": "4.4.8", "@tapjs/node-serialize": "4.3.10", "@tapjs/snapshot": "4.3.10", "@tapjs/spawn": "4.3.10", "@tapjs/stdin": "4.3.10", "@tapjs/typescript": "3.5.10", "@tapjs/worker": "4.3.10", "glob": "^13.0.2", "jackspeak": "^4.2.3", "mkdirp": "^3.0.0", "package-json-from-dist": "^1.0.0", "resolve-import": "^2.4.0", "rimraf": "^6.0.0", "sync-content": "^2.0.4", "tap-parser": "18.3.4", "tshy": "^3.3.2", "typescript": "5.9", "walk-up-path": "^4.0.0" }, "bin": { "generate-tap-test-class": "dist/esm/build.mjs" }, "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/test/node_modules/tshy": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/tshy/-/tshy-3.3.2.tgz", "integrity": "sha512-vOIXkqMtBWNjKUR/c99+6N50LhWdnKG1xE3+5wf8IPdzxx2lcIFPvbGgFdBBgoTMbdNb8mz06MUm7hY+TFnJcw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@typescript/native-preview": "^7.0.0-dev.20260218.1", "chalk": "^5.6.2", "chokidar": "^4.0.3", "foreground-child": "^4.0.0", "jsonc-simple-parser": "^3.0.0", "minimatch": "^10.0.3", "mkdirp": "^3.0.1", "polite-json": "^5.0.0", "resolve-import": "^2.4.0", "rimraf": "^6.1.2", "sync-content": "^2.0.3", "typescript": "^5.9.3", "walk-up-path": "^4.0.0" }, "bin": { "tshy": "dist/esm/bin-min.mjs" }, "engines": { "node": "20 || >=22" } }, "node_modules/@tapjs/test/node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=14.17" } }, "node_modules/@tapjs/typescript": { "version": "3.5.10", "resolved": "https://registry.npmjs.org/@tapjs/typescript/-/typescript-3.5.10.tgz", "integrity": "sha512-Z6abXH2P+WSXTWXCtqc6ly3SzwTwFSFsUlLCmOGIiaVvVluABK5/Ylz4HkKJw+2yWLZN0pVrx+inpt3Hjjm2oQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.7" }, "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tapjs/worker": { "version": "4.3.10", "resolved": "https://registry.npmjs.org/@tapjs/worker/-/worker-4.3.10.tgz", "integrity": "sha512-rp3n35xbO34xo/hSrWOs2Dsb2nxDrSdVzGvJEa7/KCA+X59+Vjb/lS8W6lSDLPtgH5LVNMxyJ1URG71K1+b33Q==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" }, "peerDependencies": { "@tapjs/core": "4.5.8" } }, "node_modules/@tsconfig/node14": { "version": "14.1.8", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-14.1.8.tgz", "integrity": "sha512-SjGT+qPvh8Uhc849yNMD0ZIPr69AyB7Z46nMqhrI3gCVocd6mhI0jP4YE4onO/ufpmengRfTxNMpdpKEp2xRIg==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "16.1.8", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-16.1.8.tgz", "integrity": "sha512-T/CfdwFry660WjZor56z0F3pxeCllt8KOxWcHFW6ZEuULKUObTDEMdgtctyuJPxwqyWDsvHRfxHaJ4FIICyoqQ==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node18": { "version": "18.2.6", "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.6.tgz", "integrity": "sha512-eAWQzAjPj18tKnDzmWstz4OyWewLUNBm9tdoN9LayzoboRktYx3Enk1ZXPmThj55L7c4VWYq/Bzq0A51znZfhw==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node20": { "version": "20.1.9", "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.9.tgz", "integrity": "sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==", "dev": true, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, "license": "MIT", "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", "dev": true, "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^10.1.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "25.9.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", "dev": true, "license": "MIT", "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, "license": "MIT" }, "node_modules/@typescript/native-preview": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview/-/native-preview-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-piqkDwikVeizCFqA1lcwI5F4wOAtBdxuliWe77ApBNRyBPPvfCJB+u/HYi9/8t5nd0sWvFs6/qt/AzJ1CCoykQ==", "dev": true, "license": "Apache-2.0", "bin": { "tsgo": "bin/tsgo.js" }, "engines": { "node": ">=16.20.0" }, "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260527.2", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260527.2", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260527.2", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260527.2", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260527.2", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260527.2", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260527.2" } }, "node_modules/@typescript/native-preview-darwin-arm64": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-3LqSu4DlxkEfeC/Z/29QMCJn5jjkDtXI7LYuxfmjdmAatS6umDKqm8J17fnP/7fyrZUMBTIYRwSDpChGV3G1ew==", "cpu": [ "arm64" ], "dev": true, "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { "node": ">=16.20.0" } }, "node_modules/@typescript/native-preview-darwin-x64": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-H4+sxE9qaBbLF83wMdWE0FsgfK0Pom+/O+/oxqyGzhVkDJlNt3vfpgQZMit48/Gm44AacGfBggJ9Dhbi3aeSFw==", "cpu": [ "x64" ], "dev": true, "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { "node": ">=16.20.0" } }, "node_modules/@typescript/native-preview-linux-arm": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-6I9Cv9ozwfS9zB9vRQDPIYseLX3artEO9jl3yVgLj4ishwlSF4cWAbIsjl5IztPaEgHv8coej/6tX1D0uaBzXg==", "cpu": [ "arm" ], "dev": true, "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">=16.20.0" } }, "node_modules/@typescript/native-preview-linux-arm64": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-BGUDMjC2Z3TTdZRkGGwhBLelkP5UYgO2rbep8aF4dS3fu7T5lFPPrnfS6EgqJgie+cF5Fsev7xEq8wWyBDM+lg==", "cpu": [ "arm64" ], "dev": true, "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">=16.20.0" } }, "node_modules/@typescript/native-preview-linux-x64": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-vpazOu+ozlxBo8U57YJMzsOPuxAV8H7fu36KJ8ea8At/D8pdGmOAy5TuB+9OBQV9JDe0OXJMy2kmbhOpmkTAmA==", "cpu": [ "x64" ], "dev": true, "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { "node": ">=16.20.0" } }, "node_modules/@typescript/native-preview-win32-arm64": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-DBFnFE3V6AITkPO1K1VxXf3yEZKjU2FwtXlNwRqhzDu0rrL2SsJHOSrBDX+OacTxQFzZMxFcpiuhV8jHZALPEg==", "cpu": [ "arm64" ], "dev": true, "license": "Apache-2.0", "optional": true, "os": [ "win32" ], "engines": { "node": ">=16.20.0" } }, "node_modules/@typescript/native-preview-win32-x64": { "version": "7.0.0-dev.20260527.2", "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20260527.2.tgz", "integrity": "sha512-1tBlErMvQgcMqqYwsx4tytupcjCJcOUXD3vBn1Wb/kAvus1FzWQAFE0fcKBvLfcqLQfTiiEwKKEtbLjGmakqqg==", "cpu": [ "x64" ], "dev": true, "license": "Apache-2.0", "optional": true, "os": [ "win32" ], "engines": { "node": ">=16.20.0" } }, "node_modules/abbrev": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", "dev": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-walk": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/ansi-escapes": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { "environment": "^1.0.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/async-hook-domain": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-4.0.1.tgz", "integrity": "sha512-bSktexGodAjfHWIrSrrqxqWzf1hWBZBpmPNZv+TYUMyWa2eoefFc6q6H1+KtdHYSz35lrhWdmXt/XK9wNEZvww==", "dev": true, "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/auto-bind": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { "node": "18 || 20 || >=22" } }, "node_modules/brace-expansion": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { "node": "18 || 20 || >=22" } }, "node_modules/c8": { "version": "10.1.3", "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", "dev": true, "license": "ISC", "dependencies": { "@bcoe/v8-coverage": "^1.0.1", "@istanbuljs/schema": "^0.1.3", "find-up": "^5.0.0", "foreground-child": "^3.1.1", "istanbul-lib-coverage": "^3.2.0", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.1.6", "test-exclude": "^7.0.1", "v8-to-istanbul": "^9.0.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1" }, "bin": { "c8": "bin/c8.js" }, "engines": { "node": ">=18" }, "peerDependencies": { "monocart-coverage-reports": "^2" }, "peerDependenciesMeta": { "monocart-coverage-reports": { "optional": true } } }, "node_modules/c8/node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache": { "version": "20.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.4.tgz", "integrity": "sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", "glob": "^13.0.0", "lru-cache": "^11.1.0", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^13.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/chalk": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chmodr": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/chmodr/-/chmodr-2.0.2.tgz", "integrity": "sha512-LTdYP5BGT+a0Gca7XDJDr6/jUZHW33hBd4hqds8dX6ALH20xFNaa6yqNUTKR9grIw35RzxTsgnWaR5lQrq7a1Q==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, "engines": { "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, "node_modules/cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/cliui/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/code-excerpt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", "dev": true, "license": "MIT", "dependencies": { "convert-to-spaces": "^2.0.1" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/convert-to-spaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, "node_modules/cross-spawn/node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/diff": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/environment": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/es-toolkit": { "version": "1.47.0", "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.47.0.tgz", "integrity": "sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==", "dev": true, "license": "MIT", "workspaces": [ "docs", "benchmarks" ] }, "node_modules/esbuild": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { "node": ">=18" }, "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" } }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/events-to-array": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-2.0.3.tgz", "integrity": "sha512-f/qE2gImHRa4Cp2y1stEOSgw8wTFyUdVJX7G//bMwbaV9JqISFxg99NbmVQeP7YLnDUZ2un851jlaDrlpmGehQ==", "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/exponential-backoff": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, "license": "Apache-2.0" }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" }, "peerDependencies": { "picomatch": "^3 || ^4" }, "peerDependenciesMeta": { "picomatch": { "optional": true } } }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/foreground-child": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-4.0.3.tgz", "integrity": "sha512-yeXZaNbCBGaT9giTpLPBdtedzjwhlJBUoL/R4BVQU5mn0TQXOHwVIl1Q2DMuBIdNno4ktA1abZ7dQFVxD6uHxw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "signal-exit": "^4.0.1" }, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "license": "MIT" }, "node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/function-loop": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-4.0.0.tgz", "integrity": "sha512-f34iQBedYF3XcI93uewZZOnyscDragxgTK/eTvVB74k3fCD0ZorOi5BV9GS4M8rz/JoNi0Kl3qX5Y9MH3S/CLQ==", "dev": true, "license": "ISC" }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-east-asian-width": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" }, "engines": { "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hosted-git-info": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz", "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==", "dev": true, "license": "ISC", "dependencies": { "lru-cache": "^11.1.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.2", "debug": "4" }, "engines": { "node": ">= 14" } }, "node_modules/iconv-lite": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, "node_modules/ignore-walk": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "dev": true, "license": "ISC", "dependencies": { "minimatch": "^10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/indent-string": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ini": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "dev": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/ink": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/ink/-/ink-5.2.1.tgz", "integrity": "sha512-BqcUyWrG9zq5HIwW6JcfFHsIYebJkWWb4fczNah1goUO0vv5vneIlfwuS85twyJ5hYR/y18FlAYUxrO9ChIWVg==", "dev": true, "license": "MIT", "dependencies": { "@alcalzone/ansi-tokenize": "^0.1.3", "ansi-escapes": "^7.0.0", "ansi-styles": "^6.2.1", "auto-bind": "^5.0.1", "chalk": "^5.3.0", "cli-boxes": "^3.0.0", "cli-cursor": "^4.0.0", "cli-truncate": "^4.0.0", "code-excerpt": "^4.0.0", "es-toolkit": "^1.22.0", "indent-string": "^5.0.0", "is-in-ci": "^1.0.0", "patch-console": "^2.0.0", "react-reconciler": "^0.29.0", "scheduler": "^0.23.0", "signal-exit": "^3.0.7", "slice-ansi": "^7.1.0", "stack-utils": "^2.0.6", "string-width": "^7.2.0", "type-fest": "^4.27.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0", "ws": "^8.18.0", "yoga-layout": "~3.2.1" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/react": ">=18.0.0", "react": ">=18.0.0", "react-devtools-core": "^4.19.1" }, "peerDependenciesMeta": { "@types/react": { "optional": true }, "react-devtools-core": { "optional": true } } }, "node_modules/ink/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/ip-address": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/is-actual-promise": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-actual-promise/-/is-actual-promise-1.0.2.tgz", "integrity": "sha512-xsFiO1of0CLsQnPZ1iXHNTyR9YszOeWKYv+q6n8oSFW3ipooFJ1j1lbRMgiMCr+pp2gLruESI4zb5Ak6eK5OnQ==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-in-ci": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", "dev": true, "license": "MIT", "bin": { "is-in-ci": "cli.js" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isexe": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=20" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-reports": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jackspeak": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^9.0.0" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "dev": true, "license": "MIT", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, "license": "ISC" }, "node_modules/jsonc-simple-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-simple-parser/-/jsonc-simple-parser-3.0.0.tgz", "integrity": "sha512-0qi9Kuj4JPar4/3b9wZteuPZrTeFzXsQyOZj7hksnReCZN3Vr17Doz7w/i3E9XH7vRkVTHhHES+r1h97I+hfww==", "dev": true, "dependencies": { "reghex": "^3.0.2" } }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" ], "license": "MIT" }, "node_modules/linkify-it": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.1.tgz", "integrity": "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/puzrin" }, { "type": "github", "url": "https://github.com/sponsors/markdown-it" } ], "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/lru-cache": { "version": "11.5.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true, "license": "MIT" }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, "license": "ISC" }, "node_modules/make-fetch-happen": { "version": "15.0.6", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.6.tgz", "integrity": "sha512-Je0fLJ0F5atA7F+eIlLzk+Wkcl57JDf4kf+EW8xiP5E31xOQxkIxTbgf1Oi1Lw9tRI9UEMRdI5Vz2xTzoNU1Jw==", "dev": true, "license": "ISC", "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/agent": "^4.0.0", "@npmcli/redact": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "ssri": "^13.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/markdown-it": { "version": "14.2.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.2.0.tgz", "integrity": "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/puzrin" }, { "type": "github", "url": "https://github.com/sponsors/markdown-it" } ], "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.1", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true, "license": "MIT" }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/minimatch": { "version": "10.2.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-fetch": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", "minizlib": "^3.0.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" }, "optionalDependencies": { "iconv-lite": "^0.7.2" } }, "node_modules/minipass-flush": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.7.tgz", "integrity": "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-flush/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/minipass-sized": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.1.2" }, "engines": { "node": ">=8" } }, "node_modules/minizlib": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "license": "MIT", "dependencies": { "minipass": "^7.1.2" }, "engines": { "node": ">= 18" } }, "node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/mutate-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mutate-fs/-/mutate-fs-2.1.1.tgz", "integrity": "sha512-WI5pPPUNiWqaK2XdK94AVpxIc8GmZEXYlLfFbWuc4gUtBGHTK92jdPqFdx/lilxgb5Ep7tQ15NqCcJEOeq6wdA==", "dev": true, "license": "ISC" }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/nock": { "version": "13.5.6", "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz", "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", "propagate": "^2.0.0" }, "engines": { "node": ">= 10.13" } }, "node_modules/node-gyp": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.3.0.tgz", "integrity": "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==", "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "nopt": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "tar": "^7.5.4", "tinyglobby": "^0.2.12", "undici": "^6.25.0", "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/node-options-to-argv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-options-to-argv/-/node-options-to-argv-1.0.0.tgz", "integrity": "sha512-99rLlP+Cn/FsSV9kjpk2UmF2Ltmrpv/L9U7fUfws/MVXkeZWPpPDsQkMr79qCvSF/oTKVVJBTm5sHzmK2j6IIg==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/nopt": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, "license": "ISC", "dependencies": { "abbrev": "^4.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-bundled": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", "dev": true, "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^5.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-install-checks": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-normalize-package-bin": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", "dev": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-package-arg": { "version": "13.0.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", "dev": true, "license": "ISC", "dependencies": { "hosted-git-info": "^9.0.0", "proc-log": "^6.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-packlist": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", "dev": true, "license": "ISC", "dependencies": { "ignore-walk": "^8.0.0", "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-pick-manifest": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", "dev": true, "license": "ISC", "dependencies": { "npm-install-checks": "^8.0.0", "npm-normalize-package-bin": "^5.0.0", "npm-package-arg": "^13.0.0", "semver": "^7.3.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-registry-fetch": { "version": "19.1.1", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", "dev": true, "license": "ISC", "dependencies": { "@npmcli/redact": "^4.0.0", "jsonparse": "^1.3.1", "make-fetch-happen": "^15.0.0", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minizlib": "^3.0.1", "npm-package-arg": "^13.0.0", "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/oxlint": { "version": "1.67.0", "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.67.0.tgz", "integrity": "sha512-blwwaHPdoH8piQ5/z0KHeoHFR7FZgl12WluKJfu4qFLPkZl6mK04PkLE45Fw1NxfBRSlh40Gu7MkxHUw++ociQ==", "dev": true, "license": "MIT", "bin": { "oxlint": "bin/oxlint" }, "engines": { "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.67.0", "@oxlint/binding-android-arm64": "1.67.0", "@oxlint/binding-darwin-arm64": "1.67.0", "@oxlint/binding-darwin-x64": "1.67.0", "@oxlint/binding-freebsd-x64": "1.67.0", "@oxlint/binding-linux-arm-gnueabihf": "1.67.0", "@oxlint/binding-linux-arm-musleabihf": "1.67.0", "@oxlint/binding-linux-arm64-gnu": "1.67.0", "@oxlint/binding-linux-arm64-musl": "1.67.0", "@oxlint/binding-linux-ppc64-gnu": "1.67.0", "@oxlint/binding-linux-riscv64-gnu": "1.67.0", "@oxlint/binding-linux-riscv64-musl": "1.67.0", "@oxlint/binding-linux-s390x-gnu": "1.67.0", "@oxlint/binding-linux-x64-gnu": "1.67.0", "@oxlint/binding-linux-x64-musl": "1.67.0", "@oxlint/binding-openharmony-arm64": "1.67.0", "@oxlint/binding-win32-arm64-msvc": "1.67.0", "@oxlint/binding-win32-ia32-msvc": "1.67.0", "@oxlint/binding-win32-x64-msvc": "1.67.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.22.1", "vite-plus": "*" }, "peerDependenciesMeta": { "oxlint-tsgolint": { "optional": true }, "vite-plus": { "optional": true } } }, "node_modules/oxlint-tsgolint": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-0.23.0.tgz", "integrity": "sha512-3mBv3CoPbh8dFbzfDGIWa2ytZjn2v+3EX4aKRXjIhsoGFzG8GCjfRirz3rwZf1wYbZzsNLTSgpw8VjQuWdp/jA==", "dev": true, "license": "MIT", "bin": { "tsgolint": "bin/tsgolint.js" }, "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.23.0", "@oxlint-tsgolint/darwin-x64": "0.23.0", "@oxlint-tsgolint/linux-arm64": "0.23.0", "@oxlint-tsgolint/linux-x64": "0.23.0", "@oxlint-tsgolint/win32-arm64": "0.23.0", "@oxlint-tsgolint/win32-x64": "0.23.0" } }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pacote": { "version": "21.5.0", "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.5.0.tgz", "integrity": "sha512-VtZ0SB8mb5Tzw3dXDfVAIjhyVKUHZkS/ZH9/5mpKenwC9sFOXNI0JI7kEF7IMkwOnsWMFrvAZHzx1T5fmrp9FQ==", "dev": true, "license": "ISC", "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^4.0.0", "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^9.0.0", "@npmcli/run-script": "^10.0.0", "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^13.0.0", "npm-packlist": "^10.0.1", "npm-pick-manifest": "^11.0.1", "npm-registry-fetch": "^19.0.0", "proc-log": "^6.0.0", "sigstore": "^4.0.0", "ssri": "^13.0.0", "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/patch-console": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/picomatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pirates": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/polite-json": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/polite-json/-/polite-json-5.0.0.tgz", "integrity": "sha512-OLS/0XeUAcE8a2fdwemNja+udKgXNnY6yKVIXqAD2zVRx1KvY6Ato/rZ2vdzbxqYwPW0u6SCNC/bAMPNzpzxbw==", "dev": true, "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/prettier": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prismjs": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/prismjs-terminal": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/prismjs-terminal/-/prismjs-terminal-1.2.4.tgz", "integrity": "sha512-S2nsjy6s2x2jF4uTW8ulX19rvmRfe9R1wmnNwI5wmBgQEErB0vuKueVPMzN6KsFRCCJ2IQrWUS0BqhcNsrR9xg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "chalk": "^5.2.0", "prismjs": "^1.30.0", "string-length": "^6.0.0" }, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/proc-log": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/process-on-spawn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "license": "MIT", "dependencies": { "fromentries": "^1.2.0" }, "engines": { "node": ">=8" } }, "node_modules/propagate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", "dev": true, "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "node_modules/react-element-to-jsx-string": { "version": "15.0.0", "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", "dev": true, "license": "MIT", "dependencies": { "@base2/pretty-print-object": "1.0.1", "is-plain-object": "5.0.0", "react-is": "18.1.0" }, "peerDependencies": { "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" } }, "node_modules/react-is": { "version": "18.1.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", "dev": true, "license": "MIT" }, "node_modules/react-reconciler": { "version": "0.29.2", "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz", "integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==", "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { "react": "^18.3.1" } }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", "engines": { "node": ">= 14.18.0" }, "funding": { "type": "individual", "url": "https://paulmillr.com/funding/" } }, "node_modules/reghex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/reghex/-/reghex-3.0.2.tgz", "integrity": "sha512-Zb9DJ5u6GhgqRSBnxV2QSnLqEwcKxHWFA1N2yUa4ZUAO1P8jlWKYtWZ6/ooV6yylspGXJX0O/uNzEv0xrCtwaA==", "dev": true, "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve-import": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/resolve-import/-/resolve-import-2.4.0.tgz", "integrity": "sha512-gLWKdA5tiv5j/D7ipR47u3ovbVfzFPrctTdw2Ulnpmr6PPVVSvPKGNWu09jXVNlOSLLAeD6CA13bjIelpWttSw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "glob": "^13.0.0", "walk-up-path": "^4.0.0" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/rimraf": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "license": "MIT", "optional": true }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/semver": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/sigstore": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.1.tgz", "integrity": "sha512-endqECJkfhozrXMK5ngu/UAA0xVcVEFdnHJCElGaExypjW+HK5i6zu3NteLoaX/iFbRUbC3+DjttQs0GARr+5w==", "dev": true, "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^4.0.0", "@sigstore/core": "^3.2.1", "@sigstore/protobuf-specs": "^0.5.0", "@sigstore/sign": "^4.1.1", "@sigstore/tuf": "^4.0.2", "@sigstore/verify": "^3.1.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/slice-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { "get-east-asian-width": "^1.3.1" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, "license": "MIT", "dependencies": { "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { "version": "8.0.5", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { "version": "3.0.23", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, "node_modules/ssri": { "version": "13.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, "engines": { "node": ">=10" } }, "node_modules/string-length": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-6.0.0.tgz", "integrity": "sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==", "dev": true, "license": "MIT", "dependencies": { "strip-ansi": "^7.1.0" }, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string-width-cjs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/sync-content": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sync-content/-/sync-content-2.0.4.tgz", "integrity": "sha512-w3ioiBmbaogob33WdLnuwFk+8tpePI58CTWKqtdAgEqc2hfGuSwP02gPETqNX/3PLS5skv5a1wQR0gbaa2W0XQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "glob": "^13.0.1", "mkdirp": "^3.0.1", "path-scurry": "^2.0.0", "rimraf": "^6.0.0" }, "bin": { "sync-content": "dist/esm/bin.mjs" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tap": { "version": "21.7.4", "resolved": "https://registry.npmjs.org/tap/-/tap-21.7.4.tgz", "integrity": "sha512-Snv6jL5USfHTW9PmlEWuqaxoxVpmQYYOlFzUS/p1vOrNUeg6FCSWQFQuLNwljV1DYFy0jATq+gAy6vAVdXeR3A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/after": "3.3.10", "@tapjs/after-each": "4.3.10", "@tapjs/asserts": "4.3.10", "@tapjs/before": "4.3.10", "@tapjs/before-each": "4.3.10", "@tapjs/chdir": "3.3.10", "@tapjs/core": "4.5.8", "@tapjs/filter": "4.3.10", "@tapjs/fixture": "4.3.10", "@tapjs/intercept": "4.3.10", "@tapjs/mock": "4.4.8", "@tapjs/node-serialize": "4.3.10", "@tapjs/run": "4.5.8", "@tapjs/snapshot": "4.3.10", "@tapjs/spawn": "4.3.10", "@tapjs/stdin": "4.3.10", "@tapjs/test": "4.4.8", "@tapjs/typescript": "3.5.10", "@tapjs/worker": "4.3.10", "resolve-import": "^2.4.0" }, "bin": { "tap": "dist/esm/run.mjs" }, "engines": { "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tap-parser": { "version": "18.3.4", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-18.3.4.tgz", "integrity": "sha512-CiqzdpWn2CvONcWp7UNMF9/rCPJwCz0es+qykkgJruu1Y/rAS8A5MEQujmjx9NErfst3dGiZJU3lDS2jBsgbPA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "events-to-array": "^2.0.3", "tap-yaml": "4.4.2" }, "bin": { "tap-parser": "bin/cmd.cjs" }, "engines": { "node": "20 || >=22" } }, "node_modules/tap-yaml": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-4.4.2.tgz", "integrity": "sha512-03mQI7QhfVZHJqGgFyxNTgUbgsG41ZzpWSb7k1Gangmf9hF71Jpb0Fczs7KtOdUDaHx+KxlPUdM2pQJaijebGA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "yaml": "^2.8.3", "yaml-types": "^0.4.0" }, "engines": { "node": "20 || >=22" } }, "node_modules/tar": { "version": "7.5.15", "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { "node": ">=18" } }, "node_modules/tcompare": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-9.3.2.tgz", "integrity": "sha512-jSZmZPiMTBDZkV0Li/nNeOkCLtOViC/xgWdvzYheSU9RJt6F1EVUKZUJuH+QqN6tjVJrUXAeWpPNy+aLzfAjCQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "diff": "^8.0.2", "react-element-to-jsx-string": "^15.0.0" }, "engines": { "node": "20 || >=22" } }, "node_modules/test-exclude": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", "minimatch": "^10.2.2" }, "engines": { "node": ">=18" } }, "node_modules/test-exclude/node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/test-exclude/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/test-exclude/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/test-exclude/node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/test-exclude/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/test-exclude/node_modules/glob/node_modules/minimatch": { "version": "9.0.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/test-exclude/node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/test-exclude/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, "node_modules/test-exclude/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/test-exclude/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/test-exclude/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" }, "funding": { "url": "https://github.com/sponsors/SuperchupuDev" } }, "node_modules/trivial-deferred": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-2.0.0.tgz", "integrity": "sha512-iGbM7X2slv9ORDVj2y2FFUq3cP/ypbtu2nQ8S38ufjL0glBABvmR9pTdsib1XtS2LUhhLMbelaBUaf/s5J3dSw==", "dev": true, "license": "ISC", "engines": { "node": ">= 8" } }, "node_modules/tshy": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/tshy/-/tshy-4.1.2.tgz", "integrity": "sha512-pOXcuOznFx65bKGYBue4PaJ561tARAmCTm2RgImKPtad24PNmkXClVzF/x7GI2LLs+niJpehR/K+ngBhvqq6Sg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@typescript/native-preview": "^7.0.0-dev.20260218.1", "chalk": "^5.6.2", "chokidar": "^4.0.3", "foreground-child": "^4.0.0", "jsonc-simple-parser": "^3.0.0", "minimatch": "^10.0.3", "mkdirp": "^3.0.1", "polite-json": "^5.0.0", "resolve-import": "^2.4.0", "rimraf": "^6.1.2", "sync-content": "^2.0.3", "typescript": "^6.0.2", "walk-up-path": "^4.0.0" }, "bin": { "tshy": "dist/esm/bin-min.mjs" }, "engines": { "node": "20 || >=22" } }, "node_modules/tuf-js": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", "dev": true, "license": "MIT", "dependencies": { "@tufjs/models": "4.1.0", "debug": "^4.4.3", "make-fetch-happen": "^15.0.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/type-fest": { "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typedoc": { "version": "0.28.19", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.19.tgz", "integrity": "sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@gerrit0/mini-shiki": "^3.23.0", "lunr": "^2.3.9", "markdown-it": "^14.1.1", "minimatch": "^10.2.5", "yaml": "^2.8.3" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { "node": ">= 18", "pnpm": ">= 10" }, "peerDependencies": { "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x" } }, "node_modules/typescript": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=14.17" } }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true, "license": "MIT" }, "node_modules/undici": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/undici/-/undici-6.26.0.tgz", "integrity": "sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==", "dev": true, "license": "MIT", "engines": { "node": ">=18.17" } }, "node_modules/undici-types": { "version": "7.24.6", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { "uuid": "dist-node/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/validate-npm-package-name": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", "dev": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/walk-up-path": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", "dev": true, "license": "ISC", "engines": { "node": "20 || >=22" } }, "node_modules/which": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, "license": "ISC", "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/widest-line": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", "dev": true, "license": "MIT", "dependencies": { "string-width": "^7.0.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" }, "node_modules/ws": { "version": "8.21.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "license": "BlueOak-1.0.0", "engines": { "node": ">=18" } }, "node_modules/yaml": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" }, "funding": { "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yaml-types": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/yaml-types/-/yaml-types-0.4.0.tgz", "integrity": "sha512-XfbA30NUg4/LWUiplMbiufUiwYhgB9jvBhTWel7XQqjV+GaB79c2tROu/8/Tu7jO0HvDvnKWtBk5ksWRrhQ/0g==", "dev": true, "license": "ISC", "engines": { "node": ">= 16", "npm": ">= 7" }, "peerDependencies": { "yaml": "^2.3.0" } }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" } }, "node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yargs/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yoga-layout": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", "dev": true, "license": "MIT" } } } isaacs-node-tar-0a52f00/package.json000066400000000000000000000172371522005272700173050ustar00rootroot00000000000000{ "author": "Isaac Z. Schlueter", "name": "tar", "description": "tar for node", "version": "7.5.19", "repository": { "type": "git", "url": "https://github.com/isaacs/node-tar.git" }, "scripts": { "genparse": "node scripts/generate-parse-fixtures.js", "snap": "tap", "test": "tap", "pretest": "npm run prepare", "presnap": "npm run prepare", "prepare": "tshy && bash scripts/build.sh", "preversion": "npm test", "postversion": "npm publish", "prepublishOnly": "git push origin --follow-tags", "format": "prettier --write . --log-level warn", "typedoc": "typedoc --tsconfig .tshy/esm.json ./src/*.ts", "lint": "oxlint --fix src test", "postsnap": "npm run lint", "postlint": "npm run format" }, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "devDependencies": { "@types/node": "^25.9.1", "chmodr": "^2.0.2", "end-of-stream": "^1.4.3", "esbuild": "^0.28.0", "events-to-array": "^2.0.3", "mutate-fs": "^2.1.1", "nock": "^13.5.4", "oxlint": "^1.67.0", "oxlint-tsgolint": "^0.23.0", "prettier": "^3.8.3", "rimraf": "^6.1.2", "tap": "^21.7.4", "tshy": "^4.1.2", "typedoc": "^0.28.19" }, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" }, "files": [ "dist" ], "tshy": { "exports": { "./package.json": "./package.json", ".": { "import": { "types": "./dist/esm/index.d.ts", "default": "./dist/esm/index.min.js" }, "require": { "types": "./dist/commonjs/index.d.ts", "default": "./dist/commonjs/index.min.js" } }, "./raw": "./src/index.ts", "./c": "./src/create.ts", "./create": "./src/create.ts", "./replace": "./src/create.ts", "./r": "./src/create.ts", "./list": "./src/list.ts", "./t": "./src/list.ts", "./update": "./src/update.ts", "./u": "./src/update.ts", "./extract": "./src/extract.ts", "./x": "./src/extract.ts", "./pack": "./src/pack.ts", "./unpack": "./src/unpack.ts", "./parse": "./src/parse.ts", "./read-entry": "./src/read-entry.ts", "./write-entry": "./src/write-entry.ts", "./header": "./src/header.ts", "./pax": "./src/pax.ts", "./types": "./src/types.ts" }, "selfLink": false }, "exports": { "./package.json": "./package.json", ".": { "import": { "types": "./dist/esm/index.d.ts", "default": "./dist/esm/index.min.js" }, "require": { "types": "./dist/commonjs/index.d.ts", "default": "./dist/commonjs/index.min.js" } }, "./raw": { "import": { "types": "./dist/esm/index.d.ts", "default": "./dist/esm/index.js" }, "require": { "types": "./dist/commonjs/index.d.ts", "default": "./dist/commonjs/index.js" } }, "./c": { "import": { "types": "./dist/esm/create.d.ts", "default": "./dist/esm/create.js" }, "require": { "types": "./dist/commonjs/create.d.ts", "default": "./dist/commonjs/create.js" } }, "./create": { "import": { "types": "./dist/esm/create.d.ts", "default": "./dist/esm/create.js" }, "require": { "types": "./dist/commonjs/create.d.ts", "default": "./dist/commonjs/create.js" } }, "./replace": { "import": { "types": "./dist/esm/create.d.ts", "default": "./dist/esm/create.js" }, "require": { "types": "./dist/commonjs/create.d.ts", "default": "./dist/commonjs/create.js" } }, "./r": { "import": { "types": "./dist/esm/create.d.ts", "default": "./dist/esm/create.js" }, "require": { "types": "./dist/commonjs/create.d.ts", "default": "./dist/commonjs/create.js" } }, "./list": { "import": { "types": "./dist/esm/list.d.ts", "default": "./dist/esm/list.js" }, "require": { "types": "./dist/commonjs/list.d.ts", "default": "./dist/commonjs/list.js" } }, "./t": { "import": { "types": "./dist/esm/list.d.ts", "default": "./dist/esm/list.js" }, "require": { "types": "./dist/commonjs/list.d.ts", "default": "./dist/commonjs/list.js" } }, "./update": { "import": { "types": "./dist/esm/update.d.ts", "default": "./dist/esm/update.js" }, "require": { "types": "./dist/commonjs/update.d.ts", "default": "./dist/commonjs/update.js" } }, "./u": { "import": { "types": "./dist/esm/update.d.ts", "default": "./dist/esm/update.js" }, "require": { "types": "./dist/commonjs/update.d.ts", "default": "./dist/commonjs/update.js" } }, "./extract": { "import": { "types": "./dist/esm/extract.d.ts", "default": "./dist/esm/extract.js" }, "require": { "types": "./dist/commonjs/extract.d.ts", "default": "./dist/commonjs/extract.js" } }, "./x": { "import": { "types": "./dist/esm/extract.d.ts", "default": "./dist/esm/extract.js" }, "require": { "types": "./dist/commonjs/extract.d.ts", "default": "./dist/commonjs/extract.js" } }, "./pack": { "import": { "types": "./dist/esm/pack.d.ts", "default": "./dist/esm/pack.js" }, "require": { "types": "./dist/commonjs/pack.d.ts", "default": "./dist/commonjs/pack.js" } }, "./unpack": { "import": { "types": "./dist/esm/unpack.d.ts", "default": "./dist/esm/unpack.js" }, "require": { "types": "./dist/commonjs/unpack.d.ts", "default": "./dist/commonjs/unpack.js" } }, "./parse": { "import": { "types": "./dist/esm/parse.d.ts", "default": "./dist/esm/parse.js" }, "require": { "types": "./dist/commonjs/parse.d.ts", "default": "./dist/commonjs/parse.js" } }, "./read-entry": { "import": { "types": "./dist/esm/read-entry.d.ts", "default": "./dist/esm/read-entry.js" }, "require": { "types": "./dist/commonjs/read-entry.d.ts", "default": "./dist/commonjs/read-entry.js" } }, "./write-entry": { "import": { "types": "./dist/esm/write-entry.d.ts", "default": "./dist/esm/write-entry.js" }, "require": { "types": "./dist/commonjs/write-entry.d.ts", "default": "./dist/commonjs/write-entry.js" } }, "./header": { "import": { "types": "./dist/esm/header.d.ts", "default": "./dist/esm/header.js" }, "require": { "types": "./dist/commonjs/header.d.ts", "default": "./dist/commonjs/header.js" } }, "./pax": { "import": { "types": "./dist/esm/pax.d.ts", "default": "./dist/esm/pax.js" }, "require": { "types": "./dist/commonjs/pax.d.ts", "default": "./dist/commonjs/pax.js" } }, "./types": { "import": { "types": "./dist/esm/types.d.ts", "default": "./dist/esm/types.js" }, "require": { "types": "./dist/commonjs/types.d.ts", "default": "./dist/commonjs/types.js" } } }, "type": "module", "main": "./dist/commonjs/index.min.js", "types": "./dist/commonjs/index.d.ts", "module": "./dist/esm/index.min.js" } isaacs-node-tar-0a52f00/scripts/000077500000000000000000000000001522005272700164745ustar00rootroot00000000000000isaacs-node-tar-0a52f00/scripts/build.sh000066400000000000000000000004721522005272700201320ustar00rootroot00000000000000#!/usr/bin/env bash esbuild \ --minify \ --platform=node \ --sourcemap \ --bundle dist/commonjs/index.js \ --outfile=dist/commonjs/index.min.js \ --format=cjs esbuild \ --minify \ --platform=node \ --sourcemap \ --bundle dist/esm/index.js \ --outfile=dist/esm/index.min.js \ --format=esm isaacs-node-tar-0a52f00/scripts/generate-parse-fixtures.js000066400000000000000000000063321522005272700236070ustar00rootroot00000000000000import { Parser } from '../dist/esm/parse.js' import fs from 'fs' import path, { dirname, resolve } from 'path' import { fileURLToPath } from 'url' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const tardir = resolve(__dirname, '../test/fixtures/tars') const parsedir = resolve(__dirname, '../test/fixtures/parse') const maxMetaOpt = [250, null] const filterOpt = [true, false] const strictOpt = [true, false] const makeTest = (tarfile, tardata, maxMeta, filter, strict) => { const o = (maxMeta ? '-meta-' + maxMeta : '') + (filter ? '-filter' : '') + (strict ? '-strict' : '') const tail = (o ? '-' + o : '') + '.json' const eventsfile = parsedir + '/' + path.basename(tarfile, '.tar') + tail const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : null, strict: strict, }) const events = [] const pushEntry = type => entry => { events.push([ type, { extended: entry.extended, globalExtended: entry.globalExtended, type: entry.type, meta: entry.meta, ignore: entry.ignore, path: entry.path, mode: entry.mode, uid: entry.uid, gid: entry.gid, uname: entry.uname, gname: entry.gname, size: entry.size, mtime: entry.mtime, atime: entry.atime, ctime: entry.ctime, linkpath: entry.linkpath, header: { cksumValid: entry.header.cksumValid, needPax: entry.header.needPax, path: entry.header.path, mode: entry.header.mode, uid: entry.header.uid, gid: entry.header.gid, size: entry.header.size, mtime: entry.header.mtime, cksum: entry.header.cksum, linkpath: entry.header.linkpath, ustar: entry.header.ustar, ustarver: entry.header.ustarver, uname: entry.header.uname, gname: entry.header.gname, devmaj: entry.header.devmaj, devmin: entry.header.devmin, ustarPrefix: entry.header.ustarPrefix, xstarPrefix: entry.header.xstarPrefix, prefixTerminator: entry.header.prefixTerminator, atime: entry.header.atime, ctime: entry.header.atime, }, }, ]) entry.resume() } p.on('entry', pushEntry('entry')) p.on('ignoredEntry', pushEntry('ignoredEntry')) p.on('warn', (code, message, _data) => events.push(['warn', code, message]), ) p.on('error', er => events.push([ 'error', { message: er.message, code: er.code, }, ]), ) p.on('end', _ => events.push(['end'])) p.on('nullBlock', _ => events.push(['nullBlock'])) p.on('eof', _ => events.push(['eof'])) p.on('meta', meta => events.push(['meta', meta])) p.end(tardata) console.log(eventsfile) fs.writeFileSync(eventsfile, JSON.stringify(events, null, 2) + '\n') } fs.readdirSync(tardir).forEach(tar => { const tarfile = tardir + '/' + tar const tardata = fs.readFileSync(tarfile) maxMetaOpt.forEach(maxMeta => filterOpt.forEach(filter => strictOpt.forEach(strict => makeTest(tarfile, tardata, maxMeta, filter, strict), ), ), ) }) isaacs-node-tar-0a52f00/src/000077500000000000000000000000001522005272700155745ustar00rootroot00000000000000isaacs-node-tar-0a52f00/src/create.ts000066400000000000000000000043501522005272700174110ustar00rootroot00000000000000import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass' import type { Minipass } from 'minipass' import path from 'node:path' import { list } from './list.js' import { makeCommand } from './make-command.js' import type { TarOptions, TarOptionsFile, TarOptionsSync, TarOptionsSyncFile, } from './options.js' import { Pack, PackSync } from './pack.js' const createFileSync = (opt: TarOptionsSyncFile, files: string[]) => { const p = new PackSync(opt) const stream = new WriteStreamSync(opt.file, { mode: opt.mode || 0o666, }) p.pipe(stream as unknown as Minipass.Writable) addFilesSync(p, files) } const createFile = (opt: TarOptionsFile, files: string[]) => { const p = new Pack(opt) const stream = new WriteStream(opt.file, { mode: opt.mode || 0o666, }) p.pipe(stream as unknown as Minipass.Writable) const promise = new Promise((res, rej) => { stream.on('error', rej) stream.on('close', res) p.on('error', rej) }) addFilesAsync(p, files).catch(er => p.emit('error', er)) return promise } const addFilesSync = (p: PackSync, files: string[]) => { files.forEach(file => { if (file.charAt(0) === '@') { list({ file: path.resolve(p.cwd, file.slice(1)), sync: true, noResume: true, onReadEntry: entry => p.add(entry), }) } else { p.add(file) } }) p.end() } const addFilesAsync = async (p: Pack, files: string[]): Promise => { for (const file of files) { if (file.charAt(0) === '@') { await list({ file: path.resolve(String(p.cwd), file.slice(1)), noResume: true, onReadEntry: entry => { p.add(entry) }, }) } else { p.add(file) } } p.end() } const createSync = (opt: TarOptionsSync, files: string[]) => { const p = new PackSync(opt) addFilesSync(p, files) return p } const createAsync = (opt: TarOptions, files: string[]) => { const p = new Pack(opt) addFilesAsync(p, files).catch(er => p.emit('error', er)) return p } export const create = makeCommand( createFileSync, createFile, createSync, createAsync, (_opt, files) => { if (!files?.length) { throw new TypeError('no paths specified to add to archive') } }, ) isaacs-node-tar-0a52f00/src/cwd-error.ts000066400000000000000000000004271522005272700200530ustar00rootroot00000000000000export class CwdError extends Error { path: string code: string syscall = 'chdir' as const constructor(path: string, code: string) { super(`${code}: Cannot cd into '${path}'`) this.path = path this.code = code } get name() { return 'CwdError' } } isaacs-node-tar-0a52f00/src/extract.ts000066400000000000000000000031421522005272700176160ustar00rootroot00000000000000// tar -x import * as fsm from '@isaacs/fs-minipass' import fs from 'node:fs' import { filesFilter } from './list.js' import { makeCommand } from './make-command.js' import type { TarOptionsFile, TarOptionsSyncFile } from './options.js' import { Unpack, UnpackSync } from './unpack.js' const extractFileSync = (opt: TarOptionsSyncFile) => { const u = new UnpackSync(opt) const file = opt.file const stat = fs.statSync(file) // This trades a zero-byte read() syscall for a stat // However, it will usually result in less memory allocation const readSize = opt.maxReadSize || 16 * 1024 * 1024 const stream = new fsm.ReadStreamSync(file, { readSize: readSize, size: stat.size, }) stream.pipe(u) } const extractFile = (opt: TarOptionsFile, _?: string[]) => { const u = new Unpack(opt) const readSize = opt.maxReadSize || 16 * 1024 * 1024 const file = opt.file const p = new Promise((resolve, reject) => { u.on('error', reject) u.on('close', resolve) // This trades a zero-byte read() syscall for a stat // However, it will usually result in less memory allocation fs.stat(file, (er, stat) => { if (er) { reject(er) } else { const stream = new fsm.ReadStream(file, { readSize: readSize, size: stat.size, }) stream.on('error', reject) stream.pipe(u) } }) }) return p } export const extract = makeCommand( extractFileSync, extractFile, opt => new UnpackSync(opt), opt => new Unpack(opt), (opt, files) => { if (files?.length) filesFilter(opt, files) }, ) isaacs-node-tar-0a52f00/src/get-write-flag.ts000066400000000000000000000022051522005272700207610ustar00rootroot00000000000000// Get the appropriate flag to use for creating files // We use fmap on Windows platforms for files less than // 512kb. This is a fairly low limit, but avoids making // things slower in some cases. Since most of what this // library is used for is extracting tarballs of many // relatively small files in npm packages and the like, // it can be a big boost on Windows platforms. import fs from 'fs' const platform = process.env.__FAKE_PLATFORM__ || process.platform const isWindows = platform === 'win32' /* c8 ignore start */ const { O_CREAT, O_NOFOLLOW, O_TRUNC, O_WRONLY } = fs.constants const UV_FS_O_FILEMAP = Number(process.env.__FAKE_FS_O_FILENAME__) || fs.constants.UV_FS_O_FILEMAP || 0 /* c8 ignore stop */ const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP const fMapLimit = 512 * 1024 const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY const noFollowFlag = !isWindows && typeof O_NOFOLLOW === 'number' ? O_NOFOLLOW | O_TRUNC | O_CREAT | O_WRONLY : null export const getWriteFlag = noFollowFlag !== null ? () => noFollowFlag : !fMapEnabled ? () => 'w' : (size: number) => (size < fMapLimit ? fMapFlag : 'w') isaacs-node-tar-0a52f00/src/header.ts000066400000000000000000000310601522005272700173740ustar00rootroot00000000000000// parse a 512-byte header block to a data object, or vice-versa // encode returns `true` if a pax extended header is needed, because // the data could not be faithfully encoded in a simple header. // (Also, check header.needPax to see if it needs a pax header.) import { posix as pathModule } from 'node:path' import * as large from './large-numbers.js' import type { EntryTypeCode, EntryTypeName } from './types.js' import * as types from './types.js' const notNegative = (n?: number): number | undefined => n === undefined || n < 0 ? undefined : n export type HeaderData = { path?: string mode?: number uid?: number gid?: number size?: number cksum?: number type?: EntryTypeName | 'Unsupported' linkpath?: string uname?: string gname?: string devmaj?: number devmin?: number atime?: Date ctime?: Date mtime?: Date // fields that are common in extended PAX headers, but not in the // "standard" tar header block charset?: string comment?: string dev?: number ino?: number nlink?: number } export class Header implements HeaderData { cksumValid: boolean = false needPax: boolean = false nullBlock: boolean = false block?: Buffer path?: string mode?: number uid?: number gid?: number size?: number cksum?: number #type: EntryTypeCode | 'Unsupported' = 'Unsupported' linkpath?: string uname?: string gname?: string devmaj: number = 0 devmin: number = 0 atime?: Date ctime?: Date mtime?: Date charset?: string comment?: string constructor( data?: Buffer | HeaderData, off: number = 0, ex?: HeaderData, gex?: HeaderData, ) { if (Buffer.isBuffer(data)) { this.decode(data, off || 0, ex, gex) } else if (data) { this.#slurp(data) } } decode(buf: Buffer, off: number, ex?: HeaderData, gex?: HeaderData) { if (!off) { off = 0 } if (!buf || !(buf.length >= off + 512)) { throw new Error('need 512 bytes for header') } // Decode the typeflag (independent of any pending PAX/GNU extended header) // up front so we can tell whether THIS block is itself an intermediary // extension header (PAX `x`/`g`, GNU long-name `L`, GNU long-link `K`). // Per POSIX pax, a PAX extended header describes the *next file entry*, not // the extension headers that may sit between it and that file. Applying the // pending PAX overrides (notably `size`) to an intervening `L`/`K`/`x`/`g` // header desynchronizes the stream relative to other tar implementations // and enables tar interpretation-conflict / file-smuggling attacks. const t = decString(buf, off + 156, 1) const isNormalFS = types.normalFsTypes.has(t as EntryTypeCode) const exForFields = isNormalFS ? ex : undefined const gexForFields = isNormalFS ? gex : undefined this.path = exForFields?.path ?? decString(buf, off, 100) this.mode = exForFields?.mode ?? gexForFields?.mode ?? decNumber(buf, off + 100, 8) this.uid = exForFields?.uid ?? gexForFields?.uid ?? decNumber(buf, off + 108, 8) this.gid = exForFields?.gid ?? gexForFields?.gid ?? decNumber(buf, off + 116, 8) this.size = notNegative( exForFields?.size ?? gexForFields?.size ?? decNumber(buf, off + 124, 12), ) this.mtime = exForFields?.mtime ?? gexForFields?.mtime ?? decDate(buf, off + 136, 12) this.cksum = decNumber(buf, off + 148, 12) // if we have extended or global extended headers, apply them now // See https://github.com/npm/node-tar/pull/187 // Apply global before local, so it overrides. Never slurp the pending // extended-header fields onto an intermediary extension header. if (gexForFields) this.#slurp(gexForFields, true) if (exForFields) this.#slurp(exForFields) // old tar versions marked dirs as a file with a trailing / if (types.isCode(t)) { this.#type = t || '0' } if (this.#type === '0' && this.path.slice(-1) === '/') { this.#type = '5' } // tar implementations sometimes incorrectly put the stat(dir).size // as the size in the tarball, even though Directory entries are // not able to have any body at all. In the very rare chance that // it actually DOES have a body, we weren't going to do anything with // it anyway, and it'll just be a warning about an invalid header. if (this.#type === '5') { this.size = 0 } this.linkpath = decString(buf, off + 157, 100) if ( buf.subarray(off + 257, off + 265).toString() === 'ustar\u000000' ) { /* c8 ignore start */ this.uname = exForFields?.uname ?? gexForFields?.uname ?? decString(buf, off + 265, 32) this.gname = exForFields?.gname ?? gexForFields?.gname ?? decString(buf, off + 297, 32) this.devmaj = exForFields?.devmaj ?? gexForFields?.devmaj ?? decNumber(buf, off + 329, 8) ?? 0 this.devmin = exForFields?.devmin ?? gexForFields?.devmin ?? decNumber(buf, off + 337, 8) ?? 0 /* c8 ignore stop */ if (buf[off + 475] !== 0) { // definitely a prefix, definitely >130 chars. const prefix = decString(buf, off + 345, 155) this.path = prefix + '/' + this.path } else { const prefix = decString(buf, off + 345, 130) if (prefix) { this.path = prefix + '/' + this.path } /* c8 ignore start */ this.atime = ex?.atime ?? gex?.atime ?? decDate(buf, off + 476, 12) this.ctime = ex?.ctime ?? gex?.ctime ?? decDate(buf, off + 488, 12) /* c8 ignore stop */ } } let sum = 8 * 0x20 for (let i = off; i < off + 148; i++) { sum += buf[i] as number } for (let i = off + 156; i < off + 512; i++) { sum += buf[i] as number } this.cksumValid = sum === this.cksum if (this.cksum === undefined && sum === 8 * 0x20) { this.nullBlock = true } } #slurp(ex: HeaderData, gex: boolean = false) { Object.assign( this, Object.fromEntries( Object.entries(ex).filter(([k, v]) => { // we slurp in everything except for the path attribute in // a global extended header, because that's weird. Also, any // null/undefined values are ignored. return !( v === null || v === undefined || (k === 'size' && Number(v) < 0) || (k === 'path' && gex) || (k === 'linkpath' && gex) || k === 'global' ) }), ), ) } encode(buf?: Buffer, off: number = 0) { if (!buf) { buf = this.block = Buffer.alloc(512) } if (this.#type === 'Unsupported') { this.#type = '0' } if (!(buf.length >= off + 512)) { throw new Error('need 512 bytes for header') } const prefixSize = this.ctime || this.atime ? 130 : 155 const split = splitPrefix(this.path || '', prefixSize) const path = split[0] const prefix = split[1] this.needPax = !!split[2] this.needPax = encString(buf, off, 100, path) || this.needPax this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax buf[off + 156] = Number(this.#type.codePointAt(0)) this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax buf.write('ustar\u000000', off + 257, 8) this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax if (buf[off + 475] !== 0) { this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax } else { this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax } let sum = 8 * 0x20 for (let i = off; i < off + 148; i++) { sum += buf[i] as number } for (let i = off + 156; i < off + 512; i++) { sum += buf[i] as number } this.cksum = sum encNumber(buf, off + 148, 8, this.cksum) this.cksumValid = true return this.needPax } get type(): EntryTypeName { return ( this.#type === 'Unsupported' ? this.#type : types.name.get(this.#type)) as EntryTypeName } get typeKey(): EntryTypeCode | 'Unsupported' { return this.#type } set type(type: EntryTypeCode | EntryTypeName | 'Unsupported') { const c = String(types.code.get(type as EntryTypeName)) if (types.isCode(c) || c === 'Unsupported') { this.#type = c } else if (types.isCode(type)) { this.#type = type } else { throw new TypeError('invalid entry type: ' + type) } } } const splitPrefix = ( p: string, prefixSize: number, ): [string, string, boolean] => { const pathSize = 100 let pp = p let prefix = '' let ret: undefined | [string, string, boolean] = undefined const root = pathModule.parse(p).root || '.' if (Buffer.byteLength(pp) < pathSize) { ret = [pp, prefix, false] } else { // first set prefix to the dir, and path to the base prefix = pathModule.dirname(pp) pp = pathModule.basename(pp) do { if ( Buffer.byteLength(pp) <= pathSize && Buffer.byteLength(prefix) <= prefixSize ) { // both fit! ret = [pp, prefix, false] } else if ( Buffer.byteLength(pp) > pathSize && Buffer.byteLength(prefix) <= prefixSize ) { // prefix fits in prefix, but path doesn't fit in path ret = [pp.slice(0, pathSize - 1), prefix, true] } else { // make path take a bit from prefix pp = pathModule.join(pathModule.basename(prefix), pp) prefix = pathModule.dirname(prefix) } } while (prefix !== root && ret === undefined) // at this point, found no resolution, just truncate if (!ret) { ret = [p.slice(0, pathSize - 1), '', true] } } return ret } const decString = (buf: Buffer, off: number, size: number) => buf .subarray(off, off + size) .toString('utf8') .replace(/\0.*/, '') const decDate = (buf: Buffer, off: number, size: number) => numToDate(decNumber(buf, off, size)) const numToDate = (num?: number) => num === undefined ? undefined : new Date(num * 1000) const decNumber = (buf: Buffer, off: number, size: number) => Number(buf[off]) & 0x80 ? large.parse(buf.subarray(off, off + size)) : decSmallNumber(buf, off, size) const nanUndef = (value: number) => (isNaN(value) ? undefined : value) const decSmallNumber = (buf: Buffer, off: number, size: number) => nanUndef( parseInt( buf .subarray(off, off + size) .toString('utf8') .replace(/\0.*$/, '') .trim(), 8, ), ) // the maximum encodable as a null-terminated octal, by field size const MAXNUM = { 12: 0o77777777777, 8: 0o7777777, } const encNumber = ( buf: Buffer, off: number, size: 12 | 8, num?: number, ) => num === undefined ? false : num > MAXNUM[size] || num < 0 ? (large.encode(num, buf.subarray(off, off + size)), true) : (encSmallNumber(buf, off, size, num), false) const encSmallNumber = ( buf: Buffer, off: number, size: number, num: number, ) => buf.write(octalString(num, size), off, size, 'ascii') const octalString = (num: number, size: number) => padOctal(Math.floor(num).toString(8), size) const padOctal = (str: string, size: number) => (str.length === size - 1 ? str : new Array(size - str.length - 1).join('0') + str + ' ') + '\0' const encDate = (buf: Buffer, off: number, size: 8 | 12, date?: Date) => date === undefined ? false : ( encNumber(buf, off, size, date.getTime() / 1000) ) // enough to fill the longest string we've got const NULLS = new Array(156).join('\0') // pad with nulls, return true if it's longer or non-ascii const encString = ( buf: Buffer, off: number, size: number, str?: string, ) => str === undefined ? false : ( (buf.write(str + NULLS, off, size, 'utf8'), str.length !== Buffer.byteLength(str) || str.length > size) ) isaacs-node-tar-0a52f00/src/index.ts000066400000000000000000000016271522005272700172610ustar00rootroot00000000000000export { type TarOptionsWithAliasesAsync, type TarOptionsWithAliasesAsyncFile, type TarOptionsWithAliasesAsyncNoFile, type TarOptionsWithAliasesSyncNoFile, type TarOptionsWithAliases, type TarOptionsWithAliasesFile, type TarOptionsWithAliasesSync, type TarOptionsWithAliasesSyncFile, } from './options.js' export * from './create.js' export { create as c } from './create.js' export * from './extract.js' export { extract as x } from './extract.js' export * from './header.js' export * from './list.js' export { list as t } from './list.js' // classes export * from './pack.js' export * from './parse.js' export * from './pax.js' export * from './read-entry.js' export * from './replace.js' export { replace as r } from './replace.js' export * as types from './types.js' export * from './unpack.js' export * from './update.js' export { update as u } from './update.js' export * from './write-entry.js' isaacs-node-tar-0a52f00/src/large-numbers.ts000066400000000000000000000044251522005272700207140ustar00rootroot00000000000000// Tar can encode large and negative numbers using a leading byte of // 0xff for negative, and 0x80 for positive. export const encode = (num: number, buf: Buffer) => { if (!Number.isSafeInteger(num)) { // The number is so large that javascript cannot represent it with integer // precision. throw Error( 'cannot encode number outside of javascript safe integer range', ) } else if (num < 0) { encodeNegative(num, buf) } else { encodePositive(num, buf) } return buf } const encodePositive = (num: number, buf: Buffer) => { buf[0] = 0x80 for (var i = buf.length; i > 1; i--) { buf[i - 1] = num & 0xff num = Math.floor(num / 0x100) } } const encodeNegative = (num: number, buf: Buffer) => { buf[0] = 0xff var flipped = false num = num * -1 for (var i = buf.length; i > 1; i--) { var byte = num & 0xff num = Math.floor(num / 0x100) if (flipped) { buf[i - 1] = onesComp(byte) } else if (byte === 0) { buf[i - 1] = 0 } else { flipped = true buf[i - 1] = twosComp(byte) } } } export const parse = (buf: Buffer) => { const pre = buf[0] const value = pre === 0x80 ? pos(buf.subarray(1, buf.length)) : pre === 0xff ? twos(buf) : null if (value === null) { throw Error('invalid base256 encoding') } if (!Number.isSafeInteger(value)) { // The number is so large that javascript cannot represent it with integer // precision. throw Error('parsed number outside of javascript safe integer range') } return value } const twos = (buf: Buffer) => { var len = buf.length var sum = 0 var flipped = false for (var i = len - 1; i > -1; i--) { var byte = Number(buf[i]) var f if (flipped) { f = onesComp(byte) } else if (byte === 0) { f = byte } else { flipped = true f = twosComp(byte) } if (f !== 0) { sum -= f * Math.pow(256, len - i - 1) } } return sum } const pos = (buf: Buffer) => { var len = buf.length var sum = 0 for (var i = len - 1; i > -1; i--) { var byte = Number(buf[i]) if (byte !== 0) { sum += byte * Math.pow(256, len - i - 1) } } return sum } const onesComp = (byte: number) => (0xff ^ byte) & 0xff const twosComp = (byte: number) => ((0xff ^ byte) + 1) & 0xff isaacs-node-tar-0a52f00/src/list.ts000066400000000000000000000061321522005272700171210ustar00rootroot00000000000000// tar -t import * as fsm from '@isaacs/fs-minipass' import fs from 'node:fs' import { dirname, parse } from 'path' import { makeCommand } from './make-command.js' import type { TarOptions, TarOptionsFile, TarOptionsSyncFile, } from './options.js' import { Parser } from './parse.js' import { stripTrailingSlashes } from './strip-trailing-slashes.js' const onReadEntryFunction = (opt: TarOptions) => { const onReadEntry = opt.onReadEntry opt.onReadEntry = onReadEntry ? e => { onReadEntry(e) e.resume() } : e => e.resume() } // construct a filter that limits the file entries listed // include child entries if a dir is included export const filesFilter = (opt: TarOptions, files: string[]) => { const map = new Map( files.map(f => [stripTrailingSlashes(f), true]), ) const filter = opt.filter const mapHas = (file: string, r: string = ''): boolean => { const root = r || parse(file).root || '.' let ret: boolean if (file === root) ret = false else { const m = map.get(file) ret = m !== undefined ? m : mapHas(dirname(file), root) } map.set(file, ret) return ret } opt.filter = filter ? (file, entry) => filter(file, entry) && mapHas(stripTrailingSlashes(file)) : file => mapHas(stripTrailingSlashes(file)) } const listFileSync = (opt: TarOptionsSyncFile) => { const p = new Parser(opt) const file = opt.file let fd: number | undefined try { fd = fs.openSync(file, 'r') const stat: fs.Stats = fs.fstatSync(fd) const readSize: number = opt.maxReadSize || 16 * 1024 * 1024 if (stat.size < readSize) { const buf = Buffer.allocUnsafe(stat.size) const read = fs.readSync(fd, buf, 0, stat.size, 0) p.end(read === buf.byteLength ? buf : buf.subarray(0, read)) } else { let pos = 0 const buf = Buffer.allocUnsafe(readSize) while (pos < stat.size) { const bytesRead = fs.readSync(fd, buf, 0, readSize, pos) if (bytesRead === 0) break pos += bytesRead p.write(buf.subarray(0, bytesRead)) } p.end() } } finally { if (typeof fd === 'number') { try { fs.closeSync(fd) /* c8 ignore next */ } catch {} } } } const listFile = ( opt: TarOptionsFile, _files: string[], ): Promise => { const parse = new Parser(opt) const readSize = opt.maxReadSize || 16 * 1024 * 1024 const file = opt.file const p = new Promise((resolve, reject) => { parse.on('error', reject) parse.on('end', resolve) fs.stat(file, (er, stat) => { if (er) { reject(er) } else { const stream = new fsm.ReadStream(file, { readSize: readSize, size: stat.size, }) stream.on('error', reject) stream.pipe(parse) } }) }) return p } export const list = makeCommand( listFileSync, listFile, opt => new Parser(opt) as Parser & { sync: true }, opt => new Parser(opt), (opt, files) => { if (files?.length) filesFilter(opt, files) if (!opt.noResume) onReadEntryFunction(opt) }, ) isaacs-node-tar-0a52f00/src/make-command.ts000066400000000000000000000151041522005272700204760ustar00rootroot00000000000000import type { TarOptions, TarOptionsAsyncFile, TarOptionsAsyncNoFile, TarOptionsSyncFile, TarOptionsSyncNoFile, TarOptionsWithAliases, TarOptionsWithAliasesAsync, TarOptionsWithAliasesAsyncFile, TarOptionsWithAliasesAsyncNoFile, TarOptionsWithAliasesFile, TarOptionsWithAliasesNoFile, TarOptionsWithAliasesSync, TarOptionsWithAliasesSyncFile, TarOptionsWithAliasesSyncNoFile, } from './options.js' import { dealias, isAsyncFile, isAsyncNoFile, isSyncFile, isSyncNoFile, } from './options.js' export type CB = (er?: Error) => unknown export type TarCommand = { // async and no file specified (): AsyncClass (opt: TarOptionsWithAliasesAsyncNoFile): AsyncClass (entries: string[]): AsyncClass (opt: TarOptionsWithAliasesAsyncNoFile, entries: string[]): AsyncClass } & { // sync and no file (opt: TarOptionsWithAliasesSyncNoFile): SyncClass (opt: TarOptionsWithAliasesSyncNoFile, entries: string[]): SyncClass } & { // async and file (opt: TarOptionsWithAliasesAsyncFile): Promise (opt: TarOptionsWithAliasesAsyncFile, entries: string[]): Promise (opt: TarOptionsWithAliasesAsyncFile, cb: CB): Promise ( opt: TarOptionsWithAliasesAsyncFile, entries: string[], cb: CB, ): Promise } & { // sync and file (opt: TarOptionsWithAliasesSyncFile): void (opt: TarOptionsWithAliasesSyncFile, entries: string[]): void } & { // sync, maybe file (opt: TarOptionsWithAliasesSync): typeof opt extends ( TarOptionsWithAliasesFile ) ? void : typeof opt extends TarOptionsWithAliasesNoFile ? SyncClass : void | SyncClass ( opt: TarOptionsWithAliasesSync, entries: string[], ): typeof opt extends TarOptionsWithAliasesFile ? void : typeof opt extends TarOptionsWithAliasesNoFile ? SyncClass : void | SyncClass } & { // async, maybe file (opt: TarOptionsWithAliasesAsync): typeof opt extends ( TarOptionsWithAliasesFile ) ? Promise : typeof opt extends TarOptionsWithAliasesNoFile ? AsyncClass : Promise | AsyncClass ( opt: TarOptionsWithAliasesAsync, entries: string[], ): typeof opt extends TarOptionsWithAliasesFile ? Promise : typeof opt extends TarOptionsWithAliasesNoFile ? AsyncClass : Promise | AsyncClass (opt: TarOptionsWithAliasesAsync, cb: CB): Promise ( opt: TarOptionsWithAliasesAsync, entries: string[], cb: CB, ): typeof opt extends TarOptionsWithAliasesFile ? Promise : typeof opt extends TarOptionsWithAliasesNoFile ? never : Promise } & { // maybe sync, file (opt: TarOptionsWithAliasesFile): Promise | void ( opt: TarOptionsWithAliasesFile, entries: string[], ): typeof opt extends TarOptionsWithAliasesSync ? void : typeof opt extends TarOptionsWithAliasesAsync ? Promise : Promise | void (opt: TarOptionsWithAliasesFile, cb: CB): Promise ( opt: TarOptionsWithAliasesFile, entries: string[], cb: CB, ): typeof opt extends TarOptionsWithAliasesSync ? never : typeof opt extends TarOptionsWithAliasesAsync ? Promise : Promise } & { // maybe sync, no file (opt: TarOptionsWithAliasesNoFile): typeof opt extends ( TarOptionsWithAliasesSync ) ? SyncClass : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass : SyncClass | AsyncClass ( opt: TarOptionsWithAliasesNoFile, entries: string[], ): typeof opt extends TarOptionsWithAliasesSync ? SyncClass : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass : SyncClass | AsyncClass } & { // maybe sync, maybe file (opt: TarOptionsWithAliases): typeof opt extends ( TarOptionsWithAliasesFile ) ? typeof opt extends TarOptionsWithAliasesSync ? void : typeof opt extends TarOptionsWithAliasesAsync ? Promise : void | Promise : typeof opt extends TarOptionsWithAliasesNoFile ? typeof opt extends TarOptionsWithAliasesSync ? SyncClass : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass : SyncClass | AsyncClass : typeof opt extends TarOptionsWithAliasesSync ? SyncClass | void : typeof opt extends TarOptionsWithAliasesAsync ? AsyncClass | Promise : SyncClass | void | AsyncClass | Promise } & { // extras syncFile: (opt: TarOptionsSyncFile, entries: string[]) => void asyncFile: ( opt: TarOptionsAsyncFile, entries: string[], cb?: CB, ) => Promise syncNoFile: (opt: TarOptionsSyncNoFile, entries: string[]) => SyncClass asyncNoFile: ( opt: TarOptionsAsyncNoFile, entries: string[], ) => AsyncClass validate?: (opt: TarOptions, entries?: string[]) => void } export const makeCommand = ( syncFile: (opt: TarOptionsSyncFile, entries: string[]) => void, asyncFile: ( opt: TarOptionsAsyncFile, entries: string[], cb?: CB, ) => Promise, syncNoFile: (opt: TarOptionsSyncNoFile, entries: string[]) => SyncClass, asyncNoFile: ( opt: TarOptionsAsyncNoFile, entries: string[], ) => AsyncClass, validate?: (opt: TarOptions, entries?: string[]) => void, ): TarCommand => { return Object.assign( ( opt_: TarOptionsWithAliases | string[] = [], entries?: string[] | CB, cb?: CB, ) => { if (Array.isArray(opt_)) { entries = opt_ opt_ = {} } if (typeof entries === 'function') { cb = entries entries = undefined } entries = !entries ? [] : Array.from(entries) const opt = dealias(opt_) validate?.(opt, entries) if (isSyncFile(opt)) { if (typeof cb === 'function') { throw new TypeError( 'callback not supported for sync tar functions', ) } return syncFile(opt, entries) } else if (isAsyncFile(opt)) { const p = asyncFile(opt, entries) return cb ? p.then(() => cb(), cb) : p } else if (isSyncNoFile(opt)) { if (typeof cb === 'function') { throw new TypeError( 'callback not supported for sync tar functions', ) } return syncNoFile(opt, entries) } else if (isAsyncNoFile(opt)) { if (typeof cb === 'function') { throw new TypeError('callback only supported with file option') } return asyncNoFile(opt, entries) /* c8 ignore start */ } throw new Error('impossible options??') /* c8 ignore stop */ }, { syncFile, asyncFile, syncNoFile, asyncNoFile, validate, }, ) as TarCommand } isaacs-node-tar-0a52f00/src/mkdir.ts000066400000000000000000000135231522005272700172560ustar00rootroot00000000000000import { chownr, chownrSync } from 'chownr' import fs from 'node:fs' import fsp from 'node:fs/promises' import path from 'node:path' import { CwdError } from './cwd-error.js' import { normalizeWindowsPath } from './normalize-windows-path.js' import { SymlinkError } from './symlink-error.js' export type MkdirOptions = { uid?: number gid?: number processUid?: number processGid?: number umask?: number preserve: boolean unlink: boolean cwd: string mode: number } export type MkdirError = NodeJS.ErrnoException | CwdError | SymlinkError const checkCwd = ( dir: string, cb: (er?: null | MkdirError) => unknown, ) => { fs.stat(dir, (er, st) => { if (er || !st.isDirectory()) { er = new CwdError( dir, (er as NodeJS.ErrnoException)?.code || 'ENOTDIR', ) } cb(er) }) } /** * Wrapper around fs/promises.mkdir for tar's needs. * * The main purpose is to avoid creating directories if we know that * they already exist (and track which ones exist for this purpose), * and prevent entries from being extracted into symlinked folders, * if `preservePaths` is not set. */ export const mkdir = ( dir: string, opt: MkdirOptions, cb: (er?: null | MkdirError, made?: string) => void, ) => { dir = normalizeWindowsPath(dir) // if there's any overlap between mask and mode, // then we'll need an explicit chmod /* c8 ignore next */ const umask = opt.umask ?? 0o22 const mode = opt.mode | 0o0700 const needChmod = (mode & umask) !== 0 const uid = opt.uid const gid = opt.gid const doChown = typeof uid === 'number' && typeof gid === 'number' && (uid !== opt.processUid || gid !== opt.processGid) const preserve = opt.preserve const unlink = opt.unlink const cwd = normalizeWindowsPath(opt.cwd) const done = (er?: null | MkdirError, created?: string) => { if (er) { cb(er) } else { if (created && doChown) { chownr(created, uid, gid, er => done(er as NodeJS.ErrnoException)) } else if (needChmod) { fs.chmod(dir, mode, cb) } else { cb() } } } if (dir === cwd) { return checkCwd(dir, done) } if (preserve) { return fsp.mkdir(dir, { mode, recursive: true }).then( made => done(null, made ?? undefined), // oh, ts done, ) } const sub = normalizeWindowsPath(path.relative(cwd, dir)) const parts = sub.split('/') mkdir_(cwd, parts, mode, unlink, cwd, undefined, done) } const mkdir_ = ( base: string, parts: string[], mode: number, unlink: boolean, cwd: string, created: string | undefined, cb: (er?: null | MkdirError, made?: string) => void, ): void => { if (parts.length === 0) { return cb(null, created) } const p = parts.shift() const part = normalizeWindowsPath(path.resolve(base + '/' + p)) fs.mkdir( part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb), ) } const onmkdir = ( part: string, parts: string[], mode: number, unlink: boolean, cwd: string, created: string | undefined, cb: (er?: null | MkdirError, made?: string) => void, ) => (er?: null | NodeJS.ErrnoException) => { if (er) { fs.lstat(part, (statEr, st) => { if (statEr) { statEr.path = statEr.path && normalizeWindowsPath(statEr.path) cb(statEr) } else if (st.isDirectory()) { mkdir_(part, parts, mode, unlink, cwd, created, cb) } else if (unlink) { fs.unlink(part, er => { if (er) { return cb(er) } fs.mkdir( part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb), ) }) } else if (st.isSymbolicLink()) { return cb(new SymlinkError(part, part + '/' + parts.join('/'))) } else { cb(er) } }) } else { created = created || part mkdir_(part, parts, mode, unlink, cwd, created, cb) } } const checkCwdSync = (dir: string) => { let ok = false let code try { ok = fs.statSync(dir).isDirectory() } catch (er) { code = (er as NodeJS.ErrnoException)?.code } finally { if (!ok) { throw new CwdError(dir, code ?? 'ENOTDIR') } } } export const mkdirSync = (dir: string, opt: MkdirOptions) => { dir = normalizeWindowsPath(dir) // if there's any overlap between mask and mode, // then we'll need an explicit chmod /* c8 ignore next */ const umask = opt.umask ?? 0o22 const mode = opt.mode | 0o700 const needChmod = (mode & umask) !== 0 const uid = opt.uid const gid = opt.gid const doChown = typeof uid === 'number' && typeof gid === 'number' && (uid !== opt.processUid || gid !== opt.processGid) const preserve = opt.preserve const unlink = opt.unlink const cwd = normalizeWindowsPath(opt.cwd) const done = (created?: string | undefined) => { if (created && doChown) { chownrSync(created, uid, gid) } if (needChmod) { fs.chmodSync(dir, mode) } } if (dir === cwd) { checkCwdSync(cwd) return done() } if (preserve) { return done(fs.mkdirSync(dir, { mode, recursive: true }) ?? undefined) } const sub = normalizeWindowsPath(path.relative(cwd, dir)) const parts = sub.split('/') let created for ( let p = parts.shift(), part = cwd; p && (part += '/' + p); p = parts.shift() ) { part = normalizeWindowsPath(path.resolve(part)) try { fs.mkdirSync(part, mode) created = created || part } catch { const st = fs.lstatSync(part) if (st.isDirectory()) { continue } else if (unlink) { fs.unlinkSync(part) fs.mkdirSync(part, mode) created = created || part continue } else if (st.isSymbolicLink()) { return new SymlinkError(part, part + '/' + parts.join('/')) } } } return done(created) } isaacs-node-tar-0a52f00/src/mode-fix.ts000066400000000000000000000012451522005272700176560ustar00rootroot00000000000000export const modeFix = ( mode: number, isDir: boolean, portable: boolean, ) => { mode &= 0o7777 // in portable mode, use the minimum reasonable umask // if this system creates files with 0o664 by default // (as some linux distros do), then we'll write the // archive with 0o644 instead. Also, don't ever create // a file that is not readable/writable by the owner. if (portable) { mode = (mode | 0o600) & ~0o22 } // if dirs are readable, then they should be listable if (isDir) { if (mode & 0o400) { mode |= 0o100 } if (mode & 0o40) { mode |= 0o10 } if (mode & 0o4) { mode |= 0o1 } } return mode } isaacs-node-tar-0a52f00/src/normalize-unicode.ts000066400000000000000000000016251522005272700215740ustar00rootroot00000000000000// warning: extremely hot code path. // This has been meticulously optimized for use // within npm install on large package trees. // Do not edit without careful benchmarking. const normalizeCache: Record = Object.create(null) // Limit the size of this. Very low-sophistication LRU cache const MAX = 10000 const cache = new Set() export const normalizeUnicode = (s: string): string => { if (!cache.has(s)) { // shake out identical accents and ligatures normalizeCache[s] = s .normalize('NFD') .toLocaleLowerCase('en') .toLocaleUpperCase('en') } else { cache.delete(s) } cache.add(s) const ret = normalizeCache[s] as string let i = cache.size - MAX // only prune when we're 10% over the max if (i > MAX / 10) { for (const s of cache) { cache.delete(s) delete normalizeCache[s] if (--i <= 0) break } } return ret } isaacs-node-tar-0a52f00/src/normalize-windows-path.ts000066400000000000000000000007601522005272700225710ustar00rootroot00000000000000// on windows, either \ or / are valid directory separators. // on unix, \ is a valid character in filenames. // so, on windows, and only on windows, we replace all \ chars with /, // so that we can use / as our one and only directory separator char. const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform export const normalizeWindowsPath: (p: unknown) => string = platform !== 'win32' ? (p: unknown) => String(p) : (p: unknown) => String(p).replaceAll(/\\/g, '/') isaacs-node-tar-0a52f00/src/options.ts000066400000000000000000000574431522005272700176540ustar00rootroot00000000000000// turn tar(1) style args like `C` into the more verbose things like `cwd` import { type GzipOptions, type ZlibOptions } from 'minizlib' import { type Stats } from 'node:fs' import { type ReadEntry } from './read-entry.js' import { type WarnData } from './warn-method.js' import type { WriteEntry } from './write-entry.js' const argmap = new Map([ ['C', 'cwd'], ['f', 'file'], ['z', 'gzip'], ['P', 'preservePaths'], ['U', 'unlink'], ['strip-components', 'strip'], ['stripComponents', 'strip'], ['keep-newer', 'newer'], ['keepNewer', 'newer'], ['keep-newer-files', 'newer'], ['keepNewerFiles', 'newer'], ['k', 'keep'], ['keep-existing', 'keep'], ['keepExisting', 'keep'], ['m', 'noMtime'], ['no-mtime', 'noMtime'], ['p', 'preserveOwner'], ['L', 'follow'], ['h', 'follow'], ['onentry', 'onReadEntry'], ]) /** * The options that can be provided to tar commands. * * Note that some of these are only relevant for certain commands, since * they are specific to reading or writing. * * Aliases are provided in the {@link TarOptionsWithAliases} type. */ export interface TarOptions { ////////////////////////// // shared options /** * Perform all I/O operations synchronously. If the stream is ended * immediately, then it will be processed entirely synchronously. */ sync?: boolean /** * The tar file to be read and/or written. When this is set, a stream * is not returned. Asynchronous commands will return a promise indicating * when the operation is completed, and synchronous commands will return * immediately. */ file?: string /** * Treat warnings as crash-worthy errors. Defaults false. */ strict?: boolean /** * The effective current working directory for this tar command */ cwd?: string /** * When creating a tar archive, this can be used to compress it as well. * Set to `true` to use the default gzip options, or customize them as * needed. * * When reading, if this is unset, then the compression status will be * inferred from the archive data. This is generally best, unless you are * sure of the compression settings in use to create the archive, and want to * fail if the archive doesn't match expectations. */ gzip?: boolean | GzipOptions /** * When creating archives, preserve absolute and `..` paths in the archive, * rather than sanitizing them under the cwd. * * When extracting, allow absolute paths, paths containing `..`, and * extracting through symbolic links. By default, the root `/` is stripped * from absolute paths (eg, turning `/x/y/z` into `x/y/z`), paths containing * `..` are not extracted, and any file whose location would be modified by a * symbolic link is not extracted. * * **WARNING** This is almost always unsafe, and must NEVER be used on * archives from untrusted sources, such as user input, and every entry must * be validated to ensure it is safe to write. Even if the input is not * malicious, mistakes can cause a lot of damage! */ preservePaths?: boolean /** * When extracting, do not set the `mtime` value for extracted entries to * match the `mtime` in the archive. * * When creating archives, do not store the `mtime` value in the entry. Note * that this prevents properly using other mtime-based features (such as * `tar.update` or the `newer` option) with the resulting archive. */ noMtime?: boolean /** * Set to `true` or an object with settings for `zlib.BrotliCompress()` to * create a brotli-compressed archive * * When extracting, this will cause the archive to be treated as a * brotli-compressed file if set to `true` or a ZlibOptions object. * * If set `false`, then brotli options will not be used. * * If this, the `gzip`, and `zstd` options are left `undefined`, then tar * will attempt to infer the brotli compression status, but can only do so * based on the filename. If the filename ends in `.tbr` or `.tar.br`, and * the first 512 bytes are not a valid tar header, then brotli decompression * will be attempted. */ brotli?: boolean | ZlibOptions /** * Set to `true` or an object with settings for `zstd.compress()` to * create a zstd-compressed archive * * When extracting, this will cause the archive to be treated as a * zstd-compressed file if set to `true` or a ZlibOptions object. * * If set `false`, then zstd options will not be used. * * If this, the `gzip`, and `brotli` options are left `undefined`, then tar * will attempt to infer the zstd compression status, but can only do so * based on the filename. If the filename ends in `.tzst` or `.tar.zst`, and * the first 512 bytes are not a valid tar header, then zstd decompression * will be attempted. */ zstd?: boolean | ZlibOptions /** * A function that is called with `(path, stat)` when creating an archive, or * `(path, entry)` when extracting. Return true to process the file/entry, or * false to exclude it. */ filter?: (path: string, entry: Stats | ReadEntry) => boolean /** * A function that gets called for any warning encountered. * * Note: if `strict` is set, then the warning will throw, and this method * will not be called. */ onwarn?: (code: string, message: string, data: WarnData) => unknown /** * The maximum allowed ratio of decompressed bytes to compressed bytes when * reading gzip, brotli, or zstd-compressed archives. * * This defaults to `1000` and aborts extraction or parsing when exceeded. * Set to `Infinity` to disable the limit. */ maxDecompressionRatio?: number ////////////////////////// // extraction options /** * When extracting, 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 /** * When extracting, strip the specified number of path portions from the * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be * extracted to `{cwd}/c/d`. * * Any entry whose entire path is stripped will be excluded. */ strip?: number /** * When extracting, keep the existing file on disk if it's newer than the * file in the archive. */ newer?: boolean /** * When extracting, do not overwrite existing files at all. */ keep?: boolean /** * When extracting, set the `uid` and `gid` of extracted entries to the `uid` * and `gid` fields in the archive. 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 /** * The maximum depth of subfolders to extract into. This defaults to 1024. * Anything deeper than the limit will raise a warning and skip the entry. * Set to `Infinity` to remove the limitation. */ maxDepth?: number /** * When extracting, force all created files and directories, 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 the `gid` * option. */ uid?: number /** * When extracting, force all created files and directories, 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 the `uid` * option. */ gid?: number /** * When extracting, 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. * * Note that using an asynchronous stream type with the `transform` option * will cause undefined behavior in synchronous extractions. * [MiniPass](http://npm.im/minipass)-based streams are designed for this use * case. */ transform?: (entry: ReadEntry) => ReadEntry /** * Call `chmod()` to ensure that extracted files match the entry's mode * field. Without this field set, all mode fields in archive entries are a * best effort attempt only. * * Setting this necessitates a call to the deprecated `process.umask()` * method to determine the default umask value, unless a `processUmask` * config is provided as well. * * If not set, tar will attempt to create file system entries with whatever * mode is provided, and let the implicit process `umask` apply normally, but * if a file already exists to be written to, then its existing mode will not * be modified. * * When setting `chmod: true`, it is highly recommend to set the * {@link TarOptions#processUmask} option as well, to avoid the call to the * deprecated (and thread-unsafe) `process.umask()` method. */ chmod?: boolean /** * When setting the {@link TarOptions#chmod} option to `true`, you may * provide a value here to avoid having to call the deprecated and * thread-unsafe `process.umask()` method. * * This has no effect with `chmod` is not set to true, as mode values are not * set explicitly anyway. If `chmod` is set to `true`, and a value is not * provided here, then `process.umask()` must be called, which will result in * deprecation warnings. * * The most common values for this are `0o22` (resulting in directories * created with mode `0o755` and files with `0o644` by default) and `0o2` * (resulting in directores created with mode `0o775` and files `0o664`, so * they are group-writable). */ processUmask?: number ////////////////////////// // archive creation options /** * When parsing/listing archives, `entry` streams are by default resumed * (set into "flowing" mode) immediately after the call to `onReadEntry()`. * Set `noResume: true` to suppress this behavior. * * Note that when this is set, the stream will never complete until the * data is consumed somehow. * * Set automatically in extract operations, since the entry is piped to * a file system entry right away. Only relevant when parsing. */ noResume?: boolean /** * When creating, updating, or replacing within archives, this method will * be called with each WriteEntry that is created. */ onWriteEntry?: (entry: WriteEntry) => unknown /** * When extracting or listing archives, this method will be called with * each entry that is not excluded by a `filter`. * * Important when listing archives synchronously from a file, because there * is otherwise no way to interact with the data! */ onReadEntry?: (entry: ReadEntry) => unknown /** * Pack the targets of symbolic links rather than the link itself. */ follow?: boolean /** * When creating archives, omit any 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 * for other time-based operations such as `tar.update`. Additionally, `mode` * is set to a "reasonable default" for mose unix systems, based on an * effective `umask` of `0o22`. * * This also defaults the `portable` option in the gzip configs when creating * a compressed archive, in order to produce deterministic archives that are * not operating-system specific. */ portable?: boolean /** * When creating archives, do not recursively archive the contents of * directories. By default, archiving a directory archives all of its * contents as well. */ noDirRecurse?: boolean /** * Suppress Pax extended headers when creating archives. Note that this means * long paths and linkpaths will be truncated, and large or negative numeric * values may be interpreted incorrectly. */ noPax?: boolean /** * Set to a `Date` object to force a specific `mtime` value for everything * written to an archive. * * This is useful when creating archives that are intended to be * deterministic based on their contents, irrespective of the file's last * modification time. * * Overridden by `noMtime`. */ mtime?: Date /** * A path portion to prefix onto the entries added to an archive. */ prefix?: string /** * The mode to set on any created file archive, defaults to 0o666 * masked by the process umask, often resulting in 0o644. * * This does *not* affect the mode fields of individual entries, or the * mode status of extracted entries on the filesystem. */ mode?: number ////////////////////////// // internal options /** * A cache of mtime values, to avoid having to stat the same file repeatedly. * * @internal */ mtimeCache?: Map /** * maximum buffer size for `fs.read()` operations. * * @internal */ maxReadSize?: number /** * Filter modes of entries being unpacked, like `process.umask()` * * @internal */ umask?: number /** * Default mode for directories. Used for all implicitly created directories, * and any directories in the archive that do not have a mode field. * * @internal */ dmode?: number /** * default mode for files * * @internal */ fmode?: number /** * Map that tracks which directories already exist, for extraction * * @internal */ dirCache?: Map /** * maximum supported size of meta entries. Defaults to 1MB * * @internal */ maxMetaEntrySize?: number /** * A Map object containing the device and inode value for any file whose * `nlink` value is greater than 1, to identify hard links when creating * archives. * * @internal */ linkCache?: Map /** * A map object containing the results of `fs.readdir()` calls. * * @internal */ readdirCache?: Map /** * A cache of all `lstat` results, for use in creating archives. * * @internal */ statCache?: Map /** * Number of concurrent jobs to run when creating archives. * * Defaults to 4. * * @internal */ jobs?: number /** * Automatically set to true on Windows systems. * * When extracting, causes behavior where filenames containing `<|>?:` * characters are converted to windows-compatible escape sequences in the * created filesystem entries. * * When packing, causes behavior where paths replace `\` with `/`, and * filenames containing the windows-compatible escaped forms of `<|>?:` are * converted to actual `<|>?:` characters in the archive. * * @internal */ win32?: boolean /** * For `WriteEntry` objects, the absolute path to the entry on the * filesystem. By default, this is `resolve(cwd, entry.path)`, but it can be * overridden explicitly. * * @internal */ absolute?: string /** * Used with Parser stream interface, to attach and take over when the * stream is completely parsed. If this is set, then the prefinish, * finish, and end events will not fire, and are the responsibility of * the ondone method to emit properly. * * @internal */ ondone?: () => void /** * Mostly for testing, but potentially useful in some cases. * Forcibly trigger a chown on every entry, no matter what. */ forceChown?: boolean /** * ambiguous deprecated name for {@link onReadEntry} * * @deprecated */ onentry?: (entry: ReadEntry) => unknown } export type TarOptionsSync = TarOptions & { sync: true } export type TarOptionsAsync = TarOptions & { sync?: false } export type TarOptionsFile = TarOptions & { file: string } export type TarOptionsNoFile = TarOptions & { file?: undefined } export type TarOptionsSyncFile = TarOptionsSync & TarOptionsFile export type TarOptionsAsyncFile = TarOptionsAsync & TarOptionsFile export type TarOptionsSyncNoFile = TarOptionsSync & TarOptionsNoFile export type TarOptionsAsyncNoFile = TarOptionsAsync & TarOptionsNoFile export type LinkCacheKey = `${number}:${number}` export interface TarOptionsWithAliases extends TarOptions { /** * The effective current working directory for this tar command */ C?: TarOptions['cwd'] /** * The tar file to be read and/or written. When this is set, a stream * is not returned. Asynchronous commands will return a promise indicating * when the operation is completed, and synchronous commands will return * immediately. */ f?: TarOptions['file'] /** * When creating a tar archive, this can be used to compress it as well. * Set to `true` to use the default gzip options, or customize them as * needed. * * When reading, if this is unset, then the compression status will be * inferred from the archive data. This is generally best, unless you are * sure of the compression settings in use to create the archive, and want to * fail if the archive doesn't match expectations. */ z?: TarOptions['gzip'] /** * When creating archives, preserve absolute and `..` paths in the archive, * rather than sanitizing them under the cwd. * * When extracting, allow absolute paths, paths containing `..`, and * extracting through symbolic links. By default, the root `/` is stripped * from absolute paths (eg, turning `/x/y/z` into `x/y/z`), paths containing * `..` are not extracted, and any file whose location would be modified by a * symbolic link is not extracted. * * **WARNING** This is almost always unsafe, and must NEVER be used on * archives from untrusted sources, such as user input, and every entry must * be validated to ensure it is safe to write. Even if the input is not * malicious, mistakes can cause a lot of damage! */ P?: TarOptions['preservePaths'] /** * When extracting, 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. */ U?: TarOptions['unlink'] /** * When extracting, strip the specified number of path portions from the * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be * extracted to `{cwd}/c/d`. */ 'strip-components'?: TarOptions['strip'] /** * When extracting, strip the specified number of path portions from the * entry path. For example, with `{strip: 2}`, the entry `a/b/c/d` would be * extracted to `{cwd}/c/d`. */ stripComponents?: TarOptions['strip'] /** * When extracting, keep the existing file on disk if it's newer than the * file in the archive. */ 'keep-newer'?: TarOptions['newer'] /** * When extracting, keep the existing file on disk if it's newer than the * file in the archive. */ keepNewer?: TarOptions['newer'] /** * When extracting, keep the existing file on disk if it's newer than the * file in the archive. */ 'keep-newer-files'?: TarOptions['newer'] /** * When extracting, keep the existing file on disk if it's newer than the * file in the archive. */ keepNewerFiles?: TarOptions['newer'] /** * When extracting, do not overwrite existing files at all. */ k?: TarOptions['keep'] /** * When extracting, do not overwrite existing files at all. */ 'keep-existing'?: TarOptions['keep'] /** * When extracting, do not overwrite existing files at all. */ keepExisting?: TarOptions['keep'] /** * When extracting, do not set the `mtime` value for extracted entries to * match the `mtime` in the archive. * * When creating archives, do not store the `mtime` value in the entry. Note * that this prevents properly using other mtime-based features (such as * `tar.update` or the `newer` option) with the resulting archive. */ m?: TarOptions['noMtime'] /** * When extracting, do not set the `mtime` value for extracted entries to * match the `mtime` in the archive. * * When creating archives, do not store the `mtime` value in the entry. Note * that this prevents properly using other mtime-based features (such as * `tar.update` or the `newer` option) with the resulting archive. */ 'no-mtime'?: TarOptions['noMtime'] /** * When extracting, set the `uid` and `gid` of extracted entries to the `uid` * and `gid` fields in the archive. 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. */ p?: TarOptions['preserveOwner'] /** * Pack the targets of symbolic links rather than the link itself. */ L?: TarOptions['follow'] /** * Pack the targets of symbolic links rather than the link itself. */ h?: TarOptions['follow'] /** * Deprecated option. Set explicitly false to set `chmod: true`. Ignored * if {@link TarOptions#chmod} is set to any boolean value. * * @deprecated */ noChmod?: boolean } export type TarOptionsWithAliasesSync = TarOptionsWithAliases & { sync: true } export type TarOptionsWithAliasesAsync = TarOptionsWithAliases & { sync?: false } export type TarOptionsWithAliasesFile = | (TarOptionsWithAliases & { file: string }) | (TarOptionsWithAliases & { f: string }) export type TarOptionsWithAliasesSyncFile = TarOptionsWithAliasesSync & TarOptionsWithAliasesFile export type TarOptionsWithAliasesAsyncFile = TarOptionsWithAliasesAsync & TarOptionsWithAliasesFile export type TarOptionsWithAliasesNoFile = TarOptionsWithAliases & { f?: undefined file?: undefined } export type TarOptionsWithAliasesSyncNoFile = TarOptionsWithAliasesSync & TarOptionsWithAliasesNoFile export type TarOptionsWithAliasesAsyncNoFile = TarOptionsWithAliasesAsync & TarOptionsWithAliasesNoFile export const isSyncFile = ( o: O, ): o is O & TarOptionsSyncFile => !!o.sync && !!o.file export const isAsyncFile = ( o: O, ): o is O & TarOptionsAsyncFile => !o.sync && !!o.file export const isSyncNoFile = ( o: O, ): o is O & TarOptionsSyncNoFile => !!o.sync && !o.file export const isAsyncNoFile = ( o: O, ): o is O & TarOptionsAsyncNoFile => !o.sync && !o.file export const isSync = ( o: O, ): o is O & TarOptionsSync => !!o.sync export const isAsync = ( o: O, ): o is O & TarOptionsAsync => !o.sync export const isFile = ( o: O, ): o is O & TarOptionsFile => !!o.file export const isNoFile = ( o: O, ): o is O & TarOptionsNoFile => !o.file const dealiasKey = (k: keyof TarOptionsWithAliases): keyof TarOptions => { const d = argmap.get(k) if (d) return d return k as keyof TarOptions } export const dealias = (opt: TarOptionsWithAliases = {}): TarOptions => { if (!opt) return {} const result: Record = {} for (const [key, v] of Object.entries(opt) as [ keyof TarOptionsWithAliases, unknown, ][]) { // TS doesn't know that aliases are going to always be the same type const k = dealiasKey(key) result[k] = v } // affordance for deprecated noChmod -> chmod if (result.chmod === undefined && result.noChmod === false) { result.chmod = true } delete result.noChmod return result as TarOptions } isaacs-node-tar-0a52f00/src/pack.ts000066400000000000000000000346731522005272700170770ustar00rootroot00000000000000// A readable tar stream creator // Technically, this is a transform stream that you write paths into, // and tar format comes out of. // The `add()` method is like `write()` but returns this, // and end() return `this` as well, so you can // do `new Pack(opt).add('files').add('dir').end().pipe(output) // You could also do something like: // streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar')) import fs, { type Stats } from 'fs' import { WriteEntry, WriteEntrySync, WriteEntryTar, } from './write-entry.js' export class PackJob { path: string absolute: string entry?: WriteEntry | WriteEntryTar stat?: Stats readdir?: string[] pending: boolean = false pendingLink: boolean = false ignore: boolean = false piped: boolean = false constructor(path: string, absolute: string) { this.path = path || './' this.absolute = absolute } } import { Minipass } from 'minipass' import * as zlib from 'minizlib' import { Yallist } from 'yallist' import type { ReadEntry } from './read-entry.js' import type { WarnEvent } from './warn-method.js' import { warnMethod, type WarnData, type Warner } from './warn-method.js' const EOF = Buffer.alloc(1024) const ONSTAT = Symbol('onStat') const ENDED = Symbol('ended') const QUEUE = Symbol('queue') const PENDINGLINKS = Symbol('pendingLinks') const CURRENT = Symbol('current') const PROCESS = Symbol('process') const PROCESSING = Symbol('processing') const PROCESSJOB = Symbol('processJob') const JOBS = Symbol('jobs') const JOBDONE = Symbol('jobDone') const ADDFSENTRY = Symbol('addFSEntry') const ADDTARENTRY = Symbol('addTarEntry') const STAT = Symbol('stat') const READDIR = Symbol('readdir') const ONREADDIR = Symbol('onreaddir') const PIPE = Symbol('pipe') const ENTRY = Symbol('entry') const ENTRYOPT = Symbol('entryOpt') const WRITEENTRYCLASS = Symbol('writeEntryClass') const WRITE = Symbol('write') const ONDRAIN = Symbol('ondrain') import path from 'path' import { normalizeWindowsPath } from './normalize-windows-path.js' import type { LinkCacheKey, TarOptions } from './options.js' export class Pack extends Minipass> implements Warner { sync: boolean = false opt: TarOptions cwd: string maxReadSize?: number preservePaths: boolean strict: boolean noPax: boolean prefix: string linkCache: Exclude statCache: Exclude file: string portable: boolean zip?: zlib.BrotliCompress | zlib.Gzip | zlib.ZstdCompress readdirCache: Exclude noDirRecurse: boolean follow: boolean noMtime: boolean mtime?: Date filter: Exclude jobs: number; [WRITEENTRYCLASS]: typeof WriteEntry | typeof WriteEntrySync onWriteEntry?: (entry: WriteEntry) => void; // Note: we actually DO need a linked list here, because we // shift() to update the head of the list where we start, but still // while that happens, need to know what the next item in the queue // will be. Since we do multiple jobs in parallel, it's not as simple // as just an Array.shift(), since that would lose the information about // the next job in the list. We could add a .next field on the PackJob // class, but then we'd have to be tracking the tail of the queue the // whole time, and Yallist just does that for us anyway. [QUEUE]: Yallist; [PENDINGLINKS] = new Map(); [JOBS]: number = 0; [PROCESSING]: boolean = false; [ENDED]: boolean = false constructor(opt: TarOptions = {}) { super() this.opt = opt this.file = opt.file || '' this.cwd = opt.cwd || process.cwd() this.maxReadSize = opt.maxReadSize this.preservePaths = !!opt.preservePaths this.strict = !!opt.strict this.noPax = !!opt.noPax this.prefix = normalizeWindowsPath(opt.prefix || '') this.linkCache = opt.linkCache || new Map() this.statCache = opt.statCache || new Map() this.readdirCache = opt.readdirCache || new Map() this.onWriteEntry = opt.onWriteEntry this[WRITEENTRYCLASS] = WriteEntry if (typeof opt.onwarn === 'function') { this.on('warn', opt.onwarn) } this.portable = !!opt.portable if (opt.gzip || opt.brotli || opt.zstd) { if ( (opt.gzip ? 1 : 0) + (opt.brotli ? 1 : 0) + (opt.zstd ? 1 : 0) > 1 ) { throw new TypeError('gzip, brotli, zstd are mutually exclusive') } if (opt.gzip) { if (typeof opt.gzip !== 'object') { opt.gzip = {} } if (this.portable) { opt.gzip.portable = true } this.zip = new zlib.Gzip(opt.gzip) } if (opt.brotli) { if (typeof opt.brotli !== 'object') { opt.brotli = {} } this.zip = new zlib.BrotliCompress(opt.brotli) } if (opt.zstd) { if (typeof opt.zstd !== 'object') { opt.zstd = {} } this.zip = new zlib.ZstdCompress(opt.zstd) } /* c8 ignore next */ if (!this.zip) throw new Error('impossible') const zip = this.zip zip.on('data', chunk => super.write(chunk as unknown as string)) zip.on('end', () => super.end()) zip.on('drain', () => this[ONDRAIN]()) this.on('resume', () => zip.resume()) } else { this.on('drain', this[ONDRAIN]) } this.noDirRecurse = !!opt.noDirRecurse this.follow = !!opt.follow this.noMtime = !!opt.noMtime if (opt.mtime) this.mtime = opt.mtime this.filter = typeof opt.filter === 'function' ? opt.filter : () => true this[QUEUE] = new Yallist() this[JOBS] = 0 this.jobs = Number(opt.jobs) || 4 this[PROCESSING] = false this[ENDED] = false } [WRITE](chunk: Buffer) { return super.write(chunk as unknown as string) } add(path: string | ReadEntry) { this.write(path) return this } end(cb?: () => void): this end(path: string | ReadEntry, cb?: () => void): this end( path: string | ReadEntry, encoding?: Minipass.Encoding, cb?: () => void, ): this end( path?: string | ReadEntry | (() => void), encoding?: Minipass.Encoding | (() => void), cb?: () => void, ) { /* c8 ignore start */ if (typeof path === 'function') { cb = path path = undefined } if (typeof encoding === 'function') { cb = encoding encoding = undefined } /* c8 ignore stop */ if (path) { this.add(path) } this[ENDED] = true this[PROCESS]() /* c8 ignore next */ if (cb) cb() return this } write(path: string | ReadEntry) { if (this[ENDED]) { throw new Error('write after end') } if (typeof path === 'string') { this[ADDFSENTRY](path) } else { this[ADDTARENTRY](path) } return this.flowing } [ADDTARENTRY](p: ReadEntry) { const absolute = normalizeWindowsPath(path.resolve(this.cwd, p.path)) // in this case, we don't have to wait for the stat if (!this.filter(p.path, p)) { p.resume() } else { const job = new PackJob(p.path, absolute) job.entry = new WriteEntryTar(p, this[ENTRYOPT](job)) job.entry.on('end', () => this[JOBDONE](job)) this[JOBS] += 1 this[QUEUE].push(job) } this[PROCESS]() } [ADDFSENTRY](p: string) { const absolute = normalizeWindowsPath(path.resolve(this.cwd, p)) this[QUEUE].push(new PackJob(p, absolute)) this[PROCESS]() } [STAT](job: PackJob) { job.pending = true this[JOBS] += 1 const stat = this.follow ? 'stat' : 'lstat' fs[stat](job.absolute, (er, stat) => { job.pending = false this[JOBS] -= 1 if (er) { this.emit('error', er) } else { this[ONSTAT](job, stat) } }) } [ONSTAT](job: PackJob, stat: Stats) { this.statCache.set(job.absolute, stat) job.stat = stat // now we have the stat, we can filter it. if (!this.filter(job.path, stat)) { job.ignore = true } else if ( stat.isFile() && stat.nlink > 1 && !this.linkCache.get(`${stat.dev}:${stat.ino}`) && !this.sync ) { // if it's not filtered, and it's a new File entry, and next anyway // process right away in case any pending Link entries are about // to try to link to it. if (job === this[CURRENT]) { this[PROCESSJOB](job) } else { // if it's NOT the current entry, it needs to be deferred, // so that the link target can be built first. const key: LinkCacheKey = `${stat.dev}:${stat.ino}` const pending = this[PENDINGLINKS].get(key) if (pending) pending.push(job) else this[PENDINGLINKS].set(key, [job]) job.pendingLink = true job.pending = true } } this[PROCESS]() } [READDIR](job: PackJob) { job.pending = true this[JOBS] += 1 fs.readdir(job.absolute, (er, entries) => { job.pending = false this[JOBS] -= 1 if (er) { return this.emit('error', er) } this[ONREADDIR](job, entries) }) } [ONREADDIR](job: PackJob, entries: string[]) { this.readdirCache.set(job.absolute, entries) job.readdir = entries this[PROCESS]() } [PROCESS]() { if (this[PROCESSING]) { return } this[PROCESSING] = true for ( let w = this[QUEUE].head; !!w && this[JOBS] < this.jobs; w = w.next ) { this[PROCESSJOB](w.value) if (w.value.ignore) { const p = w.next this[QUEUE].removeNode(w) w.next = p } } this[PROCESSING] = false if (this[ENDED] && this[QUEUE].length === 0 && this[JOBS] === 0) { if (this.zip) { this.zip.end(EOF) } else { super.write(EOF as unknown as string) super.end() } } } get [CURRENT]() { return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value } [JOBDONE](job: PackJob) { this[QUEUE].shift() this[JOBS] -= 1 const { stat } = job if (stat && stat.isFile() && stat.nlink > 1) { // might be a file with pending links const key: LinkCacheKey = `${stat.dev}:${stat.ino}` const pending = this[PENDINGLINKS].get(key) if (pending) { this[PENDINGLINKS].delete(key) for (const job of pending) { job.pending = false this[PROCESSJOB](job) } } } this[PROCESS]() } [PROCESSJOB](job: PackJob) { if (job.pending && job.pendingLink && job === this[CURRENT]) { // At least one of the links to this file are not being included // in the tarball, so we need to just proceed. job.pending = false job.pendingLink = false } if (job.pending) { return } if (job.entry) { if (job === this[CURRENT] && !job.piped) { this[PIPE](job) } return } if (!job.stat) { const sc = this.statCache.get(job.absolute) if (sc) { this[ONSTAT](job, sc) } else { this[STAT](job) } } if (!job.stat) { return } // filtered out! if (job.ignore) { return } if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) { const rc = this.readdirCache.get(job.absolute) if (rc) { this[ONREADDIR](job, rc) } else { this[READDIR](job) } if (!job.readdir) { return } } // we know it doesn't have an entry, because that got checked above job.entry = this[ENTRY](job) if (!job.entry) { job.ignore = true return } if (job === this[CURRENT] && !job.piped) { this[PIPE](job) } } [ENTRYOPT](job: PackJob): TarOptions { return { onwarn: (code, msg, data) => this.warn(code, msg, data), noPax: this.noPax, cwd: this.cwd, absolute: job.absolute, preservePaths: this.preservePaths, maxReadSize: this.maxReadSize, strict: this.strict, portable: this.portable, linkCache: this.linkCache, statCache: this.statCache, noMtime: this.noMtime, mtime: this.mtime, prefix: this.prefix, onWriteEntry: this.onWriteEntry, } } [ENTRY](job: PackJob) { this[JOBS] += 1 try { const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job)) return e .on('end', () => this[JOBDONE](job)) .on('error', er => this.emit('error', er)) } catch (er) { this.emit('error', er) } } [ONDRAIN]() { if (this[CURRENT] && this[CURRENT].entry) { this[CURRENT].entry.resume() } } // like .pipe() but using super, because our write() is special [PIPE](job: PackJob) { job.piped = true if (job.readdir) { job.readdir.forEach(entry => { const p = job.path const base = p === './' ? '' : p.replace(/\/*$/, '/') this[ADDFSENTRY](base + entry) }) } const source = job.entry const zip = this.zip /* c8 ignore start */ if (!source) throw new Error('cannot pipe without source') /* c8 ignore stop */ if (zip) { source.on('data', chunk => { if (!zip.write(chunk)) { source.pause() } }) } else { source.on('data', chunk => { if (!super.write(chunk as unknown as string)) { source.pause() } }) } } pause() { if (this.zip) { this.zip.pause() } return super.pause() } warn(code: string, message: string | Error, data: WarnData = {}): void { warnMethod(this, code, message, data) } } export class PackSync extends Pack { sync: true = true constructor(opt: TarOptions) { super(opt) this[WRITEENTRYCLASS] = WriteEntrySync } // pause/resume are no-ops in sync streams. pause() {} resume() {} [STAT](job: PackJob) { const stat = this.follow ? 'statSync' : 'lstatSync' this[ONSTAT](job, fs[stat](job.absolute)) } [READDIR](job: PackJob) { this[ONREADDIR](job, fs.readdirSync(job.absolute)) } // gotta get it all in this tick [PIPE](job: PackJob) { const source = job.entry const zip = this.zip if (job.readdir) { job.readdir.forEach(entry => { const p = job.path const base = p === './' ? '' : p.replace(/\/*$/, '/') this[ADDFSENTRY](base + entry) }) } /* c8 ignore start */ if (!source) throw new Error('Cannot pipe without source') /* c8 ignore stop */ if (zip) { source.on('data', chunk => { zip.write(chunk) }) } else { source.on('data', chunk => { super[WRITE](chunk) }) } } } isaacs-node-tar-0a52f00/src/parse.ts000066400000000000000000000517211522005272700172640ustar00rootroot00000000000000// this[BUFFER] is the remainder of a chunk if we're waiting for // the full 512 bytes of a header to come in. We will Buffer.concat() // it to the next write(), which is a mem copy, but a small one. // // this[QUEUE] is a list of entries that haven't been emitted // yet this can only get filled up if the user keeps write()ing after // a write() returns false, or does a write() with more than one entry // // We don't buffer chunks, we always parse them and either create an // entry, or push it into the active entry. The ReadEntry class knows // to throw data away if .ignore=true // // Shift entry off the buffer when it emits 'end', and emit 'entry' for // the next one in the list. // // At any time, we're pushing body chunks into the entry at WRITEENTRY, // and waiting for 'end' on the entry at READENTRY // // ignored entries get .resume() called on them straight away import { EventEmitter as EE } from 'events' import { BrotliDecompress, Unzip, ZstdDecompress } from 'minizlib' import { Header } from './header.js' import type { TarOptions } from './options.js' import { Pax } from './pax.js' import { ReadEntry } from './read-entry.js' import { warnMethod, type WarnData, type Warner } from './warn-method.js' const maxMetaEntrySize = 1024 * 1024 const gzipHeader = Buffer.from([0x1f, 0x8b]) const zstdHeader = Buffer.from([0x28, 0xb5, 0x2f, 0xfd]) const ZIP_HEADER_LEN = Math.max(gzipHeader.length, zstdHeader.length) const STATE = Symbol('state') const WRITEENTRY = Symbol('writeEntry') const READENTRY = Symbol('readEntry') const NEXTENTRY = Symbol('nextEntry') const PROCESSENTRY = Symbol('processEntry') const EX = Symbol('extendedHeader') const GEX = Symbol('globalExtendedHeader') const META = Symbol('meta') const EMITMETA = Symbol('emitMeta') const BUFFER = Symbol('buffer') const QUEUE = Symbol('queue') const ENDED = Symbol('ended') const EMITTEDEND = Symbol('emittedEnd') const EMIT = Symbol('emit') const UNZIP = Symbol('unzip') const CONSUMECHUNK = Symbol('consumeChunk') const CONSUMECHUNKSUB = Symbol('consumeChunkSub') const CONSUMEBODY = Symbol('consumeBody') const CONSUMEMETA = Symbol('consumeMeta') const CONSUMEHEADER = Symbol('consumeHeader') const CONSUMING = Symbol('consuming') const BUFFERCONCAT = Symbol('bufferConcat') const MAYBEEND = Symbol('maybeEnd') const WRITING = Symbol('writing') const ABORTED = Symbol('aborted') const DONE = Symbol('onDone') const SAW_VALID_ENTRY = Symbol('sawValidEntry') const SAW_NULL_BLOCK = Symbol('sawNullBlock') const SAW_EOF = Symbol('sawEOF') const CLOSESTREAM = Symbol('closeStream') const MAX_DECOMPRESSION_RATIO = 1000 const COMPRESSEDBYTESREAD = Symbol('compressedBytesRead') const DECOMPRESSEDBYTESREAD = Symbol('decompressedBytesRead') const CHECKDECOMPRESSIONRATIO = Symbol('checkDecompressionRatio') const noop = () => true export type State = 'begin' | 'header' | 'ignore' | 'meta' | 'body' export class Parser extends EE implements Warner { file: string strict: boolean maxMetaEntrySize: number filter: Exclude brotli?: TarOptions['brotli'] zstd?: TarOptions['zstd'] maxDecompressionRatio: number writable: true = true readable: false = false; [QUEUE]: (ReadEntry | [string | symbol, unknown, unknown])[] = []; [BUFFER]?: Buffer; [READENTRY]?: ReadEntry; [WRITEENTRY]?: ReadEntry; [STATE]: State = 'begin'; [META]: string = ''; [EX]?: Pax; [GEX]?: Pax; [ENDED]: boolean = false; [UNZIP]?: false | Unzip | BrotliDecompress | ZstdDecompress; [ABORTED]: boolean = false; [SAW_VALID_ENTRY]?: boolean; [SAW_NULL_BLOCK]: boolean = false; [SAW_EOF]: boolean = false; [WRITING]: boolean = false; [CONSUMING]: boolean = false; [EMITTEDEND]: boolean = false; [COMPRESSEDBYTESREAD]: number = 0; [DECOMPRESSEDBYTESREAD]: number = 0 constructor(opt: TarOptions = {}) { super() this.file = opt.file || '' // these BADARCHIVE errors can't be detected early. listen on DONE. this.on(DONE, () => { if (this[STATE] === 'begin' || this[SAW_VALID_ENTRY] === false) { // either less than 1 block of data, or all entries were invalid. // Either way, probably not even a tarball. this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format') } }) if (opt.ondone) { this.on(DONE, opt.ondone) } else { this.on(DONE, () => { this.emit('prefinish') this.emit('finish') this.emit('end') }) } this.strict = !!opt.strict this.maxDecompressionRatio = typeof opt.maxDecompressionRatio === 'number' ? opt.maxDecompressionRatio : MAX_DECOMPRESSION_RATIO this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize this.filter = typeof opt.filter === 'function' ? opt.filter : noop // Unlike gzip, brotli doesn't have any magic bytes to identify it // Users need to explicitly tell us they're extracting a brotli file // Or we infer from the file extension const isTBR = opt.file && (opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr')) // if it's a tbr file it MIGHT be brotli, but we don't know until // we look at it and verify it's not a valid tar file. this.brotli = !(opt.gzip || opt.zstd) && opt.brotli !== undefined ? opt.brotli : isTBR ? undefined : false // zstd has magic bytes to identify it, but we also support explicit options // and file extension detection const isTZST = opt.file && (opt.file.endsWith('.tar.zst') || opt.file.endsWith('.tzst')) this.zstd = !(opt.gzip || opt.brotli) && opt.zstd !== undefined ? opt.zstd : isTZST ? true : undefined // have to set this so that streams are ok piping into it this.on('end', () => this[CLOSESTREAM]()) if (typeof opt.onwarn === 'function') { this.on('warn', opt.onwarn) } if (typeof opt.onReadEntry === 'function') { this.on('entry', opt.onReadEntry) } } warn(code: string, message: string | Error, data: WarnData = {}): void { warnMethod(this, code, message, data) } [CONSUMEHEADER](chunk: Buffer, position: number) { if (this[SAW_VALID_ENTRY] === undefined) { this[SAW_VALID_ENTRY] = false } let header try { header = new Header(chunk, position, this[EX], this[GEX]) } catch (er) { return this.warn('TAR_ENTRY_INVALID', er as Error) } if (header.nullBlock) { if (this[SAW_NULL_BLOCK]) { this[SAW_EOF] = true // ending an archive with no entries. pointless, but legal. if (this[STATE] === 'begin') { this[STATE] = 'header' } this[EMIT]('eof') } else { this[SAW_NULL_BLOCK] = true this[EMIT]('nullBlock') } } else { this[SAW_NULL_BLOCK] = false if (!header.cksumValid) { this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header }) } else if (!header.path) { this.warn('TAR_ENTRY_INVALID', 'path is required', { header }) } else { const type = header.type if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) { this.warn('TAR_ENTRY_INVALID', 'linkpath required', { header, }) } else if ( !/^(Symbolic)?Link$/.test(type) && !/^(Global)?ExtendedHeader$/.test(type) && header.linkpath ) { this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', { header, }) } else { const entry = (this[WRITEENTRY] = new ReadEntry( header, this[EX], this[GEX], )) // we do this for meta & ignored entries as well, because they // are still valid tar, or else we wouldn't know to ignore them if (!this[SAW_VALID_ENTRY]) { if (entry.remain) { // this might be the one! const onend = () => { if (!entry.invalid) { this[SAW_VALID_ENTRY] = true } } entry.on('end', onend) } else { this[SAW_VALID_ENTRY] = true } } if (entry.meta) { if (entry.size > this.maxMetaEntrySize) { entry.ignore = true this[EMIT]('ignoredEntry', entry) this[STATE] = 'ignore' entry.resume() } else if (entry.size > 0) { this[META] = '' entry.on('data', c => (this[META] += c)) this[STATE] = 'meta' } } else { this[EX] = undefined entry.ignore = entry.ignore || !this.filter(entry.path, entry) if (entry.ignore) { // probably valid, just not something we care about this[EMIT]('ignoredEntry', entry) this[STATE] = entry.remain ? 'ignore' : 'header' entry.resume() } else { if (entry.remain) { this[STATE] = 'body' } else { this[STATE] = 'header' entry.end() } if (!this[READENTRY]) { this[QUEUE].push(entry) this[NEXTENTRY]() } else { this[QUEUE].push(entry) } } } } } } } [CLOSESTREAM]() { queueMicrotask(() => this.emit('close')) } [PROCESSENTRY](entry?: ReadEntry | [string | symbol, unknown, unknown]) { let go = true if (!entry) { this[READENTRY] = undefined go = false } else if (Array.isArray(entry)) { const [ev, ...args]: [string | symbol, unknown, unknown] = entry this.emit(ev, ...args) } else { this[READENTRY] = entry this.emit('entry', entry) if (!entry.emittedEnd) { entry.on('end', () => this[NEXTENTRY]()) go = false } } return go } [NEXTENTRY]() { do {} while (this[PROCESSENTRY](this[QUEUE].shift())) if (this[QUEUE].length === 0) { // At this point, there's nothing in the queue, but we may have an // entry which is being consumed (readEntry). // If we don't, then we definitely can handle more data. // If we do, and either it's flowing, or it has never had any data // written to it, then it needs more. // The only other possibility is that it has returned false from a // write() call, so we wait for the next drain to continue. const re = this[READENTRY] const drainNow = !re || re.flowing || re.size === re.remain if (drainNow) { if (!this[WRITING]) { this.emit('drain') } } else { re.once('drain', () => this.emit('drain')) } } } [CONSUMEBODY](chunk: Buffer, position: number) { // write up to but no more than writeEntry.blockRemain const entry = this[WRITEENTRY] /* c8 ignore start */ if (!entry) { throw new Error('attempt to consume body without entry??') } const br = entry.blockRemain ?? 0 /* c8 ignore stop */ const c = br >= chunk.length && position === 0 ? chunk : chunk.subarray(position, position + br) entry.write(c) if (!entry.blockRemain) { this[STATE] = 'header' this[WRITEENTRY] = undefined entry.end() } return c.length } [CONSUMEMETA](chunk: Buffer, position: number) { const entry = this[WRITEENTRY] const ret = this[CONSUMEBODY](chunk, position) // if we finished, then the entry is reset if (!this[WRITEENTRY] && entry) { this[EMITMETA](entry) } return ret } [EMIT](ev: string | symbol, data?: unknown, extra?: unknown) { if (this[QUEUE].length === 0 && !this[READENTRY]) { this.emit(ev, data, extra) } else { this[QUEUE].push([ev, data, extra]) } } [EMITMETA](entry: ReadEntry) { this[EMIT]('meta', this[META]) switch (entry.type) { case 'ExtendedHeader': case 'OldExtendedHeader': this[EX] = Pax.parse(this[META], this[EX], false) break case 'GlobalExtendedHeader': this[GEX] = Pax.parse(this[META], this[GEX], true) break case 'NextFileHasLongPath': case 'OldGnuLongPath': { const ex: Pax = this[EX] ?? Object.create(null) this[EX] = ex ex.path = this[META].replace(/\0.*/, '') break } case 'NextFileHasLongLinkpath': { const ex: Pax = this[EX] || Object.create(null) this[EX] = ex ex.linkpath = this[META].replace(/\0.*/, '') break } /* c8 ignore start */ default: throw new Error('unknown meta: ' + entry.type) /* c8 ignore stop */ } } abort(error: Error) { if (this[ABORTED]) { return } this[ABORTED] = true this.emit('abort', error) // always throws, even in non-strict mode this.warn('TAR_ABORT', error, { recoverable: false }) } [CHECKDECOMPRESSIONRATIO](chunk: Buffer) { this[DECOMPRESSEDBYTESREAD] += chunk.length const ratio = this[DECOMPRESSEDBYTESREAD] / this[COMPRESSEDBYTESREAD] if (ratio > this.maxDecompressionRatio) { this.abort( new Error( `max decompression ratio exceeded: ${ratio.toFixed(2)} > ${ this.maxDecompressionRatio }`, ), ) return false } return true } write( buffer: Uint8Array | string, cb?: (err?: Error | null) => void, ): boolean write( str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void, ): boolean write( chunk: Buffer | string, encoding?: BufferEncoding | (() => unknown), cb?: () => unknown, ): boolean { if (typeof encoding === 'function') { cb = encoding encoding = undefined } if (typeof chunk === 'string') { chunk = Buffer.from( chunk, /* c8 ignore next */ typeof encoding === 'string' ? encoding : 'utf8', ) } if (this[ABORTED]) { /* c8 ignore next */ cb?.() return false } // first write, might be gzipped, zstd, or brotli compressed const needSniff = this[UNZIP] === undefined || (this.brotli === undefined && this[UNZIP] === false) if (needSniff && chunk) { if (this[BUFFER]) { chunk = Buffer.concat([this[BUFFER], chunk]) this[BUFFER] = undefined } if (chunk.length < ZIP_HEADER_LEN) { this[BUFFER] = chunk /* c8 ignore next */ cb?.() return true } // look for gzip header for ( let i = 0; this[UNZIP] === undefined && i < gzipHeader.length; i++ ) { if (chunk[i] !== gzipHeader[i]) { this[UNZIP] = false } } // look for zstd header if gzip header not found let isZstd = false if (this[UNZIP] === false && this.zstd !== false) { isZstd = true for (let i = 0; i < zstdHeader.length; i++) { if (chunk[i] !== zstdHeader[i]) { isZstd = false break } } } const maybeBrotli = this.brotli === undefined && !isZstd if (this[UNZIP] === false && maybeBrotli) { // read the first header to see if it's a valid tar file. If so, // we can safely assume that it's not actually brotli, despite the // .tbr or .tar.br file extension. // if we ended before getting a full chunk, yes, def brotli if (chunk.length < 512) { if (this[ENDED]) { this.brotli = true } else { this[BUFFER] = chunk /* c8 ignore next */ cb?.() return true } } else { // if it's tar, it's pretty reliably not brotli, chances of // that happening are astronomical. try { new Header(chunk.subarray(0, 512)) this.brotli = false } catch (_) { this.brotli = true } } } if ( this[UNZIP] === undefined || (this[UNZIP] === false && (this.brotli || isZstd)) ) { const ended = this[ENDED] this[ENDED] = false this[UNZIP] = this[UNZIP] === undefined ? new Unzip({}) : isZstd ? new ZstdDecompress({}) : new BrotliDecompress({}) this[UNZIP].on('data', chunk => { if (this[CHECKDECOMPRESSIONRATIO](chunk)) { this[CONSUMECHUNK](chunk) } }) this[UNZIP].on('error', er => { if (!this[ABORTED]) { this.abort(er as Error) } }) this[UNZIP].on('end', () => { this[ENDED] = true this[CONSUMECHUNK]() }) this[WRITING] = true this[COMPRESSEDBYTESREAD] += chunk.length const ret = !!this[UNZIP][ended ? 'end' : 'write'](chunk) this[WRITING] = false cb?.() return ret } } this[WRITING] = true if (this[UNZIP]) { this[COMPRESSEDBYTESREAD] += chunk.length this[UNZIP].write(chunk) } else { this[CONSUMECHUNK](chunk) } this[WRITING] = false // return false if there's a queue, or if the current entry isn't flowing const ret = this[QUEUE].length > 0 ? false : this[READENTRY] ? this[READENTRY].flowing : true // if we have no queue, then that means a clogged READENTRY if (!ret && this[QUEUE].length === 0) { this[READENTRY]?.once('drain', () => this.emit('drain')) } /* c8 ignore next */ cb?.() return ret } [BUFFERCONCAT](c: Buffer) { if (c && !this[ABORTED]) { this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c } } [MAYBEEND]() { if ( this[ENDED] && !this[EMITTEDEND] && !this[ABORTED] && !this[CONSUMING] ) { this[EMITTEDEND] = true const entry = this[WRITEENTRY] if (entry?.blockRemain) { // truncated, likely a damaged file const have = this[BUFFER] ? this[BUFFER].length : 0 this.warn( 'TAR_BAD_ARCHIVE', `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry }, ) if (this[BUFFER]) { entry.write(this[BUFFER]) } entry.end() } this[EMIT](DONE) } } [CONSUMECHUNK](chunk?: Buffer) { if (this[CONSUMING] && chunk) { this[BUFFERCONCAT](chunk) } else if (!chunk && !this[BUFFER]) { this[MAYBEEND]() } else if (chunk) { this[CONSUMING] = true if (this[BUFFER]) { this[BUFFERCONCAT](chunk) const c = this[BUFFER] this[BUFFER] = undefined this[CONSUMECHUNKSUB](c) } else { this[CONSUMECHUNKSUB](chunk) } while ( this[BUFFER] && (this[BUFFER] as Buffer)?.length >= 512 && !this[ABORTED] && !this[SAW_EOF] ) { const c = this[BUFFER] this[BUFFER] = undefined this[CONSUMECHUNKSUB](c) } this[CONSUMING] = false } if (!this[BUFFER] || this[ENDED]) { this[MAYBEEND]() } } [CONSUMECHUNKSUB](chunk: Buffer) { // we know that we are in CONSUMING mode, so anything written goes into // the buffer. Advance the position and put any remainder in the buffer. let position = 0 const length = chunk.length while (position + 512 <= length && !this[ABORTED] && !this[SAW_EOF]) { switch (this[STATE]) { case 'begin': case 'header': this[CONSUMEHEADER](chunk, position) position += 512 break case 'ignore': case 'body': position += this[CONSUMEBODY](chunk, position) break case 'meta': position += this[CONSUMEMETA](chunk, position) break /* c8 ignore start */ default: throw new Error('invalid state: ' + this[STATE]) /* c8 ignore stop */ } } if (position < length) { this[BUFFER] = this[BUFFER] ? Buffer.concat([chunk.subarray(position), this[BUFFER]]) : chunk.subarray(position) } } end(cb?: () => void): this end(data: string | Buffer, cb?: () => void): this end(str: string, encoding?: BufferEncoding, cb?: () => void): this end( chunk?: string | Buffer | (() => void), encoding?: BufferEncoding | (() => void), cb?: () => void, ) { if (typeof chunk === 'function') { cb = chunk encoding = undefined chunk = undefined } if (typeof encoding === 'function') { cb = encoding encoding = undefined } if (typeof chunk === 'string') { chunk = Buffer.from(chunk, encoding) } if (cb) this.once('finish', cb) if (!this[ABORTED]) { if (this[UNZIP]) { /* c8 ignore start */ if (chunk) { this[COMPRESSEDBYTESREAD] += chunk.length this[UNZIP].write(chunk) } /* c8 ignore stop */ this[UNZIP].end() } else { this[ENDED] = true if (this.brotli === undefined || this.zstd === undefined) chunk = chunk || Buffer.alloc(0) if (chunk) this.write(chunk) this[MAYBEEND]() } } return this } } isaacs-node-tar-0a52f00/src/path-reservations.ts000066400000000000000000000116211522005272700216230ustar00rootroot00000000000000// A path exclusive reservation system // reserve([list, of, paths], fn) // When the fn is first in line for all its paths, it // is called with a cb that clears the reservation. // // Used by async unpack to avoid clobbering paths in use, // while still allowing maximal safe parallelization. import { join } from 'node:path' import { normalizeUnicode } from './normalize-unicode.js' import { stripTrailingSlashes } from './strip-trailing-slashes.js' const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform const isWindows = platform === 'win32' export type Reservation = { paths: string[] dirs: Set } export type Handler = (clear: () => void) => void // return a set of parent dirs for a given path // '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d'] const getDirs = (path: string) => { const dirs = path .split('/') .slice(0, -1) .reduce((set: string[], path) => { const s = set.at(-1) if (s !== undefined) { path = join(s, path) } set.push(path || '/') return set }, []) return dirs } export class PathReservations { // path => [function or Set] // A Set object means a directory reservation // A fn is a direct reservation on that path #queues = new Map)[]>() // fn => {paths:[path,...], dirs:[path, ...]} #reservations = new Map() // functions currently running #running = new Set() reserve(paths: string[], fn: Handler) { paths = isWindows ? ['win32 parallelization disabled'] : paths.map(p => { // don't need normPath, because we skip this entirely for windows return stripTrailingSlashes(join(normalizeUnicode(p))) }) const dirs = new Set( paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)), ) this.#reservations.set(fn, { dirs, paths }) for (const p of paths) { const q = this.#queues.get(p) if (!q) { this.#queues.set(p, [fn]) } else { q.push(fn) } } for (const dir of dirs) { const q = this.#queues.get(dir) if (!q) { this.#queues.set(dir, [new Set([fn])]) } else { const l = q.at(-1) if (l instanceof Set) { l.add(fn) } else { q.push(new Set([fn])) } } } return this.#run(fn) } // return the queues for each path the function cares about // fn => {paths, dirs} #getQueues(fn: Handler): { paths: Handler[][] dirs: (Handler | Set)[][] } { const res = this.#reservations.get(fn) /* c8 ignore start */ if (!res) { throw new Error('function does not have any path reservations') } /* c8 ignore stop */ return { paths: res.paths.map((path: string) => this.#queues.get(path), ) as Handler[][], dirs: [...res.dirs].map(path => this.#queues.get(path)) as ( | Handler | Set )[][], } } // check if fn is first in line for all its paths, and is // included in the first set for all its dir queues check(fn: Handler) { const { paths, dirs } = this.#getQueues(fn) return ( paths.every(q => q && q[0] === fn) && dirs.every(q => q && q[0] instanceof Set && q[0].has(fn)) ) } // run the function if it's first in line and not already running #run(fn: Handler) { if (this.#running.has(fn) || !this.check(fn)) { return false } this.#running.add(fn) fn(() => this.#clear(fn)) return true } #clear(fn: Handler) { if (!this.#running.has(fn)) { return false } const res = this.#reservations.get(fn) /* c8 ignore start */ if (!res) { throw new Error('invalid reservation') } /* c8 ignore stop */ const { paths, dirs } = res const next = new Set() for (const path of paths) { const q = this.#queues.get(path) /* c8 ignore start */ if (!q || q?.[0] !== fn) { continue } /* c8 ignore stop */ const q0 = q[1] if (!q0) { this.#queues.delete(path) continue } q.shift() if (typeof q0 === 'function') { next.add(q0) } else { for (const f of q0) { next.add(f) } } } for (const dir of dirs) { const q = this.#queues.get(dir) const q0 = q?.[0] /* c8 ignore next - type safety only */ if (!q || !(q0 instanceof Set)) continue if (q0.size === 1 && q.length === 1) { this.#queues.delete(dir) continue } else if (q0.size === 1) { q.shift() // next one must be a function, // or else the Set would've been reused const n = q[0] if (typeof n === 'function') { next.add(n) } } else { q0.delete(fn) } } this.#running.delete(fn) next.forEach(fn => this.#run(fn)) return true } } isaacs-node-tar-0a52f00/src/pax.ts000066400000000000000000000113641522005272700167410ustar00rootroot00000000000000import { basename } from 'node:path' import type { HeaderData } from './header.js' import { Header } from './header.js' export class Pax implements HeaderData { atime?: Date mtime?: Date ctime?: Date charset?: string comment?: string gid?: number uid?: number gname?: string uname?: string linkpath?: string dev?: number ino?: number nlink?: number path?: string size?: number mode?: number global: boolean constructor(obj: HeaderData, global: boolean = false) { this.atime = obj.atime this.charset = obj.charset this.comment = obj.comment this.ctime = obj.ctime this.dev = obj.dev this.gid = obj.gid this.global = global this.gname = obj.gname this.ino = obj.ino this.linkpath = obj.linkpath this.mtime = obj.mtime this.nlink = obj.nlink this.path = obj.path this.size = obj.size this.uid = obj.uid this.uname = obj.uname } encode() { const body = this.encodeBody() if (body === '') { return Buffer.allocUnsafe(0) } const bodyLen = Buffer.byteLength(body) // round up to 512 bytes // add 512 for header const bufLen = 512 * Math.ceil(1 + bodyLen / 512) const buf = Buffer.allocUnsafe(bufLen) // 0-fill the header section, it might not hit every field for (let i = 0; i < 512; i++) { buf[i] = 0 } new Header({ // XXX split the path // then the path should be PaxHeader + basename, but less than 99, // prepend with the dirname /* c8 ignore start */ path: ('PaxHeader/' + basename(this.path ?? '')).slice(0, 99), /* c8 ignore stop */ mode: this.mode || 0o644, uid: this.uid, gid: this.gid, size: bodyLen, mtime: this.mtime, type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader', linkpath: '', uname: this.uname || '', gname: this.gname || '', devmaj: 0, devmin: 0, atime: this.atime, ctime: this.ctime, }).encode(buf) buf.write(body, 512, bodyLen, 'utf8') // null pad after the body for (let i = bodyLen + 512; i < buf.length; i++) { buf[i] = 0 } return buf } encodeBody() { return ( this.encodeField('path') + this.encodeField('ctime') + this.encodeField('atime') + this.encodeField('dev') + this.encodeField('ino') + this.encodeField('nlink') + this.encodeField('charset') + this.encodeField('comment') + this.encodeField('gid') + this.encodeField('gname') + this.encodeField('linkpath') + this.encodeField('mtime') + this.encodeField('size') + this.encodeField('uid') + this.encodeField('uname') ) } encodeField(field: keyof Pax): string { if (this[field] === undefined) { return '' } const r = this[field] const v = r instanceof Date ? r.getTime() / 1000 : r const s = ' ' + (field === 'dev' || field === 'ino' || field === 'nlink' ? 'SCHILY.' : '') + field + '=' + v + '\n' const byteLen = Buffer.byteLength(s) // the digits includes the length of the digits in ascii base-10 // so if it's 9 characters, then adding 1 for the 9 makes it 10 // which makes it 11 chars. let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1 if (byteLen + digits >= Math.pow(10, digits)) { digits += 1 } const len = digits + byteLen return len + s } static parse(str: string, ex?: HeaderData, g: boolean = false) { return new Pax(merge(parseKV(str), ex), g) } } const merge = (a: HeaderData, b?: HeaderData) => b ? Object.assign({}, b, a) : a const parseKV = (str: string) => str .replace(/\n$/, '') .split('\n') .reduce(parseKVLine, Object.create(null)) const parseKVLine = ( set: Record, line: string, ) => { const n = parseInt(line, 10) // XXX Values with \n in them will fail this. // Refactor to not be a naive line-by-line parse. if (n !== Buffer.byteLength(line) + 1) { return set } line = line.slice((n + ' ').length) const kv = line.split('=') const r = kv.shift() if (!r) { return set } const k = r.replace(/^SCHILY\.(dev|ino|nlink)/, '$1') const v = kv.join('=').replace(/\0.*/, '') switch (k) { case 'path': case 'linkpath': case 'type': case 'charset': case 'comment': case 'gname': case 'uname': set[k] = v break case 'ctime': case 'atime': case 'mtime': set[k] = new Date(Number(v) * 1000) break case 'size': const s = +v if (s >= 0) set[k] = s break case 'gid': case 'uid': case 'dev': case 'ino': case 'nlink': case 'mode': set[k] = +v break } return set } isaacs-node-tar-0a52f00/src/process-umask.ts000066400000000000000000000001621522005272700207370ustar00rootroot00000000000000// separate file so I stop getting nagged in vim about deprecated API. export const umask = () => process.umask() isaacs-node-tar-0a52f00/src/read-entry.ts000066400000000000000000000075551522005272700202320ustar00rootroot00000000000000import { Minipass } from 'minipass' import type { Header } from './header.js' import { normalizeWindowsPath } from './normalize-windows-path.js' import type { Pax } from './pax.js' import type { EntryTypeName } from './types.js' export class ReadEntry extends Minipass { extended?: Pax globalExtended?: Pax header: Header startBlockSize: number blockRemain: number remain: number type: EntryTypeName meta: boolean = false ignore: boolean = false path: string mode?: number uid?: number gid?: number uname?: string gname?: string size: number = 0 mtime?: Date atime?: Date ctime?: Date linkpath?: string dev?: number ino?: number nlink?: number invalid: boolean = false absolute?: string unsupported: boolean = false constructor(header: Header, ex?: Pax, gex?: Pax) { super({}) // read entries always start life paused. this is to avoid the // situation where Minipass's auto-ending empty streams results // in an entry ending before we're ready for it. this.pause() this.extended = ex this.globalExtended = gex this.header = header /* c8 ignore start */ this.remain = header.size ?? 0 /* c8 ignore stop */ this.startBlockSize = 512 * Math.ceil(this.remain / 512) this.blockRemain = this.startBlockSize this.type = header.type switch (this.type) { case 'File': case 'OldFile': case 'Link': case 'SymbolicLink': case 'CharacterDevice': case 'BlockDevice': case 'Directory': case 'FIFO': case 'ContiguousFile': case 'GNUDumpDir': break case 'NextFileHasLongLinkpath': case 'NextFileHasLongPath': case 'OldGnuLongPath': case 'GlobalExtendedHeader': case 'ExtendedHeader': case 'OldExtendedHeader': this.meta = true break // NOTE: gnutar and bsdtar treat unrecognized types as 'File' // it may be worth doing the same, but with a warning. default: this.ignore = true } /* c8 ignore start */ if (!header.path) { throw new Error('no path provided for tar.ReadEntry') } /* c8 ignore stop */ this.path = normalizeWindowsPath(header.path) as string this.mode = header.mode if (this.mode) { this.mode = this.mode & 0o7777 } this.uid = header.uid this.gid = header.gid this.uname = header.uname this.gname = header.gname this.size = this.remain this.mtime = header.mtime this.atime = header.atime this.ctime = header.ctime /* c8 ignore start */ this.linkpath = header.linkpath ? normalizeWindowsPath(header.linkpath) : undefined /* c8 ignore stop */ this.uname = header.uname this.gname = header.gname if (ex) { this.#slurp(ex) } if (gex) { this.#slurp(gex, true) } } write(data: Buffer) { const writeLen = data.length if (writeLen > this.blockRemain) { throw new Error('writing more to entry than is appropriate') } const r = this.remain const br = this.blockRemain this.remain = Math.max(0, r - writeLen) this.blockRemain = Math.max(0, br - writeLen) if (this.ignore) { return true } if (r >= writeLen) { return super.write(data) } // r < writeLen return super.write(data.subarray(0, r)) } #slurp(ex: Pax, gex: boolean = false) { if (ex.path) ex.path = normalizeWindowsPath(ex.path) if (ex.linkpath) ex.linkpath = normalizeWindowsPath(ex.linkpath) Object.assign( this, Object.fromEntries( Object.entries(ex).filter(([k, v]) => { // we slurp in everything except for the path attribute in // a global extended header, because that's weird. Also, any // null/undefined values are ignored. return !(v === null || v === undefined || (k === 'path' && gex)) }), ), ) } } isaacs-node-tar-0a52f00/src/replace.ts000066400000000000000000000150331522005272700175610ustar00rootroot00000000000000// tar -r import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass' import type { Minipass } from 'minipass' import fs from 'node:fs' import path from 'node:path' import { Header } from './header.js' import { list } from './list.js' import { makeCommand } from './make-command.js' import type { TarOptionsFile, TarOptionsSyncFile } from './options.js' import { isFile } from './options.js' import { Pack, PackSync } from './pack.js' // starting at the head of the file, read a Header // If the checksum is invalid, that's our position to start writing // If it is, jump forward by the specified size (round up to 512) // and try again. // Write the new Pack stream starting there. const replaceSync = (opt: TarOptionsSyncFile, files: string[]) => { const p = new PackSync(opt) let threw = true let fd let position try { try { fd = fs.openSync(opt.file, 'r+') } catch (er) { if ((er as NodeJS.ErrnoException)?.code === 'ENOENT') { fd = fs.openSync(opt.file, 'w+') } else { throw er } } const st = fs.fstatSync(fd) const headBuf = Buffer.alloc(512) POSITION: for (position = 0; position < st.size; position += 512) { for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) { bytes = fs.readSync( fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos, ) if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) { throw new Error('cannot append to compressed archives') } if (!bytes) { break POSITION } } const h = new Header(headBuf) if (!h.cksumValid) { break } const entryBlockSize = 512 * Math.ceil((h.size || 0) / 512) if (position + entryBlockSize + 512 > st.size) { break } // the 512 for the header we just parsed will be added as well // also jump ahead all the blocks for the body position += entryBlockSize if (opt.mtimeCache && h.mtime) { opt.mtimeCache.set(String(h.path), h.mtime) } } threw = false streamSync(opt, p, position, fd, files) } finally { if (threw) { try { fs.closeSync(fd as number) } catch {} } } } const streamSync = ( opt: TarOptionsSyncFile, p: Pack, position: number, fd: number, files: string[], ) => { const stream = new WriteStreamSync(opt.file, { fd: fd, start: position, }) p.pipe(stream as unknown as Minipass.Writable) addFilesSync(p, files) } const replaceAsync = ( opt: TarOptionsFile, files: string[], ): Promise => { files = Array.from(files) const p = new Pack(opt) const getPos = ( fd: number, size: number, cb_: (er?: null | Error, pos?: number) => void, ) => { const cb = (er?: Error | null, pos?: number) => { if (er) { fs.close(fd, _ => cb_(er)) } else { cb_(null, pos) } } let position = 0 if (size === 0) { return cb(null, 0) } let bufPos = 0 const headBuf = Buffer.alloc(512) const onread = (er?: null | Error, bytes?: number): void => { if (er || bytes === undefined) { return cb(er) } bufPos += bytes if (bufPos < 512 && bytes) { return fs.read( fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos, onread, ) } if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) { return cb(new Error('cannot append to compressed archives')) } // truncated header if (bufPos < 512) { return cb(null, position) } const h = new Header(headBuf) if (!h.cksumValid) { return cb(null, position) } /* c8 ignore next */ const entryBlockSize = 512 * Math.ceil((h.size ?? 0) / 512) if (position + entryBlockSize + 512 > size) { return cb(null, position) } position += entryBlockSize + 512 if (position >= size) { return cb(null, position) } if (opt.mtimeCache && h.mtime) { opt.mtimeCache.set(String(h.path), h.mtime) } bufPos = 0 fs.read(fd, headBuf, 0, 512, position, onread) } fs.read(fd, headBuf, 0, 512, position, onread) } const promise = new Promise((resolve, reject) => { p.on('error', reject) let flag = 'r+' const onopen = (er?: NodeJS.ErrnoException | null, fd?: number) => { if (er && er.code === 'ENOENT' && flag === 'r+') { flag = 'w+' return fs.open(opt.file, flag, onopen) } if (er || !fd) { return reject(er) } fs.fstat(fd, (er, st) => { if (er) { return fs.close(fd, () => reject(er)) } getPos(fd, st.size, (er, position) => { if (er) { return reject(er) } const stream = new WriteStream(opt.file, { fd: fd, start: position, }) p.pipe(stream as unknown as Minipass.Writable) stream.on('error', reject) stream.on('close', resolve) addFilesAsync(p, files) }) }) } fs.open(opt.file, flag, onopen) }) return promise } const addFilesSync = (p: Pack, files: string[]) => { files.forEach(file => { if (file.charAt(0) === '@') { list({ file: path.resolve(p.cwd, file.slice(1)), sync: true, noResume: true, onReadEntry: entry => p.add(entry), }) } else { p.add(file) } }) p.end() } const addFilesAsync = async (p: Pack, files: string[]): Promise => { for (const file of files) { if (file.charAt(0) === '@') { await list({ file: path.resolve(String(p.cwd), file.slice(1)), noResume: true, onReadEntry: entry => p.add(entry), }) } else { p.add(file) } } p.end() } export const replace = makeCommand( replaceSync, replaceAsync, /* c8 ignore start */ (): never => { throw new TypeError('file is required') }, (): never => { throw new TypeError('file is required') }, /* c8 ignore stop */ (opt, entries) => { if (!isFile(opt)) { throw new TypeError('file is required') } if ( opt.gzip || opt.brotli || opt.zstd || opt.file.endsWith('.br') || opt.file.endsWith('.tbr') ) { throw new TypeError('cannot append to compressed archives') } if (!entries?.length) { throw new TypeError('no paths specified to add/replace') } }, ) isaacs-node-tar-0a52f00/src/strip-absolute-path.ts000066400000000000000000000017411522005272700220560ustar00rootroot00000000000000// unix absolute paths are also absolute on win32, so we use this for both import { win32 } from 'node:path' const { isAbsolute, parse } = win32 // returns [root, stripped] // Note that windows will think that //x/y/z/a has a "root" of //x/y, and in // those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip / // explicitly if it's the first character. // drive-specific relative paths on Windows get their root stripped off even // though they are not absolute, so `c:../foo` becomes ['c:', '../foo'] export const stripAbsolutePath = (path: string): [string, string] => { let r = '' let parsed = parse(path) while (isAbsolute(path) || parsed.root) { // windows will think that //x/y/z has a "root" of //x/y/ // but strip the //?/C:/ off of //?/C:/path const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ? '/' : parsed.root path = path.slice(root.length) r += root parsed = parse(path) } return [r, path] } isaacs-node-tar-0a52f00/src/strip-trailing-slashes.ts000066400000000000000000000006471522005272700225630ustar00rootroot00000000000000// warning: extremely hot code path. // This has been meticulously optimized for use // within npm install on large package trees. // Do not edit without careful benchmarking. export const stripTrailingSlashes = (str: string) => { let i = str.length - 1 let slashesStart = -1 while (i > -1 && str.charAt(i) === '/') { slashesStart = i i-- } return slashesStart === -1 ? str : str.slice(0, slashesStart) } isaacs-node-tar-0a52f00/src/symlink-error.ts000066400000000000000000000005471522005272700207670ustar00rootroot00000000000000export class SymlinkError extends Error { path: string symlink: string syscall = 'symlink' as const code = 'TAR_SYMLINK_ERROR' as const constructor(symlink: string, path: string) { super('TAR_SYMLINK_ERROR: Cannot extract through symbolic link') this.symlink = symlink this.path = path } get name() { return 'SymlinkError' } } isaacs-node-tar-0a52f00/src/types.ts000066400000000000000000000044711522005272700173160ustar00rootroot00000000000000export const isCode = (c: string): c is EntryTypeCode => name.has(c as EntryTypeCode) export const isName = (c: string): c is EntryTypeName => code.has(c as EntryTypeName) export type EntryTypeCode = | '0' | '' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | 'g' | 'x' | 'A' | 'D' | 'I' | 'K' | 'L' | 'M' | 'N' | 'S' | 'V' | 'X' export type EntryTypeName = | 'File' | 'OldFile' | 'Link' | 'SymbolicLink' | 'CharacterDevice' | 'BlockDevice' | 'Directory' | 'FIFO' | 'ContiguousFile' | 'GlobalExtendedHeader' | 'ExtendedHeader' | 'SolarisACL' | 'GNUDumpDir' | 'Inode' | 'NextFileHasLongLinkpath' | 'NextFileHasLongPath' | 'ContinuationFile' | 'OldGnuLongPath' | 'SparseFile' | 'TapeVolumeHeader' | 'OldExtendedHeader' | 'Unsupported' /** * types that are a normal file system entry, not metadata. * * These can be the subject of extended/globalExtended headers, long path * names, long linkpath names, etc. * * Any other types are meta, and cannot be targetted by extended PAX headers. */ export const normalFsTypes = new Set([ '0', '', '1', '2', '3', '4', '5', '6', '7', 'D', ]) // map types from key to human-friendly name export const name = new Map([ ['0', 'File'], // same as File ['', 'OldFile'], ['1', 'Link'], ['2', 'SymbolicLink'], // Devices and FIFOs aren't fully supported // they are parsed, but skipped when unpacking ['3', 'CharacterDevice'], ['4', 'BlockDevice'], ['5', 'Directory'], ['6', 'FIFO'], // same as File ['7', 'ContiguousFile'], // pax headers ['g', 'GlobalExtendedHeader'], ['x', 'ExtendedHeader'], // vendor-specific stuff // skip ['A', 'SolarisACL'], // like 5, but with data, which should be skipped ['D', 'GNUDumpDir'], // metadata only, skip ['I', 'Inode'], // data = link path of next file ['K', 'NextFileHasLongLinkpath'], // data = path of next file ['L', 'NextFileHasLongPath'], // skip ['M', 'ContinuationFile'], // like L ['N', 'OldGnuLongPath'], // skip ['S', 'SparseFile'], // skip ['V', 'TapeVolumeHeader'], // like x ['X', 'OldExtendedHeader'], ]) // map the other direction export const code = new Map( Array.from(name).map(kv => [kv[1], kv[0]]), ) isaacs-node-tar-0a52f00/src/unpack.ts000066400000000000000000000743131522005272700174350ustar00rootroot00000000000000// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet. // but the path reservations are required to avoid race conditions where // parallelized unpack ops may mess with one another, due to dependencies // (like a Link depending on its target) or destructive operations (like // clobbering an fs object to create one of a different type.) import * as fsm from '@isaacs/fs-minipass' import assert from 'node:assert' import { randomBytes } from 'node:crypto' import fs, { type Stats } from 'node:fs' import path from 'node:path' import { getWriteFlag } from './get-write-flag.js' import type { MkdirError } from './mkdir.js' import { mkdir, mkdirSync } from './mkdir.js' import { normalizeWindowsPath } from './normalize-windows-path.js' import { Parser } from './parse.js' import { stripAbsolutePath } from './strip-absolute-path.js' import * as wc from './winchars.js' import type { TarOptions } from './options.js' import { PathReservations } from './path-reservations.js' import type { ReadEntry } from './read-entry.js' import type { WarnData } from './warn-method.js' import { SymlinkError } from './symlink-error.js' import { umask } from './process-umask.js' const ONENTRY = Symbol('onEntry') const CHECKFS = Symbol('checkFs') const CHECKFS2 = Symbol('checkFs2') const ISREUSABLE = Symbol('isReusable') const MAKEFS = Symbol('makeFs') const FILE = Symbol('file') const DIRECTORY = Symbol('directory') const LINK = Symbol('link') const SYMLINK = Symbol('symlink') const HARDLINK = Symbol('hardlink') const ENSURE_NO_SYMLINK = Symbol('ensureNoSymlink') const UNSUPPORTED = Symbol('unsupported') const CHECKPATH = Symbol('checkPath') const STRIPABSOLUTEPATH = Symbol('stripAbsolutePath') const MKDIR = Symbol('mkdir') const ONERROR = Symbol('onError') const PENDING = Symbol('pending') const PEND = Symbol('pend') const UNPEND = Symbol('unpend') const ENDED = Symbol('ended') const MAYBECLOSE = Symbol('maybeClose') const SKIP = Symbol('skip') const DOCHOWN = Symbol('doChown') const UID = Symbol('uid') const GID = Symbol('gid') const CHECKED_CWD = Symbol('checkedCwd') const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform const isWindows = platform === 'win32' const DEFAULT_MAX_DEPTH = 1024 // Unlinks on Windows are not atomic. // // This means that if you have a file entry, followed by another // file entry with an identical name, and you cannot re-use the file // (because it's a hardlink, or because unlink:true is set, or it's // Windows, which does not have useful nlink values), then the unlink // will be committed to the disk AFTER the new file has been written // over the old one, deleting the new file. // // To work around this, on Windows systems, we rename the file and then // delete the renamed file. It's a sloppy kludge, but frankly, I do not // know of a better way to do this, given windows' non-atomic unlink // semantics. // // See: https://github.com/npm/node-tar/issues/183 /* c8 ignore start */ const unlinkFile = (path: string, cb: (er?: Error | null) => void) => { if (!isWindows) { return fs.unlink(path, cb) } const name = path + '.DELETE.' + randomBytes(16).toString('hex') fs.rename(path, name, er => { if (er) { return cb(er) } fs.unlink(name, cb) }) } /* c8 ignore stop */ /* c8 ignore start */ const unlinkFileSync = (path: string) => { if (!isWindows) { return fs.unlinkSync(path) } const name = path + '.DELETE.' + randomBytes(16).toString('hex') fs.renameSync(path, name) fs.unlinkSync(name) } /* c8 ignore stop */ // this.gid, entry.gid, this.processUid const uint32 = ( a: number | undefined, b: number | undefined, c: number | undefined, ) => a !== undefined && a === a >>> 0 ? a : b !== undefined && b === b >>> 0 ? b : c export class Unpack extends Parser { [ENDED]: boolean = false; [CHECKED_CWD]: boolean = false; [PENDING]: number = 0 reservations: PathReservations = new PathReservations() transform?: TarOptions['transform'] writable: true = true readable: false = false uid?: number gid?: number setOwner: boolean preserveOwner: boolean processGid?: number processUid?: number maxDepth: number forceChown: boolean win32: boolean newer: boolean keep: boolean noMtime: boolean preservePaths: boolean unlink: boolean cwd: string strip: number processUmask: number umask: number dmode: number fmode: number chmod: boolean constructor(opt: TarOptions = {}) { opt.ondone = () => { this[ENDED] = true this[MAYBECLOSE]() } super(opt) this.transform = opt.transform this.chmod = !!opt.chmod if (typeof opt.uid === 'number' || typeof opt.gid === 'number') { // need both or neither if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number') { throw new TypeError('cannot set owner without number uid and gid') } if (opt.preserveOwner) { throw new TypeError( 'cannot preserve owner in archive and also set owner explicitly', ) } this.uid = opt.uid this.gid = opt.gid this.setOwner = true } else { this.uid = undefined this.gid = undefined this.setOwner = false } // default true for root this.preserveOwner = opt.preserveOwner === undefined && typeof opt.uid !== 'number' ? !!(process.getuid?.() === 0) : !!opt.preserveOwner this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ? process.getuid() : undefined this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ? process.getgid() : undefined // prevent excessively deep nesting of subfolders // set to `Infinity` to remove this restriction this.maxDepth = typeof opt.maxDepth === 'number' ? opt.maxDepth : DEFAULT_MAX_DEPTH // mostly just for testing, but useful in some cases. // Forcibly trigger a chown on every entry, no matter what this.forceChown = opt.forceChown === true // turn > this[ONENTRY](entry)) } // a bad or damaged archive is a warning for Parser, but an error // when extracting. Mark those errors as unrecoverable, because // the Unpack contract cannot be met. warn(code: string, msg: string | Error, data: WarnData = {}) { if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') { data.recoverable = false } return super.warn(code, msg, data) } [MAYBECLOSE]() { if (this[ENDED] && this[PENDING] === 0) { this.emit('prefinish') this.emit('finish') this.emit('end') } } // return false if we need to skip this file // return true if the field was successfully sanitized [STRIPABSOLUTEPATH]( entry: ReadEntry, field: 'path' | 'linkpath', ): boolean { const p = entry[field] const { type } = entry if (!p || this.preservePaths) return true // strip off the root const [root, stripped] = stripAbsolutePath(p) const parts = stripped.replaceAll(/\\/g, '/').split('/') if ( parts.includes('..') || /* c8 ignore next */ (isWindows && /^[a-z]:\.\.$/i.test(parts[0] ?? '')) ) { // For linkpath, check if the resolved path escapes cwd rather than // just rejecting any path with '..' - relative symlinks like // '../sibling/file' are valid if they resolve within the cwd. // For paths, they just simply may not ever use .. at all. if (field === 'path' || type === 'Link') { this.warn('TAR_ENTRY_ERROR', `${field} contains '..'`, { entry, [field]: p, }) // not ok! return false } // Resolve linkpath relative to the entry's directory. // `path.posix` is safe to use because we're operating on // tar paths, not a filesystem. const entryDir = path.posix.dirname(entry.path) const resolved = path.posix.normalize( path.posix.join(entryDir, parts.join('/')), ) // If the resolved path escapes (starts with ..), reject it if (resolved.startsWith('../') || resolved === '..') { this.warn( 'TAR_ENTRY_ERROR', `${field} escapes extraction directory`, { entry, [field]: p, }, ) return false } } if (root) { // ok, but triggers warning about stripping root entry[field] = String(stripped) this.warn( 'TAR_ENTRY_INFO', `stripping ${root} from absolute ${field}`, { entry, [field]: p, }, ) } return true } // no IO, just string checking for absolute indicators [CHECKPATH](entry: ReadEntry) { const p = normalizeWindowsPath(entry.path) const parts = p.split('/') if (this.strip) { if (parts.length < this.strip) { return false } if (entry.type === 'Link') { const linkparts = normalizeWindowsPath( String(entry.linkpath), ).split('/') if (linkparts.length >= this.strip) { entry.linkpath = linkparts.slice(this.strip).join('/') } else { return false } } parts.splice(0, this.strip) entry.path = parts.join('/') } if (isFinite(this.maxDepth) && parts.length > this.maxDepth) { this.warn('TAR_ENTRY_ERROR', 'path excessively deep', { entry, path: p, depth: parts.length, maxDepth: this.maxDepth, }) return false } if ( !this[STRIPABSOLUTEPATH](entry, 'path') || !this[STRIPABSOLUTEPATH](entry, 'linkpath') ) { return false } entry.absolute = path.isAbsolute(entry.path) ? normalizeWindowsPath(path.resolve(entry.path)) : normalizeWindowsPath(path.resolve(this.cwd, entry.path)) // if we somehow ended up with a path that escapes the cwd, and we are // not in preservePaths mode, then something is fishy! This should have // been prevented above, so ignore this for coverage. /* c8 ignore start - defense in depth */ if ( !this.preservePaths && typeof entry.absolute === 'string' && entry.absolute.indexOf(this.cwd + '/') !== 0 && entry.absolute !== this.cwd ) { this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', { entry, path: normalizeWindowsPath(entry.path), resolvedPath: entry.absolute, cwd: this.cwd, }) return false } /* c8 ignore stop */ // an archive can set properties on the extraction directory, but it // may not replace the cwd with a different kind of thing entirely. if ( entry.absolute === this.cwd && entry.type !== 'Directory' && entry.type !== 'GNUDumpDir' ) { return false } // only encode : chars that aren't drive letter indicators if (this.win32) { const { root: aRoot } = path.win32.parse(String(entry.absolute)) entry.absolute = aRoot + wc.encode(String(entry.absolute).slice(aRoot.length)) const { root: pRoot } = path.win32.parse(entry.path) entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length)) } return true } [ONENTRY](entry: ReadEntry) { if (!this[CHECKPATH](entry)) { return entry.resume() } assert.equal(typeof entry.absolute, 'string') switch (entry.type) { case 'Directory': case 'GNUDumpDir': if (entry.mode) { entry.mode = entry.mode | 0o700 } // eslint-disable-next-line no-fallthrough case 'File': case 'OldFile': case 'ContiguousFile': case 'Link': case 'SymbolicLink': return this[CHECKFS](entry) case 'CharacterDevice': case 'BlockDevice': case 'FIFO': default: return this[UNSUPPORTED](entry) } } [ONERROR](er: Error, entry: ReadEntry) { // Cwd has to exist, or else nothing works. That's serious. // Other errors are warnings, which raise the error in strict // mode, but otherwise continue on. if (er.name === 'CwdError') { this.emit('error', er) } else { this.warn('TAR_ENTRY_ERROR', er, { entry }) this[UNPEND]() entry.resume() } } [MKDIR]( dir: string, mode: number, cb: (er?: null | MkdirError, made?: string) => void, ) { void mkdir( normalizeWindowsPath(dir), { uid: this.uid, gid: this.gid, processUid: this.processUid, processGid: this.processGid, umask: this.processUmask, preserve: this.preservePaths, unlink: this.unlink, cwd: this.cwd, mode: mode, }, cb, ) } [DOCHOWN](entry: ReadEntry) { // in preserve owner mode, chown if the entry doesn't match process // in set owner mode, chown if setting doesn't match process return ( this.forceChown || (this.preserveOwner && ((typeof entry.uid === 'number' && entry.uid !== this.processUid) || (typeof entry.gid === 'number' && entry.gid !== this.processGid))) || (typeof this.uid === 'number' && this.uid !== this.processUid) || (typeof this.gid === 'number' && this.gid !== this.processGid) ) } [UID](entry: ReadEntry) { return uint32(this.uid, entry.uid, this.processUid) } [GID](entry: ReadEntry) { return uint32(this.gid, entry.gid, this.processGid) } [FILE](entry: ReadEntry, fullyDone: () => void) { const mode = typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.fmode const stream = new fsm.WriteStream(String(entry.absolute), { // slight lie, but it can be numeric flags flags: getWriteFlag(entry.size) as string, mode: mode, autoClose: false, }) stream.on('error', (er: Error) => { if (stream.fd) { fs.close(stream.fd, () => {}) } // flush all the data out so that we aren't left hanging // if the error wasn't actually fatal. otherwise the parse // is blocked, and we never proceed. stream.write = () => true this[ONERROR](er, entry) fullyDone() }) let actions = 1 const done = (er?: null | Error) => { if (er) { /* c8 ignore start - we should always have a fd by now */ if (stream.fd) { fs.close(stream.fd, () => {}) } /* c8 ignore stop */ this[ONERROR](er, entry) fullyDone() return } if (--actions === 0) { if (stream.fd !== undefined) { fs.close(stream.fd, er => { if (er) { this[ONERROR](er, entry) } else { this[UNPEND]() } fullyDone() }) } } } stream.on('finish', () => { // if futimes fails, try utimes // if utimes fails, fail with the original error // same for fchown/chown const abs = String(entry.absolute) const fd = stream.fd if (typeof fd === 'number' && entry.mtime && !this.noMtime) { actions++ const atime = entry.atime || new Date() const mtime = entry.mtime fs.futimes(fd, atime, mtime, er => er ? fs.utimes(abs, atime, mtime, er2 => done(er2 && er)) : done(), ) } if (typeof fd === 'number' && this[DOCHOWN](entry)) { actions++ const uid = this[UID](entry) const gid = this[GID](entry) if (typeof uid === 'number' && typeof gid === 'number') { fs.fchown(fd, uid, gid, er => er ? fs.chown(abs, uid, gid, er2 => done(er2 && er)) : done(), ) } } done() }) const tx = this.transform ? this.transform(entry) || entry : entry if (tx !== entry) { tx.on('error', er => { this[ONERROR](er as Error, entry) fullyDone() }) entry.pipe(tx) } tx.pipe(stream) } [DIRECTORY](entry: ReadEntry, fullyDone: () => void) { const mode = typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.dmode this[MKDIR](String(entry.absolute), mode, er => { if (er) { this[ONERROR](er, entry) fullyDone() return } let actions = 1 const done = () => { if (--actions === 0) { fullyDone() this[UNPEND]() entry.resume() } } if (entry.mtime && !this.noMtime) { actions++ fs.utimes( String(entry.absolute), entry.atime || new Date(), entry.mtime, done, ) } if (this[DOCHOWN](entry)) { actions++ fs.chown( String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)), done, ) } done() }) } [UNSUPPORTED](entry: ReadEntry) { entry.unsupported = true this.warn( 'TAR_ENTRY_UNSUPPORTED', `unsupported entry type: ${entry.type}`, { entry }, ) entry.resume() } [SYMLINK](entry: ReadEntry, done: () => void) { const parts = normalizeWindowsPath( path.relative( this.cwd, path.resolve( path.dirname(String(entry.absolute)), String(entry.linkpath), ), ), ).split('/') this[ENSURE_NO_SYMLINK]( entry, this.cwd, parts, () => this[LINK](entry, String(entry.linkpath), 'symlink', done), er => { this[ONERROR](er, entry) done() }, ) } [HARDLINK](entry: ReadEntry, done: () => void) { const linkpath = normalizeWindowsPath( path.resolve(this.cwd, String(entry.linkpath)), ) const parts = normalizeWindowsPath(String(entry.linkpath)).split('/') this[ENSURE_NO_SYMLINK]( entry, this.cwd, parts, () => this[LINK](entry, linkpath, 'link', done), er => { this[ONERROR](er, entry) done() }, ) } [ENSURE_NO_SYMLINK]( entry: ReadEntry, cwd: string, parts: string[], done: () => void, onError: (er: SymlinkError) => void, ) { const p = parts.shift() if (this.preservePaths || p === undefined) return done() const t = path.resolve(cwd, p) fs.lstat(t, (er, st) => { if (er) return done() if (st?.isSymbolicLink()) { return onError( new SymlinkError(t, path.resolve(t, parts.join('/'))), ) } this[ENSURE_NO_SYMLINK](entry, t, parts, done, onError) }) } [PEND]() { this[PENDING]++ } [UNPEND]() { this[PENDING]-- this[MAYBECLOSE]() } [SKIP](entry: ReadEntry) { this[UNPEND]() entry.resume() } // Check if we can reuse an existing filesystem entry safely and // overwrite it, rather than unlinking and recreating // Windows doesn't report a useful nlink, so we just never reuse entries [ISREUSABLE](entry: ReadEntry, st: Stats) { return ( entry.type === 'File' && !this.unlink && st.isFile() && st.nlink <= 1 && !isWindows ) } // check if a thing is there, and if so, try to clobber it [CHECKFS](entry: ReadEntry) { this[PEND]() const paths = [entry.path] if (entry.linkpath) { paths.push(entry.linkpath) } this.reservations.reserve(paths, done => this[CHECKFS2](entry, done)) } [CHECKFS2](entry: ReadEntry, fullyDone: (er?: Error) => void) { const done = (er?: Error) => { fullyDone(er) } const checkCwd = () => { this[MKDIR](this.cwd, this.dmode, er => { if (er) { this[ONERROR](er, entry) done() return } this[CHECKED_CWD] = true start() }) } const start = () => { if (entry.absolute !== this.cwd) { const parent = normalizeWindowsPath( path.dirname(String(entry.absolute)), ) if (parent !== this.cwd) { return this[MKDIR](parent, this.dmode, er => { if (er) { this[ONERROR](er, entry) done() return } afterMakeParent() }) } } afterMakeParent() } const afterMakeParent = () => { fs.lstat(String(entry.absolute), (lstatEr, st) => { if ( st && (this.keep || /* c8 ignore next */ (this.newer && st.mtime > (entry.mtime ?? st.mtime))) ) { this[SKIP](entry) done() return } if (lstatEr || this[ISREUSABLE](entry, st)) { return this[MAKEFS](null, entry, done) } if (st.isDirectory()) { if (entry.type === 'Directory') { const needChmod = this.chmod && entry.mode && (st.mode & 0o7777) !== entry.mode const afterChmod = (er?: Error | null | undefined) => this[MAKEFS](er ?? null, entry, done) if (!needChmod) { return afterChmod() } return fs.chmod( String(entry.absolute), Number(entry.mode), afterChmod, ) } // Not a dir entry, have to remove it. // NB: the only way to end up with an entry that is the cwd // itself, in such a way that == does not detect, is a // tricky windows absolute path with UNC or 8.3 parts (and // preservePaths:true, or else it will have been stripped). // In that case, the user has opted out of path protections // explicitly, so if they blow away the cwd, c'est la vie. if (entry.absolute !== this.cwd) { return fs.rmdir(String(entry.absolute), (er?: null | Error) => this[MAKEFS](er ?? null, entry, done), ) } } // not a dir, and not reusable // don't remove if the cwd, we want that error if (entry.absolute === this.cwd) { return this[MAKEFS](null, entry, done) } unlinkFile(String(entry.absolute), er => this[MAKEFS](er ?? null, entry, done), ) }) } if (this[CHECKED_CWD]) { start() } else { checkCwd() } } [MAKEFS]( er: null | undefined | Error, entry: ReadEntry, done: () => void, ) { if (er) { this[ONERROR](er, entry) done() return } switch (entry.type) { case 'File': case 'OldFile': case 'ContiguousFile': return this[FILE](entry, done) case 'Link': return this[HARDLINK](entry, done) case 'SymbolicLink': return this[SYMLINK](entry, done) case 'Directory': case 'GNUDumpDir': return this[DIRECTORY](entry, done) } } [LINK]( entry: ReadEntry, linkpath: string, link: 'link' | 'symlink', done: () => void, ) { fs[link](linkpath, String(entry.absolute), er => { if (er) { this[ONERROR](er, entry) } else { this[UNPEND]() entry.resume() } done() }) } } const callSync = ( fn: () => T, ): [null, T] | [NodeJS.ErrnoException, null] => { try { return [null, fn()] } catch (er) { return [er as NodeJS.ErrnoException, null] } } export class UnpackSync extends Unpack { sync: true = true; [MAKEFS](er: null | Error | undefined, entry: ReadEntry) { return super[MAKEFS](er, entry, () => {}) } [CHECKFS](entry: ReadEntry) { if (!this[CHECKED_CWD]) { const er = this[MKDIR](this.cwd, this.dmode) if (er) { return this[ONERROR](er as Error, entry) } this[CHECKED_CWD] = true } // don't bother to make the parent if the current entry is the cwd, // we've already checked it. if (entry.absolute !== this.cwd) { const parent = normalizeWindowsPath( path.dirname(String(entry.absolute)), ) if (parent !== this.cwd) { const mkParent = this[MKDIR](parent, this.dmode) if (mkParent) { return this[ONERROR](mkParent as Error, entry) } } } const [lstatEr, st] = callSync(() => fs.lstatSync(String(entry.absolute)), ) if ( st && (this.keep || /* c8 ignore next */ (this.newer && st.mtime > (entry.mtime ?? st.mtime))) ) { return this[SKIP](entry) } if (lstatEr || this[ISREUSABLE](entry, st)) { return this[MAKEFS](null, entry) } if (st.isDirectory()) { if (entry.type === 'Directory') { const needChmod = this.chmod && entry.mode && (st.mode & 0o7777) !== entry.mode const [er] = needChmod ? callSync(() => { fs.chmodSync(String(entry.absolute), Number(entry.mode)) }) : [] return this[MAKEFS](er, entry) } // not a dir entry, have to remove it const [er] = callSync(() => fs.rmdirSync(String(entry.absolute))) this[MAKEFS](er, entry) } // not a dir, and not reusable. // don't remove if it's the cwd, since we want that error. const [er] = entry.absolute === this.cwd ? [] : callSync(() => unlinkFileSync(String(entry.absolute))) this[MAKEFS](er, entry) } [FILE](entry: ReadEntry, done: () => void) { const mode = typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.fmode const oner = (er?: null | Error | undefined) => { let closeError try { fs.closeSync(fd) } catch (e) { closeError = e } if (er || closeError) { this[ONERROR]((er as Error) || closeError, entry) } done() } let fd: number try { fd = fs.openSync( String(entry.absolute), getWriteFlag(entry.size), mode, ) /* c8 ignore start - This is only a problem if the file was successfully * statted, BUT failed to open. Testing this is annoying, and we * already have ample testint for other uses of oner() methods. */ } catch (er) { return oner(er as Error) } /* c8 ignore stop */ const tx = this.transform ? this.transform(entry) || entry : entry if (tx !== entry) { tx.on('error', er => this[ONERROR](er as Error, entry)) entry.pipe(tx) } tx.on('data', (chunk: Buffer) => { try { fs.writeSync(fd, chunk, 0, chunk.length) } catch (er) { oner(er as Error) } }) tx.on('end', () => { let er = null // try both, falling futimes back to utimes // if either fails, handle the first error if (entry.mtime && !this.noMtime) { const atime = entry.atime || new Date() const mtime = entry.mtime try { fs.futimesSync(fd, atime, mtime) } catch (futimeser) { try { fs.utimesSync(String(entry.absolute), atime, mtime) } catch { er = futimeser } } } if (this[DOCHOWN](entry)) { const uid = this[UID](entry) const gid = this[GID](entry) try { fs.fchownSync(fd, Number(uid), Number(gid)) } catch (fchowner) { try { fs.chownSync(String(entry.absolute), Number(uid), Number(gid)) } catch { er = er || fchowner } } } oner(er as Error) }) } [DIRECTORY](entry: ReadEntry, done: () => void) { const mode = typeof entry.mode === 'number' ? entry.mode & 0o7777 : this.dmode const er = this[MKDIR](String(entry.absolute), mode) if (er) { this[ONERROR](er as Error, entry) done() return } if (entry.mtime && !this.noMtime) { try { fs.utimesSync( String(entry.absolute), entry.atime || new Date(), entry.mtime, ) /* c8 ignore next */ } catch {} } if (this[DOCHOWN](entry)) { try { fs.chownSync( String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)), ) } catch {} } done() entry.resume() } [MKDIR](dir: string, mode: number) { try { return mkdirSync(normalizeWindowsPath(dir), { uid: this.uid, gid: this.gid, processUid: this.processUid, processGid: this.processGid, umask: this.processUmask, preserve: this.preservePaths, unlink: this.unlink, cwd: this.cwd, mode: mode, }) } catch (er) { return er } } [ENSURE_NO_SYMLINK]( _entry: ReadEntry, cwd: string, parts: string[], done: () => void, onError: (er: SymlinkError) => void, ) { if (this.preservePaths || parts.length === 0) return done() let t = cwd for (const p of parts) { t = path.resolve(t, p) const [er, st] = callSync(() => fs.lstatSync(t)) if (er) return done() if (st.isSymbolicLink()) { return onError( new SymlinkError(t, path.resolve(cwd, parts.join('/'))), ) } } done() } [LINK]( entry: ReadEntry, linkpath: string, link: 'link' | 'symlink', done: () => void, ) { const linkSync: `${typeof link}Sync` = `${link}Sync` try { fs[linkSync](linkpath, String(entry.absolute)) done() entry.resume() } catch (er) { return this[ONERROR](er as Error, entry) } } } isaacs-node-tar-0a52f00/src/update.ts000066400000000000000000000020231522005272700174230ustar00rootroot00000000000000// tar -u import { makeCommand } from './make-command.js' import { type TarOptionsWithAliases } from './options.js' import { replace as r } from './replace.js' // just call tar.r with the filter and mtimeCache export const update = makeCommand( r.syncFile, r.asyncFile, r.syncNoFile, r.asyncNoFile, (opt, entries = []) => { r.validate?.(opt, entries) mtimeFilter(opt) }, ) const mtimeFilter = (opt: TarOptionsWithAliases) => { const filter = opt.filter if (!opt.mtimeCache) { opt.mtimeCache = new Map() } opt.filter = filter ? (path, stat) => filter(path, stat) && !( /* c8 ignore start */ ( (opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) > (stat.mtime ?? 0) ) /* c8 ignore stop */ ) : (path, stat) => !( /* c8 ignore start */ ( (opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) > (stat.mtime ?? 0) ) /* c8 ignore stop */ ) } isaacs-node-tar-0a52f00/src/warn-method.ts000066400000000000000000000025601522005272700203740ustar00rootroot00000000000000import { type Minipass } from 'minipass' /** has a warn method */ export type Warner = { warn(code: string, message: string | Error, data: unknown): void file?: string cwd?: string strict?: boolean emit(event: 'warn', code: string, message: string, data?: WarnData): void emit(event: 'error', error: TarError): void } export type WarnEvent = Minipass.Events & { warn: [code: string, message: string, data: WarnData] } export type WarnData = { file?: string cwd?: string code?: string tarCode?: string recoverable?: boolean [k: string]: unknown } export type TarError = Error & WarnData export const warnMethod = ( self: Warner, code: string, message: string | Error, data: WarnData = {}, ) => { if (self.file) { data.file = self.file } if (self.cwd) { data.cwd = self.cwd } data.code = (message instanceof Error && (message as NodeJS.ErrnoException).code) || code data.tarCode = code if (!self.strict && data.recoverable !== false) { if (message instanceof Error) { data = Object.assign(message, data) message = message.message } self.emit('warn', code, message, data) } else if (message instanceof Error) { self.emit('error', Object.assign(message, data)) } else { self.emit( 'error', Object.assign(new Error(`${code}: ${message}`), data), ) } } isaacs-node-tar-0a52f00/src/winchars.ts000066400000000000000000000010411522005272700177560ustar00rootroot00000000000000// When writing files on Windows, translate the characters to their // 0xf000 higher-encoded versions. const raw = ['|', '<', '>', '?', ':'] const win = raw.map(char => String.fromCodePoint(0xf000 + Number(char.codePointAt(0))), ) const toWin = new Map(raw.map((char, i) => [char, win[i]])) const toRaw = new Map(win.map((char, i) => [char, raw[i]])) export const encode = (s: string) => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s) export const decode = (s: string) => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s) isaacs-node-tar-0a52f00/src/write-entry.ts000066400000000000000000000537011522005272700204430ustar00rootroot00000000000000import fs, { type Stats } from 'fs' import { Minipass } from 'minipass' import path from 'path' import { Header } from './header.js' import { modeFix } from './mode-fix.js' import { normalizeWindowsPath } from './normalize-windows-path.js' import type { LinkCacheKey, TarOptions, TarOptionsWithAliases, } from './options.js' import { dealias } from './options.js' import { Pax } from './pax.js' import type { ReadEntry } from './read-entry.js' import { stripAbsolutePath } from './strip-absolute-path.js' import { stripTrailingSlashes } from './strip-trailing-slashes.js' import type { EntryTypeName } from './types.js' import type { WarnData, Warner, WarnEvent } from './warn-method.js' import { warnMethod } from './warn-method.js' import * as winchars from './winchars.js' const prefixPath = (path: string, prefix?: string) => { if (!prefix) { return normalizeWindowsPath(path) } path = normalizeWindowsPath(path).replace(/^\.(\/|$)/, '') return stripTrailingSlashes(prefix) + '/' + path } const maxReadSize = 16 * 1024 * 1024 const PROCESS = Symbol('process') const FILE = Symbol('file') const DIRECTORY = Symbol('directory') const SYMLINK = Symbol('symlink') const HARDLINK = Symbol('hardlink') const HEADER = Symbol('header') const READ = Symbol('read') const LSTAT = Symbol('lstat') const ONLSTAT = Symbol('onlstat') const ONREAD = Symbol('onread') const ONREADLINK = Symbol('onreadlink') const OPENFILE = Symbol('openfile') const ONOPENFILE = Symbol('onopenfile') const CLOSE = Symbol('close') const MODE = Symbol('mode') const AWAITDRAIN = Symbol('awaitDrain') const ONDRAIN = Symbol('ondrain') const PREFIX = Symbol('prefix') export class WriteEntry extends Minipass implements Warner { path: string portable: boolean myuid: number = (process.getuid && process.getuid()) || 0 // until node has builtin pwnam functions, this'll have to do myuser: string = process.env.USER || '' maxReadSize: number linkCache: Exclude statCache: Exclude preservePaths: boolean cwd: string strict: boolean mtime?: Date noPax: boolean noMtime: boolean prefix?: string fd?: number blockLen: number = 0 blockRemain: number = 0 buf?: Buffer pos: number = 0 remain: number = 0 length: number = 0 offset: number = 0 win32: boolean absolute: string header?: Header type?: EntryTypeName | 'Unsupported' linkpath?: string stat?: Stats onWriteEntry?: (entry: WriteEntry) => unknown #hadError: boolean = false constructor(p: string, opt_: TarOptionsWithAliases = {}) { const opt = dealias(opt_) super() this.path = normalizeWindowsPath(p) // suppress atime, ctime, uid, gid, uname, gname this.portable = !!opt.portable this.maxReadSize = opt.maxReadSize || maxReadSize this.linkCache = opt.linkCache || new Map() this.statCache = opt.statCache || new Map() this.preservePaths = !!opt.preservePaths this.cwd = normalizeWindowsPath(opt.cwd || process.cwd()) this.strict = !!opt.strict this.noPax = !!opt.noPax this.noMtime = !!opt.noMtime this.mtime = opt.mtime this.prefix = opt.prefix ? normalizeWindowsPath(opt.prefix) : undefined this.onWriteEntry = opt.onWriteEntry if (typeof opt.onwarn === 'function') { this.on('warn', opt.onwarn) } let pathWarn: string | boolean = false if (!this.preservePaths) { const [root, stripped] = stripAbsolutePath(this.path) if (root && typeof stripped === 'string') { this.path = stripped pathWarn = root } } this.win32 = !!opt.win32 || process.platform === 'win32' if (this.win32) { // force the \ to / normalization, since we might not *actually* // be on windows, but want \ to be considered a path separator. this.path = winchars.decode(this.path.replaceAll(/\\/g, '/')) p = p.replaceAll(/\\/g, '/') } this.absolute = normalizeWindowsPath( opt.absolute || path.resolve(this.cwd, p), ) if (this.path === '') { this.path = './' } if (pathWarn) { this.warn( 'TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, { entry: this, path: pathWarn + this.path, }, ) } const cs = this.statCache.get(this.absolute) if (cs) { this[ONLSTAT](cs) } else { this[LSTAT]() } } warn(code: string, message: string | Error, data: WarnData = {}) { return warnMethod(this, code, message, data) } emit(ev: keyof WarnEvent, ...data: unknown[]) { if (ev === 'error') { this.#hadError = true } return super.emit(ev, ...data) } [LSTAT]() { fs.lstat(this.absolute, (er, stat) => { if (er) { return this.emit('error', er) } this[ONLSTAT](stat) }) } [ONLSTAT](stat: Stats) { this.statCache.set(this.absolute, stat) this.stat = stat if (!stat.isFile()) { stat.size = 0 } this.type = getType(stat) this.emit('stat', stat) this[PROCESS]() } [PROCESS]() { switch (this.type) { case 'File': return this[FILE]() case 'Directory': return this[DIRECTORY]() case 'SymbolicLink': return this[SYMLINK]() // unsupported types are ignored. default: return this.end() } } [MODE](mode: number) { return modeFix(mode, this.type === 'Directory', this.portable) } [PREFIX](path: string) { return prefixPath(path, this.prefix) } [HEADER]() { /* c8 ignore start */ if (!this.stat) { throw new Error('cannot write header before stat') } /* c8 ignore stop */ if (this.type === 'Directory' && this.portable) { this.noMtime = true } this.onWriteEntry?.(this) this.header = new Header({ path: this[PREFIX](this.path), // only apply the prefix to hard links. linkpath: this.type === 'Link' && this.linkpath !== undefined ? this[PREFIX](this.linkpath) : this.linkpath, // only the permissions and setuid/setgid/sticky bitflags // not the higher-order bits that specify file type mode: this[MODE](this.stat.mode), uid: this.portable ? undefined : this.stat.uid, gid: this.portable ? undefined : this.stat.gid, size: this.stat.size, mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime, /* c8 ignore next */ type: this.type === 'Unsupported' ? undefined : this.type, uname: this.portable ? undefined : this.stat.uid === this.myuid ? this.myuser : '', atime: this.portable ? undefined : this.stat.atime, ctime: this.portable ? undefined : this.stat.ctime, }) if (this.header.encode() && !this.noPax) { super.write( new Pax({ atime: this.portable ? undefined : this.header.atime, ctime: this.portable ? undefined : this.header.ctime, gid: this.portable ? undefined : this.header.gid, mtime: this.noMtime ? undefined : this.mtime || this.header.mtime, path: this[PREFIX](this.path), linkpath: this.type === 'Link' && this.linkpath !== undefined ? this[PREFIX](this.linkpath) : this.linkpath, size: this.header.size, uid: this.portable ? undefined : this.header.uid, uname: this.portable ? undefined : this.header.uname, dev: this.portable ? undefined : this.stat.dev, ino: this.portable ? undefined : this.stat.ino, nlink: this.portable ? undefined : this.stat.nlink, }).encode(), ) } const block = this.header?.block /* c8 ignore start */ if (!block) { throw new Error('failed to encode header') } /* c8 ignore stop */ super.write(block) } [DIRECTORY]() { /* c8 ignore start */ if (!this.stat) { throw new Error('cannot create directory entry without stat') } /* c8 ignore stop */ if (this.path.slice(-1) !== '/') { this.path += '/' } this.stat.size = 0 this[HEADER]() this.end() } [SYMLINK]() { fs.readlink(this.absolute, (er, linkpath) => { if (er) { return this.emit('error', er) } this[ONREADLINK](linkpath) }) } [ONREADLINK](linkpath: string) { this.linkpath = normalizeWindowsPath(linkpath) this[HEADER]() this.end() } [HARDLINK](linkpath: string) { /* c8 ignore start */ if (!this.stat) { throw new Error('cannot create link entry without stat') } /* c8 ignore stop */ this.type = 'Link' this.linkpath = normalizeWindowsPath(path.relative(this.cwd, linkpath)) this.stat.size = 0 this[HEADER]() this.end() } [FILE]() { /* c8 ignore start */ if (!this.stat) { throw new Error('cannot create file entry without stat') } /* c8 ignore stop */ if (this.stat.nlink > 1) { const linkKey = `${this.stat.dev}:${this.stat.ino}` as LinkCacheKey const linkpath = this.linkCache.get(linkKey) if (linkpath?.indexOf(this.cwd) === 0) { return this[HARDLINK](linkpath) } this.linkCache.set(linkKey, this.absolute) } this[HEADER]() if (this.stat.size === 0) { return this.end() } this[OPENFILE]() } [OPENFILE]() { fs.open(this.absolute, 'r', (er, fd) => { if (er) { return this.emit('error', er) } this[ONOPENFILE](fd) }) } [ONOPENFILE](fd: number) { this.fd = fd if (this.#hadError) { return this[CLOSE]() } /* c8 ignore start */ if (!this.stat) { throw new Error('should stat before calling onopenfile') } /* c8 ignore start */ this.blockLen = 512 * Math.ceil(this.stat.size / 512) this.blockRemain = this.blockLen const bufLen = Math.min(this.blockLen, this.maxReadSize) this.buf = Buffer.allocUnsafe(bufLen) this.offset = 0 this.pos = 0 this.remain = this.stat.size this.length = this.buf.length this[READ]() } [READ]() { const { fd, buf, offset, length, pos } = this if (fd === undefined || buf === undefined) { throw new Error('cannot read file without first opening') } fs.read(fd, buf, offset, length, pos, (er, bytesRead) => { if (er) { // ignoring the error from close(2) is a bad practice, but at // this point we already have an error, don't need another one return this[CLOSE](() => this.emit('error', er)) } this[ONREAD](bytesRead) }) } /* c8 ignore start */ [CLOSE]( cb: (er?: null | Error | NodeJS.ErrnoException) => unknown = () => {}, ) { /* c8 ignore stop */ if (this.fd !== undefined) fs.close(this.fd, cb) } [ONREAD](bytesRead: number) { if (bytesRead <= 0 && this.remain > 0) { const er = Object.assign(new Error('encountered unexpected EOF'), { path: this.absolute, syscall: 'read', code: 'EOF', }) return this[CLOSE](() => this.emit('error', er)) } if (bytesRead > this.remain) { const er = Object.assign( new Error('did not encounter expected EOF'), { path: this.absolute, syscall: 'read', code: 'EOF', }, ) return this[CLOSE](() => this.emit('error', er)) } /* c8 ignore start */ if (!this.buf) { throw new Error('should have created buffer prior to reading') } /* c8 ignore stop */ // null out the rest of the buffer, if we could fit the block padding // at the end of this loop, we've incremented bytesRead and this.remain // to be incremented up to the blockRemain level, as if we had expected // to get a null-padded file, and read it until the end. then we will // decrement both remain and blockRemain by bytesRead, and know that we // reached the expected EOF, without any null buffer to append. if (bytesRead === this.remain) { for ( let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++ ) { this.buf[i + this.offset] = 0 bytesRead++ this.remain++ } } const chunk = this.offset === 0 && bytesRead === this.buf.length ? this.buf : this.buf.subarray(this.offset, this.offset + bytesRead) const flushed = this.write(chunk) if (!flushed) { this[AWAITDRAIN](() => this[ONDRAIN]()) } else { this[ONDRAIN]() } } [AWAITDRAIN](cb: () => unknown) { this.once('drain', cb) } write(buffer: Buffer | string, cb?: () => void): boolean write( str: Buffer | string, encoding?: BufferEncoding | null, cb?: () => void, ): boolean write( chunk: Buffer | string, encoding?: BufferEncoding | (() => unknown) | null, cb?: () => unknown, ): boolean { /* c8 ignore start - just junk to comply with NodeJS.WritableStream */ if (typeof encoding === 'function') { cb = encoding encoding = undefined } if (typeof chunk === 'string') { chunk = Buffer.from( chunk, typeof encoding === 'string' ? encoding : 'utf8', ) } /* c8 ignore stop */ if (this.blockRemain < chunk.length) { const er = Object.assign( new Error('writing more data than expected'), { path: this.absolute, }, ) return this.emit('error', er) } this.remain -= chunk.length this.blockRemain -= chunk.length this.pos += chunk.length this.offset += chunk.length return super.write(chunk, null, cb) } [ONDRAIN]() { if (!this.remain) { if (this.blockRemain) { super.write(Buffer.alloc(this.blockRemain)) } return this[CLOSE](er => (er ? this.emit('error', er) : this.end())) } /* c8 ignore start */ if (!this.buf) { throw new Error('buffer lost somehow in ONDRAIN') } /* c8 ignore stop */ if (this.offset >= this.length) { // if we only have a smaller bit left to read, alloc a smaller buffer // otherwise, keep it the same length it was before. this.buf = Buffer.allocUnsafe( Math.min(this.blockRemain, this.buf.length), ) this.offset = 0 } this.length = this.buf.length - this.offset this[READ]() } } export class WriteEntrySync extends WriteEntry implements Warner { sync: true = true; [LSTAT]() { this[ONLSTAT](fs.lstatSync(this.absolute)) } [SYMLINK]() { this[ONREADLINK](fs.readlinkSync(this.absolute)) } [OPENFILE]() { this[ONOPENFILE](fs.openSync(this.absolute, 'r')) } [READ]() { let threw = true try { const { fd, buf, offset, length, pos } = this /* c8 ignore start */ if (fd === undefined || buf === undefined) { throw new Error('fd and buf must be set in READ method') } /* c8 ignore stop */ const bytesRead = fs.readSync(fd, buf, offset, length, pos) this[ONREAD](bytesRead) threw = false } finally { // ignoring the error from close(2) is a bad practice, but at // this point we already have an error, don't need another one if (threw) { try { this[CLOSE](() => {}) } catch {} } } } [AWAITDRAIN](cb: () => unknown) { cb() } /* c8 ignore start */ [CLOSE]( cb: (er?: null | Error | NodeJS.ErrnoException) => unknown = () => {}, ) { /* c8 ignore stop */ if (this.fd !== undefined) fs.closeSync(this.fd) cb() } } export class WriteEntryTar extends Minipass implements Warner { blockLen: number = 0 blockRemain: number = 0 buf: number = 0 pos: number = 0 remain: number = 0 length: number = 0 preservePaths: boolean portable: boolean strict: boolean noPax: boolean noMtime: boolean readEntry: ReadEntry type: EntryTypeName prefix?: string path: string mode?: number uid?: number gid?: number uname?: string gname?: string header?: Header mtime?: Date atime?: Date ctime?: Date linkpath?: string size: number onWriteEntry?: (entry: WriteEntry) => unknown warn(code: string, message: string | Error, data: WarnData = {}) { return warnMethod(this, code, message, data) } constructor(readEntry: ReadEntry, opt_: TarOptionsWithAliases = {}) { const opt = dealias(opt_) super() this.preservePaths = !!opt.preservePaths this.portable = !!opt.portable this.strict = !!opt.strict this.noPax = !!opt.noPax this.noMtime = !!opt.noMtime this.onWriteEntry = opt.onWriteEntry this.readEntry = readEntry const { type } = readEntry /* c8 ignore start */ if (type === 'Unsupported') { throw new Error('writing entry that should be ignored') } /* c8 ignore stop */ this.type = type if (this.type === 'Directory' && this.portable) { this.noMtime = true } this.prefix = opt.prefix this.path = normalizeWindowsPath(readEntry.path) this.mode = readEntry.mode !== undefined ? this[MODE](readEntry.mode) : undefined this.uid = this.portable ? undefined : readEntry.uid this.gid = this.portable ? undefined : readEntry.gid this.uname = this.portable ? undefined : readEntry.uname this.gname = this.portable ? undefined : readEntry.gname this.size = readEntry.size this.mtime = this.noMtime ? undefined : opt.mtime || readEntry.mtime this.atime = this.portable ? undefined : readEntry.atime this.ctime = this.portable ? undefined : readEntry.ctime this.linkpath = readEntry.linkpath !== undefined ? normalizeWindowsPath(readEntry.linkpath) : undefined if (typeof opt.onwarn === 'function') { this.on('warn', opt.onwarn) } let pathWarn: false | string = false if (!this.preservePaths) { const [root, stripped] = stripAbsolutePath(this.path) if (root && typeof stripped === 'string') { this.path = stripped pathWarn = root } } this.remain = readEntry.size this.blockRemain = readEntry.startBlockSize this.onWriteEntry?.(this as unknown as WriteEntry) this.header = new Header({ path: this[PREFIX](this.path), linkpath: this.type === 'Link' && this.linkpath !== undefined ? this[PREFIX](this.linkpath) : this.linkpath, // only the permissions and setuid/setgid/sticky bitflags // not the higher-order bits that specify file type mode: this.mode, uid: this.portable ? undefined : this.uid, gid: this.portable ? undefined : this.gid, size: this.size, mtime: this.noMtime ? undefined : this.mtime, type: this.type, uname: this.portable ? undefined : this.uname, atime: this.portable ? undefined : this.atime, ctime: this.portable ? undefined : this.ctime, }) if (pathWarn) { this.warn( 'TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, { entry: this, path: pathWarn + this.path, }, ) } if (this.header.encode() && !this.noPax) { super.write( new Pax({ atime: this.portable ? undefined : this.atime, ctime: this.portable ? undefined : this.ctime, gid: this.portable ? undefined : this.gid, mtime: this.noMtime ? undefined : this.mtime, path: this[PREFIX](this.path), linkpath: this.type === 'Link' && this.linkpath !== undefined ? this[PREFIX](this.linkpath) : this.linkpath, size: this.size, uid: this.portable ? undefined : this.uid, uname: this.portable ? undefined : this.uname, dev: this.portable ? undefined : this.readEntry.dev, ino: this.portable ? undefined : this.readEntry.ino, nlink: this.portable ? undefined : this.readEntry.nlink, }).encode(), ) } const b = this.header?.block /* c8 ignore start */ if (!b) throw new Error('failed to encode header') /* c8 ignore stop */ super.write(b) readEntry.pipe(this) } [PREFIX](path: string) { return prefixPath(path, this.prefix) } [MODE](mode: number) { return modeFix(mode, this.type === 'Directory', this.portable) } write(buffer: Buffer | string, cb?: () => void): boolean write( str: Buffer | string, encoding?: BufferEncoding | null, cb?: () => void, ): boolean write( chunk: Buffer | string, encoding?: BufferEncoding | (() => unknown) | null, cb?: () => unknown, ): boolean { /* c8 ignore start - just junk to comply with NodeJS.WritableStream */ if (typeof encoding === 'function') { cb = encoding encoding = undefined } if (typeof chunk === 'string') { chunk = Buffer.from( chunk, typeof encoding === 'string' ? encoding : 'utf8', ) } /* c8 ignore stop */ const writeLen = chunk.length if (writeLen > this.blockRemain) { throw new Error('writing more to entry than is appropriate') } this.blockRemain -= writeLen return super.write(chunk, cb) } end(cb?: () => void): this end(chunk: Buffer | string, cb?: () => void): this end( chunk: Buffer | string, encoding?: BufferEncoding, cb?: () => void, ): this end( chunk?: Buffer | string | (() => void), encoding?: BufferEncoding | (() => void), cb?: () => void, ): this { if (this.blockRemain) { super.write(Buffer.alloc(this.blockRemain)) } /* c8 ignore start - just junk to comply with NodeJS.WritableStream */ if (typeof chunk === 'function') { cb = chunk encoding = undefined chunk = undefined } if (typeof encoding === 'function') { cb = encoding encoding = undefined } if (typeof chunk === 'string') { chunk = Buffer.from(chunk, encoding ?? 'utf8') } if (cb) this.once('finish', cb) if (chunk) super.end(chunk, cb) else super.end(cb) /* c8 ignore stop */ return this } } const getType = (stat: Stats): EntryTypeName | 'Unsupported' => stat.isFile() ? 'File' : stat.isDirectory() ? 'Directory' : stat.isSymbolicLink() ? 'SymbolicLink' : 'Unsupported' isaacs-node-tar-0a52f00/tap-snapshots/000077500000000000000000000000001522005272700176115ustar00rootroot00000000000000isaacs-node-tar-0a52f00/tap-snapshots/test/000077500000000000000000000000001522005272700205705ustar00rootroot00000000000000isaacs-node-tar-0a52f00/tap-snapshots/test/ghsa-8qq5-rm4j-mr97.ts.test.cjs000066400000000000000000000017751522005272700260720ustar00rootroot00000000000000/* IMPORTANT * This snapshot file is auto-generated, but designed for humans. * It should be checked into source control and tracked carefully. * Re-generate by setting TAP_SNAPSHOT=1 and running tests. * Make sure to inspect the output below. Do not ignore changes! */ 'use strict' exports[`test/ghsa-8qq5-rm4j-mr97.ts > TAP > warnings > must match snapshot 1`] = ` Array [ Array [ "TAR_ENTRY_INFO", "stripping / from absolute linkpath", ], Array [ "TAR_ENTRY_ERROR", "ENOENT: no such file or directory, link", ], Array [ "TAR_ENTRY_ERROR", "linkpath contains '..'", ], Array [ "TAR_ENTRY_INFO", "stripping / from absolute linkpath", ], Array [ "TAR_ENTRY_ERROR", "linkpath escapes extraction directory", ], Array [ "TAR_ENTRY_INFO", "stripping / from absolute linkpath", ], Array [ "TAR_ENTRY_INFO", "stripping c: from absolute linkpath", ], Array [ "TAR_ENTRY_ERROR", "linkpath escapes extraction directory", ], ] ` isaacs-node-tar-0a52f00/tap-snapshots/test/normalize-unicode.js-win32.test.cjs000066400000000000000000000021661522005272700272530ustar00rootroot00000000000000/* IMPORTANT * This snapshot file is auto-generated, but designed for humans. * It should be checked into source control and tracked carefully. * Re-generate by setting TAP_SNAPSHOT=1 and running tests. * Make sure to inspect the output below. Do not ignore changes! */ 'use strict' exports[`test/normalize-unicode.js win32 > TAP > normalize with strip slashes > "\\\\\eee\\\\\\" > normalized 1`] = ` \\\\\EEE\\\\\\ ` exports[`test/normalize-unicode.js win32 > TAP > normalize with strip slashes > "\\\\a\\\\b\\\\c\\\\d\\\\" > normalized 1`] = ` /A/B/C/D ` exports[`test/normalize-unicode.js win32 > TAP > normalize with strip slashes > "﹨aaaa﹨dddd﹨" > normalized 1`] = ` ﹨AAAA﹨DDDD﹨ ` exports[`test/normalize-unicode.js win32 > TAP > normalize with strip slashes > "\bbb\eee\" > normalized 1`] = ` \BBB\EEE\ ` exports[`test/normalize-unicode.js win32 > TAP > normalize with strip slashes > "1/4foo.txt" > normalized 1`] = ` 1/4FOO.TXT ` exports[`test/normalize-unicode.js win32 > TAP > normalize with strip slashes > "¼foo.txt" > normalized 1`] = ` ¼FOO.TXT ` isaacs-node-tar-0a52f00/tap-snapshots/test/unpack.js.test.cjs000066400000000000000000000016771522005272700241560ustar00rootroot00000000000000/* IMPORTANT * This snapshot file is auto-generated, but designed for humans. * It should be checked into source control and tracked carefully. * Re-generate by setting TAP_SNAPSHOT=1 and running tests. * Make sure to inspect the output below. Do not ignore changes! */ 'use strict' exports[`test/unpack.js > TAP > ignore self-referential hardlinks > async > must match snapshot 1`] = ` Array [ "ENOENT: no such file or directory, link '{CWD}/.tap/fixtures/test-unpack.js-ignore-self-referential-hardlinks-async/autolink' -> '{CWD}/.tap/fixtures/test-unpack.js-ignore-self-referential-hardlinks-async/autolink'", ] ` exports[`test/unpack.js > TAP > ignore self-referential hardlinks > sync > must match snapshot 1`] = ` Array [ "ENOENT: no such file or directory, link '{CWD}/.tap/fixtures/test-unpack.js-ignore-self-referential-hardlinks-sync/autolink' -> '{CWD}/.tap/fixtures/test-unpack.js-ignore-self-referential-hardlinks-sync/autolink'", ] ` isaacs-node-tar-0a52f00/test/000077500000000000000000000000001522005272700157645ustar00rootroot00000000000000isaacs-node-tar-0a52f00/test/create.ts000066400000000000000000000175571522005272700176160ustar00rootroot00000000000000import fs from 'node:fs' import fsp from 'node:fs/promises' import { mkdirp } from 'mkdirp' import path from 'node:path' import { rimraf } from 'rimraf' import type { Test } from 'tap' import t from 'tap' import { c, list, Pack, PackSync } from '../dist/esm/index.js' import { spawn } from 'child_process' import { fileURLToPath } from 'url' const isWindows = process.platform === 'win32' const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const dir = path.resolve(__dirname, 'fixtures/create') const tars = path.resolve(__dirname, 'fixtures/tars') const readtar = ( file: string, cb: ( code: number | null, signal: null | NodeJS.Signals, output: string, ) => any, ) => { const child = spawn('tar', ['tf', file]) const out: Buffer[] = [] child.stdout.on('data', c => out.push(c)) child.on('close', (code, signal) => cb(code, signal, Buffer.concat(out).toString()), ) } t.teardown(() => rimraf(dir)) t.before(async () => { await rimraf(dir) await mkdirp(dir) }) t.test('no cb if sync or without file', t => { //@ts-expect-error t.throws(() => c({ sync: true }, ['asdf'], () => {})) //@ts-expect-error t.throws(() => c(() => {})) t.throws(() => c({}, () => {})) t.throws(() => c({}, ['asdf'], () => {})) t.end() }) t.test('create file', t => { const files = [path.basename(__filename)] t.test('sync', t => { const file = path.resolve(dir, 'sync.tar') c( { file: file, cwd: __dirname, sync: true, }, files, ) readtar(file, (code, signal, list) => { t.equal(code, 0) t.equal(signal, null) t.equal(list.trim(), 'create.ts') t.end() }) }) t.test('async', t => { const file = path.resolve(dir, 'async.tar') c( { file: file, cwd: __dirname, }, files, er => { if (er) { throw er } readtar(file, (code, signal, list) => { t.equal(code, 0) t.equal(signal, null) t.equal(list.trim(), 'create.ts') t.end() }) }, ) }) t.test('async promise only', t => { const file = path.resolve(dir, 'promise.tar') c( { file: file, cwd: __dirname, }, files, ).then(() => { readtar(file, (code, signal, list) => { t.equal(code, 0) t.equal(signal, null) t.equal(list.trim(), 'create.ts') t.end() }) }) }) t.test('with specific mode', t => { const mode = isWindows ? 0o666 : 0o740 t.test('sync', t => { const file = path.resolve(dir, 'sync-mode.tar') c( { mode: mode, file: file, cwd: __dirname, sync: true, }, files, ) readtar(file, (code, signal, list) => { t.equal(code, 0) t.equal(signal, null) t.equal(list.trim(), 'create.ts') t.equal(fs.lstatSync(file).mode & 0o7777, mode) t.end() }) }) t.test('async', t => { const file = path.resolve(dir, 'async-mode.tar') c( { mode: mode, file: file, cwd: __dirname, }, files, er => { if (er) { throw er } readtar(file, (code, signal, list) => { t.equal(code, 0) t.equal(signal, null) t.equal(list.trim(), 'create.ts') t.equal(fs.lstatSync(file).mode & 0o7777, mode) t.end() }) }, ) }) t.end() }) t.end() }) t.test('create', t => { const ps = c({ sync: true }, ['README.md']) t.equal(ps.sync, true) t.type(ps, PackSync) const p = c(['README.md']) //@ts-expect-error p.then p.sync t.type(c(['README.md']), Pack) t.end() }) t.test('open fails', async t => { const poop = new Error('poop') const file = path.resolve(dir, 'throw-open.tar') const cbFail = (...args: any[]) => (args[args.length - 1] as Function)(poop) const syncFail = () => { throw poop } const asyncFail = async () => syncFail() const { create } = await t.mockImport( '../src/create.js', { fs: t.createMock(fs, { open: cbFail, stat: cbFail, lstat: cbFail, fstat: cbFail, openSync: syncFail, statSync: syncFail, lstatSync: syncFail, fstatSync: syncFail, }), 'fs/promises': t.createMock(fsp, { open: asyncFail, stat: asyncFail, lstat: asyncFail, fstat: asyncFail, }), }, ) t.throws( () => create( { file, sync: true, cwd: __dirname, }, [path.basename(__filename)], ), poop, ) t.throws(() => fs.lstatSync(file)) t.end() }) t.test('gzipped tarball that makes some drain/resume stuff', t => { const cwd = path.dirname(__dirname) const out = path.resolve(dir, 'package.tgz') // don't include node_modules/.cache, since that gets written to // by nyc during tests, and can result in spurious errors. const entries = fs .readdirSync(`${cwd}/node_modules`) .filter(e => !/^[@.]/.test(e)) .map(e => `node_modules/${e}`) const stream = c({ z: true, C: cwd }, entries) const outStream = fs.createWriteStream(out) outStream.on('drain', () => { stream.resume() }) stream.pipe(outStream).on('finish', () => { const child = spawn('tar', ['tf', out], { stdio: ['ignore', 'ignore', 'pipe'], }) child.stderr.on('data', c => { t.fail(c + '') }) child.on('close', (code, signal) => { t.equal(code, 0) t.equal(signal, null) t.end() }) }) }) t.test('create tarball out of another tarball', t => { const out = path.resolve(dir, 'out.tar') const check = (t: Test) => { const expect = [ 'dir/', 'Ω.txt', '🌟.txt', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', 'hardlink-1', 'hardlink-2', 'symlink', ] list({ f: out, sync: true, onReadEntry: entry => { if (entry.path === 'hardlink-2') { t.equal(entry.type, 'Link') } else if (entry.path === 'symlink') { t.equal(entry.type, 'SymbolicLink') } else if (entry.path === 'dir/') { t.equal(entry.type, 'Directory') } else { t.equal(entry.type, 'File') } t.equal(entry.path, expect.shift()) }, }) t.same(expect, []) t.end() } t.test('sync', t => { c( { f: out, cwd: tars, sync: true, }, ['@dir.tar', '@utf8.tar', '@links.tar'], ) check(t) }) t.test('async', async t => { await c( { f: out, cwd: tars, }, ['@dir.tar', '@utf8.tar', '@links.tar'], ) check(t) }) t.end() }) t.test('must specify some files', t => { t.throws(() => c({}), 'no paths specified to add to archive') t.end() }) t.test('error from @ file entry should be catchable', t => { t.test('async with file option', t => { const file = path.resolve(dir, 'at-error-file.tar') t.rejects( c( { file: file, cwd: __dirname, }, ['@nonexistent.tar'], ), ).then(() => t.end()) }) t.test('async without file option', t => { const stream = c( { cwd: __dirname, }, ['@nonexistent.tar'], ) stream.on('error', er => { t.match(er, { code: 'ENOENT' }) t.end() }) stream.resume() }) t.end() }) t.test('transform a filename', async t => { const cwd = t.testdir({ 'README.md': 'hello, world', }) const data = await c( { cwd, onWriteEntry: entry => { entry.path = 'bloorg.md' }, sync: true, }, ['README.md'], ).concat() t.equal(data.subarray(0, 'bloorg.md'.length).toString(), 'bloorg.md') }) isaacs-node-tar-0a52f00/test/cwd-error.js000066400000000000000000000003461522005272700202310ustar00rootroot00000000000000import t from 'tap' import { CwdError } from '../dist/esm/cwd-error.js' t.match(new CwdError('path', 'code'), { name: 'CwdError', path: 'path', code: 'code', syscall: 'chdir', message: `code: Cannot cd into 'path'`, }) isaacs-node-tar-0a52f00/test/dir-normalization.tar000066400000000000000000000110001522005272700221260ustar00rootroot00000000000000fixtures/000755 057761 000024 00000000000 12511342154 013343 5ustar00isaacsstaff000000 000000 fixtures/a/000755 057761 000024 00000000000 12511342040 013555 5ustar00isaacsstaff000000 000000 fixtures/the-chumbler000755 057761 000024 00000000000 12505125041 021322 2/a/b/c/d/the-chumblerustar00isaacsstaff000000 000000 fixtures/a/b/000755 057761 000024 00000000000 12511342030 013775 5ustar00isaacsstaff000000 000000 fixtures/a/x000644 057761 000024 00000000000 12511342040 013735 0ustar00isaacsstaff000000 000000 fixtures/a/b/c/000755 057761 000024 00000000000 12511342055 014226 5ustar00isaacsstaff000000 000000 fixtures/a/b/c/y000755 057761 000024 00000000000 12511342055 015232 2../../xustar00isaacsstaff000000 000000 isaacs-node-tar-0a52f00/test/extract.ts000066400000000000000000000360001522005272700200050ustar00rootroot00000000000000import fs, { readFileSync } from 'fs' import http from 'http' import { mkdirp } from 'mkdirp' import nock from 'nock' import path from 'path' import { rimraf } from 'rimraf' import { pipeline as PL } from 'stream' import type { Test } from 'tap' import t from 'tap' import { fileURLToPath } from 'url' import { promisify } from 'util' import zlib from 'zlib' import { extract as x } from '../dist/esm/extract.js' import { Unpack, UnpackSync } from '../dist/esm/unpack.js' import { makeTar } from './fixtures/make-tar.js' import { Pax } from '../src/pax.js' const pipeline = promisify(PL) const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const extractdir = path.resolve(__dirname, 'fixtures/extract') const tars = path.resolve(__dirname, 'fixtures/tars') const makeCompressedBomb = () => { const payload = Buffer.alloc(8 * 1024 * 1024) return zlib.gzipSync( makeTar([ { path: 'bomb', size: payload.length, type: 'File', }, payload, '', '', ]), ) } const tnock = (t: Test, host: string, opts?: nock.Options) => { nock.disableNetConnect() const server = nock(host, opts) t.teardown(function () { nock.enableNetConnect() server.done() }) return server } t.teardown(() => rimraf(extractdir)) t.test('basic extracting', t => { const file = path.resolve(tars, 'utf8.tar') const dir = path.resolve(extractdir, 'basic') t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const check = async (t: Test) => { fs.lstatSync(dir + '/Ω.txt') fs.lstatSync(dir + '/🌟.txt') t.throws(() => fs.lstatSync( dir + '/long-path/r/e/a/l/l/y/-/d/e/e/p/-' + '/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', ), ) await rimraf(dir) } const files = ['🌟.txt', 'Ω.txt'] t.test('sync', t => { x({ file, sync: true, C: dir }, files) return check(t) }) t.test('async promisey', async t => { const p = x({ file, cwd: dir }, files) //@ts-expect-error p.sync //@ts-expect-error p.write await p return check(t) }) t.test('async cb', async t => { const p = x({ file, cwd: dir }, files, er => { if (er) { throw er } return check(t) }) //@ts-expect-error p.sync //@ts-expect-error p.write await p }) t.test('stream sync', t => { const ups = x({ cwd: dir, sync: true }, files) ups.end(fs.readFileSync(file)) //@ts-expect-error ups.then t.equal(ups.sync, true) return check(t) }) t.test('stream async', async t => { const up = x({ cwd: dir }, files) //@ts-expect-error up.then //@ts-expect-error up.sync await new Promise(r => up.end(fs.readFileSync(file)).on('end', r), ) return check(t) }) t.end() }) t.test('ensure an open stream is not prematurely closed', t => { t.plan(1) const file = path.resolve(tars, 'long-paths.tar') const dir = t.testdir({}) t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const check = async (t: Test) => { t.ok(fs.lstatSync(dir + '/long-path')) await rimraf(dir) t.end() } t.test('async promisey', async t => { const stream = fs.createReadStream(file, { highWaterMark: 1, }) await pipeline(stream, x({ cwd: dir })) return check(t) }) t.end() }) t.test('ensure an open stream is not prematuraly closed http', t => { t.plan(1) const file = path.resolve(tars, 'long-paths.tar') const dir = path.resolve(extractdir, 'basic-with-stream-http') t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const check = async (t: Test) => { t.ok(fs.lstatSync(dir + '/long-path')) await rimraf(dir) t.end() } t.test('async promisey', t => { tnock(t, 'http://codeload.github.com/') .get('/npm/node-tar/tar.gz/main') .delay(250) .reply(200, () => fs.createReadStream(file)) http.get( 'http://codeload.github.com/npm/node-tar/tar.gz/main', async stream => { await pipeline(stream, x({ cwd: dir })) return check(t) }, ) }) t.end() }) t.test('file list and filter', t => { const file = path.resolve(tars, 'utf8.tar') const dir = path.resolve(extractdir, 'filter') t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const check = async (t: Test) => { fs.lstatSync(dir + '/Ω.txt') t.throws(() => fs.lstatSync(dir + '/🌟.txt')) t.throws(() => fs.lstatSync( dir + '/long-path/r/e/a/l/l/y/-/d/e/e/p/-' + '/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', ), ) await rimraf(dir) } const filter = (path: string) => path === 'Ω.txt' t.test('sync file', t => { x({ filter, file, sync: true, C: dir }, ['🌟.txt', 'Ω.txt']) return check(t) }) t.test('async file', async t => { await x({ filter, file, cwd: dir }, ['🌟.txt', 'Ω.txt']) check(t) }) t.test('async cb', t => { return x({ filter, file, cwd: dir }, ['🌟.txt', 'Ω.txt'], er => { if (er) { throw er } return check(t) }) }) t.end() }) t.test('no file list', t => { const file = path.resolve(tars, 'body-byte-counts.tar') const dir = path.resolve(extractdir, 'no-list') t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const check = async (t: Test) => { t.equal(fs.lstatSync(path.resolve(dir, '1024-bytes.txt')).size, 1024) t.equal(fs.lstatSync(path.resolve(dir, '512-bytes.txt')).size, 512) t.equal(fs.lstatSync(path.resolve(dir, 'one-byte.txt')).size, 1) t.equal(fs.lstatSync(path.resolve(dir, 'zero-byte.txt')).size, 0) await rimraf(dir) } t.test('sync file', t => { x({ file, sync: true, C: dir }) return check(t) }) t.test('async promisey file', async t => { await x({ file, cwd: dir }) return check(t) }) t.test('async cb', t => { return x({ file: file, cwd: dir }, er => { if (er) { throw er } return check(t) }) }) t.test('sync stream', t => { const up = x({ sync: true, C: dir }) t.equal(up.sync, true) t.type(up, UnpackSync) //@ts-expect-error up.then up.end(fs.readFileSync(file)) return check(t) }) t.test('async stream', t => { const up = x({ C: dir }) t.type(up, Unpack) //@ts-expect-error up.sync //@ts-expect-error up.then up.end(fs.readFileSync(file)) return new Promise(r => up.on('close', () => r(check(t)))) }) t.end() }) t.test('read in itty bits', t => { const maxReadSize = 1000 const file = path.resolve(tars, 'body-byte-counts.tar') const dir = path.resolve(extractdir, 'no-list') t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const check = async (t: Test) => { t.equal(fs.lstatSync(path.resolve(dir, '1024-bytes.txt')).size, 1024) t.equal(fs.lstatSync(path.resolve(dir, '512-bytes.txt')).size, 512) t.equal(fs.lstatSync(path.resolve(dir, 'one-byte.txt')).size, 1) t.equal(fs.lstatSync(path.resolve(dir, 'zero-byte.txt')).size, 0) await rimraf(dir) } t.test('sync', t => { x({ file: file, sync: true, C: dir, maxReadSize: maxReadSize }) return check(t) }) t.test('async promisey', async t => { await x({ file: file, cwd: dir, maxReadSize: maxReadSize }) return check(t) }) t.test('async cb', t => { return x({ file: file, cwd: dir, maxReadSize: maxReadSize }, er => { if (er) { throw er } return check(t) }) }) t.end() }) t.test('bad calls', t => { t.throws(() => x({}, () => {})) t.throws(() => x({}, [], () => {})) //@ts-expect-error t.throws(() => x({ sync: true }, () => {})) //@ts-expect-error t.throws(() => x({ sync: true }, [], () => {})) t.end() }) t.test('no file', t => { const up = x() t.type(up, Unpack) //@ts-expect-error up.then //@ts-expect-error up.sync const upf = x(['asdf']) //@ts-expect-error upf.then //@ts-expect-error upf.sync t.type(upf, Unpack) const ups = x({ sync: true }) //@ts-expect-error ups.then t.equal(ups.sync, true) t.type(ups, UnpackSync) t.end() }) t.test('nonexistent', async t => { t.throws(() => x({ sync: true, file: 'does not exist' })) await t.rejects(x({ file: 'does not exist' })) }) t.test('read fail', async t => { const poop = new Error('poop') const { extract } = await t.mockImport< typeof import('../src/extract.js') >('../src/extract.js', { fs: t.createMock(fs, { readSync: () => { throw poop }, }), }) t.throws( () => extract({ maxReadSize: 10, sync: true, file: __filename }), poop, ) }) t.test('sync gzip error edge case test', async t => { const file = path.resolve(__dirname, 'fixtures/sync-gzip-fail.tgz') const dir = path.resolve(__dirname, 'sync-gzip-fail') const cwd = process.cwd() await mkdirp(dir + '/x') process.chdir(dir) t.teardown(async () => { process.chdir(cwd) await rimraf(dir) }) x({ sync: true, file: file, onwarn: (_c: any, _m: any, er) => { throw er }, }) t.same(fs.readdirSync(dir + '/x').sort(), [ '1', '10', '2', '3', '4', '5', '6', '7', '8', '9', ]) t.end() }) t.test('max decompression ratio', async t => { const file = path.resolve(extractdir, 'bomb.tgz') const bomb = makeCompressedBomb() await mkdirp(extractdir) fs.writeFileSync(file, bomb) t.teardown(() => rimraf(file)) t.test('file extraction aborts by default', async t => { const cwd = t.testdir({}) t.throws( () => x({ sync: true, file, cwd }), { tarCode: 'TAR_ABORT', recoverable: false, message: /max decompression ratio exceeded/, }, 'sync throws', ) await t.rejects(x({ file, cwd }), { tarCode: 'TAR_ABORT', recoverable: false, message: /max decompression ratio exceeded/, }) }) t.test('file extraction can disable the limit explicitly', async t => { const cwd = t.testdir({}) await x({ file, cwd, maxDecompressionRatio: Infinity, }) t.equal(fs.statSync(path.resolve(cwd, 'bomb')).size, 8 * 1024 * 1024) }) t.end() }) t.test('brotli', async t => { const file = path.resolve(__dirname, 'fixtures/example.tbr') const dir = path.resolve(__dirname, 'brotli') t.beforeEach(async () => { await mkdirp(dir) }) t.afterEach(async () => { await rimraf(dir) }) t.test('fails if unknown file extension', async t => { const filename = path.resolve(__dirname, 'brotli/example.unknown') const f = fs.openSync(filename, 'a') fs.closeSync(f) const expect = new Error( 'TAR_BAD_ARCHIVE: Unrecognized archive format', ) t.throws(() => x({ sync: true, file: filename }), expect) }) t.test('succeeds based on file extension', t => { x({ sync: true, file: file, C: dir }) t.same(fs.readdirSync(dir + '/x').sort(), [ '1', '10', '2', '3', '4', '5', '6', '7', '8', '9', ]) t.end() }) t.test('succeeds when passed explicit option', t => { x({ sync: true, file: file, C: dir, brotli: true }) t.same(fs.readdirSync(dir + '/x').sort(), [ '1', '10', '2', '3', '4', '5', '6', '7', '8', '9', ]) t.end() }) }) t.test('zstd', async t => { const file = path.resolve(__dirname, 'fixtures/example.tzst') const dir = path.resolve(__dirname, 'zstd') t.beforeEach(async () => { await mkdirp(dir) }) t.afterEach(async () => { await rimraf(dir) }) t.test('succeeds based on magic bytes', async t => { // copy the file to a new location with a different extension const unknownExtension = path.resolve( __dirname, 'zstd/example.unknown', ) fs.copyFileSync(file, unknownExtension) x({ sync: true, file: unknownExtension, C: dir }) t.same(fs.readdirSync(dir + '/x').sort(), [ '1', '10', '2', '3', '4', '5', '6', '7', '8', '9', ]) t.end() }) t.test('succeeds based on file extension', t => { x({ sync: true, file: file, C: dir }) t.same(fs.readdirSync(dir + '/x').sort(), [ '1', '10', '2', '3', '4', '5', '6', '7', '8', '9', ]) t.end() }) t.test('succeeds when passed explicit option', t => { x({ sync: true, file: file, C: dir, brotli: true }) t.same(fs.readdirSync(dir + '/x').sort(), [ '1', '10', '2', '3', '4', '5', '6', '7', '8', '9', ]) t.end() }) }) t.test('verify long linkname is not a problem', async t => { // See: https://github.com/isaacs/node-tar/issues/312 const file = path.resolve(__dirname, 'fixtures/long-linkname.tar') t.test('sync', t => { const cwd = t.testdir({}) const result = x({ sync: true, strict: true, file, cwd }) t.equal(result, undefined) t.ok(fs.lstatSync(cwd + '/test').isSymbolicLink()) t.end() }) t.test('async', async t => { await x({ file, C: t.testdir({}), strict: true }) t.ok(fs.lstatSync(t.testdirName + '/test').isSymbolicLink()) }) }) t.test('numeric pax/entry name discernment', t => { const numericName = '12345' const alphaName = 'abcde' for (const strict of [true, false]) { t.test('strict=' + strict, t => { for (const paxName of [numericName, alphaName]) { t.test('paxName=' + paxName, t => { for (const entryName of [numericName, alphaName]) { t.test('entryName=' + entryName, t => { const paxHeader = new Pax( { path: paxName, size: '12345\n'.length, }, false, ) const paxData = paxHeader.encode() const data = makeTar([ paxData, { type: 'File', path: entryName, mode: 0o755, ctime: new Date('2000-01-01T00:00:00.000Z'), mtime: new Date('2000-01-01T00:00:00.000Z'), size: '12345\n'.length, }, '12345\n', '', '', ]) t.test('sync', t => { const dir = t.testdir({ tarFile: data }) x({ strict, sync: true, cwd: dir, file: dir + '/tarFile' }) t.equal( readFileSync(dir + '/' + paxName, 'utf8'), '12345\n', ) t.end() }) t.test('async', async t => { const dir = t.testdir({ tarFile: data }) await x({ strict, cwd: dir, file: dir + '/tarFile' }) t.equal( readFileSync(dir + '/' + paxName, 'utf8'), '12345\n', ) t.end() }) t.end() }) } t.end() }) } t.end() }) t.end() } }) isaacs-node-tar-0a52f00/test/fixtures/000077500000000000000000000000001522005272700176355ustar00rootroot00000000000000isaacs-node-tar-0a52f00/test/fixtures/.gitattributes000066400000000000000000000000251522005272700225250ustar00rootroot00000000000000files/** text eol=lf isaacs-node-tar-0a52f00/test/fixtures/.taprc.win32000066400000000000000000000000641522005272700217100ustar00rootroot00000000000000lines: 98 branches: 98 statements: 98 functions: 98 isaacs-node-tar-0a52f00/test/fixtures/example.tbr000066400000000000000000000003111522005272700217740ustar00rootroot00000000000000O aMGRmjz!ۮ@@$z nP 'Q65%xDܼhh,E`!GJPyɴF ga`t-8I%A[# ]g zbn,\$_'WfY; h`sA\{# @GFisaacs-node-tar-0a52f00/test/fixtures/example.tzst000066400000000000000000000003401522005272700222130ustar00rootroot00000000000000(/X'݈"u)!r$#flnʡmETRUXްqu^9$TfsCeIJMB8 OhWW7GQ[׶,'/ *% { let dataLen = 0 return Buffer.concat( chunks.map(chunk => { if (Buffer.isBuffer(chunk)) { dataLen += chunk.length return chunk } const size = Math.max( typeof chunk === 'string' ? 512 * Math.ceil(chunk.length / 512) : 512, ) dataLen += size const buf = Buffer.alloc(size) if (typeof chunk === 'string') { buf.write(chunk) } else { new Header(chunk).encode(buf, 0) } return buf }), dataLen, ) } isaacs-node-tar-0a52f00/test/fixtures/make-tar.ts000066400000000000000000000012661522005272700217130ustar00rootroot00000000000000import { Header, HeaderData } from '../../dist/esm/header.js' export type Chunks = (Buffer | string | HeaderData)[] export const makeTar = (chunks: Chunks) => { let dataLen = 0 return Buffer.concat( chunks.map(chunk => { if (Buffer.isBuffer(chunk)) { dataLen += chunk.length return chunk } const size = Math.max( typeof chunk === 'string' ? 512 * Math.ceil(chunk.length / 512) : 512, ) dataLen += size const buf = Buffer.alloc(size) if (typeof chunk === 'string') { buf.write(chunk) } else { new Header(chunk).encode(buf, 0) } return buf }), dataLen, ) } isaacs-node-tar-0a52f00/test/fixtures/parse/000077500000000000000000000000001522005272700207475ustar00rootroot00000000000000isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum--filter-strict.json000066400000000000000000000017301522005272700263570ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum--filter.json000066400000000000000000000015521522005272700250530ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum--meta-250-filter-strict.json000066400000000000000000000017301522005272700276070ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum--meta-250-filter.json000066400000000000000000000015521522005272700263030ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum--meta-250-strict.json000066400000000000000000000017301522005272700263240ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum--meta-250.json000066400000000000000000000015521522005272700250200ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum--strict.json000066400000000000000000000017301522005272700250740ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/bad-cksum.json000066400000000000000000000015521522005272700235130ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts--filter-strict.json000066400000000000000000000053361522005272700277260ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts--filter.json000066400000000000000000000053361522005272700264200ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts--meta-250-filter-strict.json000066400000000000000000000053361522005272700311560ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts--meta-250-filter.json000066400000000000000000000053361522005272700276500ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts--meta-250-strict.json000066400000000000000000000053141522005272700276670ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts--meta-250.json000066400000000000000000000053141522005272700263610ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts--strict.json000066400000000000000000000053141522005272700264370ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/body-byte-counts.json000066400000000000000000000053141522005272700250540ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir--filter-strict.json000066400000000000000000000013331522005272700252660ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir--filter.json000066400000000000000000000013331522005272700237600ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir--meta-250-filter-strict.json000066400000000000000000000013331522005272700265160ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir--meta-250-filter.json000066400000000000000000000013331522005272700252100ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir--meta-250-strict.json000066400000000000000000000013251522005272700252340ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir--meta-250.json000066400000000000000000000013251522005272700237260ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir--strict.json000066400000000000000000000013251522005272700240040ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/dir.json000066400000000000000000000013251522005272700224210ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax--filter-strict.json000066400000000000000000000034101522005272700263550ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax--filter.json000066400000000000000000000034101522005272700250470ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax--meta-250-filter-strict.json000066400000000000000000000034101522005272700276050ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax--meta-250-filter.json000066400000000000000000000034101522005272700262770ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax--meta-250-strict.json000066400000000000000000000034021522005272700263230ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax--meta-250.json000066400000000000000000000034021522005272700250150ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax--strict.json000066400000000000000000000034021522005272700250730ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/emptypax.json000066400000000000000000000034021522005272700235100ustar00rootroot00000000000000[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file--filter-strict.json000066400000000000000000000013401522005272700254250ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file--filter.json000066400000000000000000000013401522005272700241170ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file--meta-250-filter-strict.json000066400000000000000000000013401522005272700266550ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file--meta-250-filter.json000066400000000000000000000013401522005272700253470ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file--meta-250-strict.json000066400000000000000000000013401522005272700253720ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file--meta-250.json000066400000000000000000000013401522005272700240640ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file--strict.json000066400000000000000000000013401522005272700241420ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/file.json000066400000000000000000000013401522005272700225570ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header--filter-strict.json000066400000000000000000000015301522005272700271750ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header--filter.json000066400000000000000000000015301522005272700256670ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header--meta-250-filter-strict.json000066400000000000000000000015301522005272700304250ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header--meta-250-filter.json000066400000000000000000000015301522005272700271170ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header--meta-250-strict.json000066400000000000000000000015301522005272700271420ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header--meta-250.json000066400000000000000000000015301522005272700256340ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header--strict.json000066400000000000000000000015301522005272700257120ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/global-header.json000066400000000000000000000015301522005272700243270ustar00rootroot00000000000000[ [ "meta", "11 path=ab\n" ], [ "entry", { "globalExtended": { "path": "ab", "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links--filter-strict.json000066400000000000000000000041721522005272700256340ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links--filter.json000066400000000000000000000041721522005272700243260ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links--meta-250-filter-strict.json000066400000000000000000000041721522005272700270640ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links--meta-250-filter.json000066400000000000000000000041721522005272700255560ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links--meta-250-strict.json000066400000000000000000000041501522005272700255750ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links--meta-250.json000066400000000000000000000041501522005272700242670ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links--strict.json000066400000000000000000000041501522005272700243450ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid--filter-strict.json000066400000000000000000000022051522005272700272530ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: linkpath forbidden", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: linkpath required", "code": "TAR_ENTRY_INVALID" } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid--filter.json000066400000000000000000000017401522005272700257500ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "linkpath forbidden" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "linkpath required" ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid--meta-250-filter-strict.json000066400000000000000000000022051522005272700305030ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: linkpath forbidden", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: linkpath required", "code": "TAR_ENTRY_INVALID" } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid--meta-250-filter.json000066400000000000000000000017401522005272700272000ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "linkpath forbidden" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "linkpath required" ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid--meta-250-strict.json000066400000000000000000000021771522005272700272300ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: linkpath forbidden", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: linkpath required", "code": "TAR_ENTRY_INVALID" } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid--meta-250.json000066400000000000000000000017321522005272700257160ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "linkpath forbidden" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "linkpath required" ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid--strict.json000066400000000000000000000021771522005272700260000ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: linkpath forbidden", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: linkpath required", "code": "TAR_ENTRY_INVALID" } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-invalid.json000066400000000000000000000017321522005272700244110ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "linkpath forbidden" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "warn", "TAR_ENTRY_INVALID", "linkpath required" ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip--filter-strict.json000066400000000000000000000066651522005272700270040ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip--filter.json000066400000000000000000000066651522005272700254760ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip--meta-250-filter-strict.json000066400000000000000000000066651522005272700302340ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip--meta-250-filter.json000066400000000000000000000066651522005272700267260ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip--meta-250-strict.json000066400000000000000000000066271522005272700267470ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip--meta-250.json000066400000000000000000000066271522005272700254410ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip--strict.json000066400000000000000000000066271522005272700255170ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links-strip.json000066400000000000000000000066271522005272700241340ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 4708, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 0, "gid": 0, "size": 26, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 5644, "linkpath": "", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7553, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/1/2/3/hardlink-3", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 7845, "linkpath": "strip-dir/hardlink-1", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "uname": "", "gname": "", "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 420, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-11-06T01:45:25.000Z", "cksum": 6417, "linkpath": "hardlink-2", "uname": "", "gname": "", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/links.json000066400000000000000000000041501522005272700227620ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths--filter-strict.json000066400000000000000000000672261522005272700266010ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836326, "nlink": 1, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836253, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836254, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths--filter.json000066400000000000000000000672261522005272700252730ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836326, "nlink": 1, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836253, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836254, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths--meta-250-filter-strict.json000066400000000000000000000673671522005272700300370ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths--meta-250-filter.json000066400000000000000000000673671522005272700265310ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths--meta-250-strict.json000066400000000000000000000670671522005272700265510ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths--meta-250.json000066400000000000000000000670671522005272700252430ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths--strict.json000066400000000000000000000667261522005272700253220ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836326, "nlink": 1, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836253, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836254, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-paths.json000066400000000000000000000667261522005272700237370ustar00rootroot00000000000000[ [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836297, "nlink": 1, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836326, "nlink": 1, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836253, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "dev": 16777220, "ino": 9836254, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax--filter-strict.json000066400000000000000000000071221522005272700262370ustar00rootroot00000000000000[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "ignoredEntry", { "extended": { "mtime": "2017-04-10T16:54:12.000Z", "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "gid": 20, "uid": 501, "gname": "staff", "uname": "isaacs", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "global": false }, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax--filter.json000066400000000000000000000071221522005272700247310ustar00rootroot00000000000000[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "ignoredEntry", { "extended": { "mtime": "2017-04-10T16:54:12.000Z", "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "gid": 20, "uid": 501, "gname": "staff", "uname": "isaacs", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "global": false }, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax--meta-250-filter-strict.json000066400000000000000000000033171522005272700274710ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax--meta-250-filter.json000066400000000000000000000033171522005272700261630ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "ignoredEntry", { "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax--meta-250-strict.json000066400000000000000000000033111522005272700262000ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax--meta-250.json000066400000000000000000000033111522005272700246720ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "entry", { "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax--strict.json000066400000000000000000000071141522005272700247550ustar00rootroot00000000000000[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "entry", { "extended": { "mtime": "2017-04-10T16:54:12.000Z", "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "gid": 20, "uid": 501, "gname": "staff", "uname": "isaacs", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "global": false }, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/long-pax.json000066400000000000000000000071141522005272700233720ustar00rootroot00000000000000[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "entry", { "extended": { "mtime": "2017-04-10T16:54:12.000Z", "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "gid": 20, "uid": 501, "gname": "staff", "uname": "isaacs", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "global": false }, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long--filter-strict.json000066400000000000000000000053371522005272700301210ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long--filter.json000066400000000000000000000053371522005272700266130ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long--meta-250-filter-strict.json000066400000000000000000000053371522005272700313510ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long--meta-250-filter.json000066400000000000000000000053371522005272700300430ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long--meta-250-strict.json000066400000000000000000000053231522005272700300610ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long--meta-250.json000066400000000000000000000053231522005272700265530ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long--strict.json000066400000000000000000000053231522005272700266310ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/next-file-has-long.json000066400000000000000000000053231522005272700252460ustar00rootroot00000000000000[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte--filter-strict.json000066400000000000000000000035271522005272700264320ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte--filter.json000066400000000000000000000035271522005272700251240ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte--meta-250-filter-strict.json000066400000000000000000000035271522005272700276620ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte--meta-250-filter.json000066400000000000000000000035271522005272700263540ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte--meta-250-strict.json000066400000000000000000000035131522005272700263720ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte--meta-250.json000066400000000000000000000035131522005272700250640ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte--strict.json000066400000000000000000000035131522005272700251420ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/null-byte.json000066400000000000000000000035131522005272700235570ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing--filter-strict.json000066400000000000000000000006751522005272700271230ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: path is required", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "error", { "message": "TAR_BAD_ARCHIVE: Unrecognized archive format", "code": "TAR_BAD_ARCHIVE" } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing--filter.json000066400000000000000000000004321522005272700256040ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "path is required" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "warn", "TAR_BAD_ARCHIVE", "Unrecognized archive format" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing--meta-250-filter-strict.json000066400000000000000000000006751522005272700303530ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: path is required", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "error", { "message": "TAR_BAD_ARCHIVE: Unrecognized archive format", "code": "TAR_BAD_ARCHIVE" } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing--meta-250-filter.json000066400000000000000000000004321522005272700270340ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "path is required" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "warn", "TAR_BAD_ARCHIVE", "Unrecognized archive format" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing--meta-250-strict.json000066400000000000000000000006751522005272700270700ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: path is required", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "error", { "message": "TAR_BAD_ARCHIVE: Unrecognized archive format", "code": "TAR_BAD_ARCHIVE" } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing--meta-250.json000066400000000000000000000004321522005272700255510ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "path is required" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "warn", "TAR_BAD_ARCHIVE", "Unrecognized archive format" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing--strict.json000066400000000000000000000006751522005272700256400ustar00rootroot00000000000000[ [ "error", { "message": "TAR_ENTRY_INVALID: path is required", "code": "TAR_ENTRY_INVALID" } ], [ "error", { "message": "TAR_ENTRY_INVALID: checksum failure", "code": "TAR_ENTRY_INVALID" } ], [ "nullBlock" ], [ "eof" ], [ "error", { "message": "TAR_BAD_ARCHIVE: Unrecognized archive format", "code": "TAR_BAD_ARCHIVE" } ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/path-missing.json000066400000000000000000000004321522005272700242440ustar00rootroot00000000000000[ [ "warn", "TAR_ENTRY_INVALID", "path is required" ], [ "warn", "TAR_ENTRY_INVALID", "checksum failure" ], [ "nullBlock" ], [ "eof" ], [ "warn", "TAR_BAD_ARCHIVE", "Unrecognized archive format" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case--filter-strict.json000066400000000000000000000061641522005272700316370ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case--filter.json000066400000000000000000000061641522005272700303310ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case--meta-250-filter-strict.json000066400000000000000000000061641522005272700330670ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case--meta-250-filter.json000066400000000000000000000061641522005272700315610ustar00rootroot00000000000000[ [ "ignoredEntry", { "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case--meta-250-strict.json000066400000000000000000000061421522005272700316000ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case--meta-250.json000066400000000000000000000061421522005272700302720ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case--strict.json000066400000000000000000000061421522005272700303500ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/trailing-slash-corner-case.json000066400000000000000000000061421522005272700267650ustar00rootroot00000000000000[ [ "entry", { "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8--filter-strict.json000066400000000000000000000066021522005272700254020ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8--filter.json000066400000000000000000000066021522005272700240740ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8--meta-250-filter-strict.json000066400000000000000000000066021522005272700266320ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8--meta-250-filter.json000066400000000000000000000066021522005272700253240ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8--meta-250-strict.json000066400000000000000000000065601522005272700253520ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8--meta-250.json000066400000000000000000000065601522005272700240440ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8--strict.json000066400000000000000000000065601522005272700241220ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parse/utf8.json000066400000000000000000000065601522005272700225370ustar00rootroot00000000000000[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836217, "nlink": 1, "path": "Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "dev": 16777220, "ino": 9836716, "nlink": 1, "path": "🌟.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "dev": 16777220, "ino": 9836396, "nlink": 1, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "global": false }, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0 } } ], [ "nullBlock" ], [ "eof" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/parses.tar000066400000000000000000024240001522005272700216440ustar00rootroot00000000000000test/fixtures/parse/0000755000000000000000000000000013334177733013531 5ustar rootroottest/fixtures/parse/bad-cksum--filter-strict.json0000644000000000000000000000202013334202347021120 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/bad-cksum--filter.json0000644000000000000000000000173413334202347017625 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "warn", "invalid entry" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/bad-cksum--meta-250-filter-strict.json0000644000000000000000000000202013334202347022350 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/bad-cksum--meta-250-filter.json0000644000000000000000000000173413334202347021055 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "warn", "invalid entry" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/bad-cksum--meta-250-strict.json0000644000000000000000000000202013334202347021065 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/bad-cksum--meta-250.json0000644000000000000000000000173413334202347017572 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "warn", "invalid entry" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/bad-cksum--strict.json0000644000000000000000000000202013334202347017635 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/bad-cksum.json0000644000000000000000000000173413334202347016265 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "warn", "invalid entry" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts--filter-strict.json0000644000000000000000000000656413334202347022502 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts--filter.json0000644000000000000000000000656413334202347021174 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts--meta-250-filter-strict.json0000644000000000000000000000656413334202347023732 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts--meta-250-filter.json0000644000000000000000000000656413334202347022424 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts--meta-250-strict.json0000644000000000000000000000654213334202347022443 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts--meta-250.json0000644000000000000000000000654213334202347021135 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts--strict.json0000644000000000000000000000654213334202347021213 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/body-byte-counts.json0000644000000000000000000000654213334202347017630 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "1024-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1024, "mtime": "2017-04-10T16:57:47.000Z", "cksum": 6109, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "512-bytes.txt", "mode": 420, "uid": 501, "gid": 20, "size": 512, "mtime": "2017-04-10T17:08:55.000Z", "cksum": 6064, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "zero-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:08:01.000Z", "cksum": 6246, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir--filter-strict.json0000644000000000000000000000160513334202347020040 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir--filter.json0000644000000000000000000000160513334202347016532 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir--meta-250-filter-strict.json0000644000000000000000000000160513334202347021270 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir--meta-250-filter.json0000644000000000000000000000160513334202347017762 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir--meta-250-strict.json0000644000000000000000000000157713334202347020015 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir--meta-250.json0000644000000000000000000000157713334202347016507 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir--strict.json0000644000000000000000000000157713334202347016565 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/dir.json0000644000000000000000000000157713334202347015202 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "dir/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T17:00:17.000Z", "cksum": 5284, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax--filter-strict.json0000644000000000000000000000447513334202347021141 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax--filter.json0000644000000000000000000000447513334202347017633 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax--meta-250-filter-strict.json0000644000000000000000000000447513334202347022371 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax--meta-250-filter.json0000644000000000000000000000447513334202347021063 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax--meta-250-strict.json0000644000000000000000000000446713334202347021107 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax--meta-250.json0000644000000000000000000000446713334202347017601 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax--strict.json0000644000000000000000000000446713334202347017657 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/emptypax.json0000644000000000000000000000446713334202347016274 0ustar rootroot[ [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491845601\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:33:21.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:33:21.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file--filter-strict.json0000644000000000000000000000161213334202347020177 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file--filter.json0000644000000000000000000000161213334202347016671 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file--meta-250-filter-strict.json0000644000000000000000000000161213334202347021427 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file--meta-250-filter.json0000644000000000000000000000161213334202347020121 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file--meta-250-strict.json0000644000000000000000000000161213334202347020144 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file--meta-250.json0000644000000000000000000000161213334202347016636 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file--strict.json0000644000000000000000000000161213334202347016714 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/file.json0000644000000000000000000000161213334202347015331 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header--filter-strict.json0000644000000000000000000000244413334202347021752 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header--filter.json0000644000000000000000000000244413334202347020444 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header--meta-250-filter-strict.json0000644000000000000000000000244413334202347023202 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header--meta-250-filter.json0000644000000000000000000000244413334202347021674 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header--meta-250-strict.json0000644000000000000000000000244413334202347021717 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header--meta-250.json0000644000000000000000000000244413334202347020411 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header--strict.json0000644000000000000000000000244413334202347020467 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/global-header.json0000644000000000000000000000244413334202347017104 0ustar rootroot[ [ "meta", "11 path=ab\n" ], [ "entry", { "extended": null, "globalExtended": { "atime": null, "charset": null, "comment": null, "ctime": null, "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "ab", "size": null, "uid": null, "uname": null, "dev": null, "ino": null, "nlink": null, "global": true }, "type": "File", "meta": false, "ignore": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "one-byte.txt", "mode": 420, "uid": 501, "gid": 20, "size": 1, "mtime": "2017-04-10T16:58:20.000Z", "cksum": 6121, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links--filter-strict.json0000644000000000000000000000510013334202347020374 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links--filter.json0000644000000000000000000000510013334202347017066 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links--meta-250-filter-strict.json0000644000000000000000000000510013334202347021624 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links--meta-250-filter.json0000644000000000000000000000510013334202347020316 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links--meta-250-strict.json0000644000000000000000000000505613334202347020353 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links--meta-250.json0000644000000000000000000000505613334202347017045 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links--strict.json0000644000000000000000000000505613334202347017123 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid--filter-strict.json0000644000000000000000000000220613334202347022024 0ustar rootroot[ [ "error", { "message": "invalid: linkpath forbidden" } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid: linkpath required" } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid--filter.json0000644000000000000000000000207013334202347020515 0ustar rootroot[ [ "warn", "invalid: linkpath forbidden" ], [ "warn", "invalid entry" ], [ "warn", "invalid: linkpath required" ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid--meta-250-filter-strict.json0000644000000000000000000000220613334202347023254 0ustar rootroot[ [ "error", { "message": "invalid: linkpath forbidden" } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid: linkpath required" } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid--meta-250-filter.json0000644000000000000000000000207013334202347021745 0ustar rootroot[ [ "warn", "invalid: linkpath forbidden" ], [ "warn", "invalid entry" ], [ "warn", "invalid: linkpath required" ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid--meta-250-strict.json0000644000000000000000000000220013334202347021763 0ustar rootroot[ [ "error", { "message": "invalid: linkpath forbidden" } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid: linkpath required" } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid--meta-250.json0000644000000000000000000000206213334202347020463 0ustar rootroot[ [ "warn", "invalid: linkpath forbidden" ], [ "warn", "invalid entry" ], [ "warn", "invalid: linkpath required" ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid--strict.json0000644000000000000000000000220013334202347020533 0ustar rootroot[ [ "error", { "message": "invalid: linkpath forbidden" } ], [ "error", { "message": "invalid entry" } ], [ "error", { "message": "invalid: linkpath required" } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-invalid.json0000644000000000000000000000206213334202347017156 0ustar rootroot[ [ "warn", "invalid: linkpath forbidden" ], [ "warn", "invalid entry" ], [ "warn", "invalid: linkpath required" ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links.json0000644000000000000000000000505613334202347015540 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-1", "mode": 420, "uid": 501, "gid": 20, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5856, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "hardlink-2", "mode": 420, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 6792, "linkpath": "hardlink-1", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "symlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6639, "linkpath": "hardlink-2", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths--filter-strict.json0000644000000000000000000010363713334202347021346 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:56:18.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836326, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:56:18.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836253, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836254, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths--filter.json0000644000000000000000000010363713334202347020040 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:56:18.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836326, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:56:18.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836253, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836254, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths--meta-250-filter-strict.json0000644000000000000000000010346713334202347022577 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths--meta-250-filter.json0000644000000000000000000010346713334202347021271 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths--meta-250-strict.json0000644000000000000000000010316713334202347021311 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths--meta-250.json0000644000000000000000000010316713334202347020003 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 283, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14413, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 289, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18881, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 339, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19932, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths--strict.json0000644000000000000000000010333713334202347020060 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:56:18.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836326, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:56:18.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836253, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836254, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-paths.json0000644000000000000000000010333713334202347016475 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:53:02.000Z", "cksum": 14592, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843252\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836297\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:54:12.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836297, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:54:12.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843378\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836326\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:56:18.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836326, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:56:18.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 5870, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6031, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6179, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6323, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6478, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6633, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6801, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 6893, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7040, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7188, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7336, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7587, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7736, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 7894, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8049, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8196, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8344, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8505, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8597, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8756, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 8900, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 9063, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9223, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt", "mode": 420, "uid": 501, "gid": 20, "size": 6, "mtime": "2017-04-10T16:56:46.000Z", "cksum": 9714, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 19068, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836253\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836253, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 18969, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n20 ctime=1491843140\n20 atime=1491843717\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836254\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:01:57.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:52:20.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836254, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "atime": "2017-04-10T17:01:57.000Z", "ctime": "2017-04-10T16:52:20.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:52:20.000Z", "cksum": 20019, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491844045\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:07:25.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:07:25.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/long-pax--filter-strict.json0000644000000000000000000000760013334202347021010 0ustar rootroot[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "ignoredEntry", { "extended": { "atime": null, "charset": null, "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "ctime": null, "gid": 20, "gname": "staff", "linkpath": null, "mtime": "2017-04-10T16:54:12.000Z", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "uid": 501, "uname": "isaacs", "dev": null, "ino": null, "nlink": null, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/long-pax--filter.json0000644000000000000000000000760013334202347017502 0ustar rootroot[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "ignoredEntry", { "extended": { "atime": null, "charset": null, "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "ctime": null, "gid": 20, "gname": "staff", "linkpath": null, "mtime": "2017-04-10T16:54:12.000Z", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "uid": 501, "uname": "isaacs", "dev": null, "ino": null, "nlink": null, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/long-pax--meta-250-filter-strict.json0000644000000000000000000000402713334202347022240 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/long-pax--meta-250-filter.json0000644000000000000000000000402713334202347020732 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/long-pax--meta-250-strict.json0000644000000000000000000000402113334202347020747 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/long-pax--meta-250.json0000644000000000000000000000402113334202347017441 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "ExtendedHeader", "meta": true, "ignore": true, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 1282, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14425, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/long-pax--strict.json0000644000000000000000000000757213334202347017535 0ustar rootroot[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "entry", { "extended": { "atime": null, "charset": null, "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "ctime": null, "gid": 20, "gname": "staff", "linkpath": null, "mtime": "2017-04-10T16:54:12.000Z", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "uid": 501, "uname": "isaacs", "dev": null, "ino": null, "nlink": null, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/long-pax.json0000644000000000000000000000757213334202347016152 0ustar rootroot[ [ "meta", "130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc\n1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy\n9 gid=20\n15 gname=staff\n20 mtime=1491843252\n12 size=100\n11 uid=501\n16 uname=isaacs\n" ], [ "entry", { "extended": { "atime": null, "charset": null, "comment": "all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy", "ctime": null, "gid": 20, "gname": "staff", "linkpath": null, "mtime": "2017-04-10T16:54:12.000Z", "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "size": 100, "uid": 501, "uname": "isaacs", "dev": null, "ino": null, "nlink": null, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:54:12.000Z", "cksum": 14495, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "end" ] ] test/fixtures/parse/next-file-has-long--filter-strict.json0000644000000000000000000000574713334202347022676 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/next-file-has-long--filter.json0000644000000000000000000000574713334202347021370 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/next-file-has-long--meta-250-filter-strict.json0000644000000000000000000000574713334202347024126 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/next-file-has-long--meta-250-filter.json0000644000000000000000000000574713334202347022620 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "ignoredEntry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/next-file-has-long--meta-250-strict.json0000644000000000000000000000573313334202347022636 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/next-file-has-long--meta-250.json0000644000000000000000000000573313334202347021330 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/next-file-has-long--strict.json0000644000000000000000000000573313334202347021406 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/next-file-has-long.json0000644000000000000000000000573313334202347020023 0ustar rootroot[ [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "mode": 420, "uid": 501, "gid": 20, "size": 100, "mtime": "2017-04-10T16:56:18.000Z", "cksum": 14500, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" ], [ "entry", { "extended": { "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "atime": null, "ctime": null, "linkpath": "170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "header": { "cksumValid": true, "needPax": false, "path": "longlink", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2017-04-10T23:22:33.000Z", "cksum": 7135, "linkpath": "././@LongSymLink", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte--filter-strict.json0000644000000000000000000000520213334202347021172 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte--filter.json0000644000000000000000000000520213334202347017664 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte--meta-250-filter-strict.json0000644000000000000000000000520213334202347022422 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte--meta-250-filter.json0000644000000000000000000000520213334202347021114 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "ignoredEntry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte--meta-250-strict.json0000644000000000000000000000516613334202347021150 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte--meta-250.json0000644000000000000000000000516613334202347017642 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte--strict.json0000644000000000000000000000516613334202347017720 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/null-byte.json0000644000000000000000000000516613334202347016335 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/", "mode": 509, "uid": 1000, "gid": 1000, "size": 0, "mtime": "2017-07-31T22:21:58.000Z", "cksum": 11228, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz\u0000" ], [ "entry", { "extended": { "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "uname": null, "gname": null, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "this_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgz", "mode": 436, "uid": 1000, "gid": 1000, "size": 200, "mtime": "2017-07-31T22:21:53.000Z", "cksum": 15210, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing--filter-strict.json0000644000000000000000000000033213334202347021661 0ustar rootroot[ [ "error", { "message": "invalid: path is required" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing--filter.json0000644000000000000000000000024613334202347020357 0ustar rootroot[ [ "warn", "invalid: path is required" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing--meta-250-filter-strict.json0000644000000000000000000000033213334202347023111 0ustar rootroot[ [ "error", { "message": "invalid: path is required" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing--meta-250-filter.json0000644000000000000000000000024613334202347021607 0ustar rootroot[ [ "warn", "invalid: path is required" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing--meta-250-strict.json0000644000000000000000000000033213334202347021626 0ustar rootroot[ [ "error", { "message": "invalid: path is required" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing--meta-250.json0000644000000000000000000000024613334202347020324 0ustar rootroot[ [ "warn", "invalid: path is required" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing--strict.json0000644000000000000000000000033213334202347020376 0ustar rootroot[ [ "error", { "message": "invalid: path is required" } ], [ "error", { "message": "invalid entry" } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/path-missing.json0000644000000000000000000000024613334202347017017 0ustar rootroot[ [ "warn", "invalid: path is required" ], [ "warn", "invalid entry" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case--filter-strict.json0000644000000000000000000000775513334202347024416 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case--filter.json0000644000000000000000000000775513334202347023110 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case--meta-250-filter-strict.json0000644000000000000000000000775513334202347025646 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case--meta-250-filter.json0000644000000000000000000000775513334202347024340 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "ignoredEntry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case--meta-250-strict.json0000644000000000000000000000773313334202347024357 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case--meta-250.json0000644000000000000000000000773313334202347023051 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case--strict.json0000644000000000000000000000773313334202347023127 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/trailing-slash-corner-case.json0000644000000000000000000000773313334202347021544 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/", "mode": 493, "uid": 501, "gid": 20, "size": 0, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13612, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-19T00:03:11.000Z", "cksum": 13611, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt\u0000" ], [ "entry", { "extended": { "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt" }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "uname": null, "gname": null, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt", "mode": 420, "uid": 501, "gid": 20, "size": 560, "mtime": "2018-06-18T23:49:44.000Z", "cksum": 13602, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8--filter-strict.json0000644000000000000000000001105113334202347020144 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8--filter.json0000644000000000000000000001105113334202347016636 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8--meta-250-filter-strict.json0000644000000000000000000001105113334202347021374 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8--meta-250-filter.json0000644000000000000000000001105113334202347020066 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "ignoredEntry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8--meta-250-strict.json0000644000000000000000000001102713334202347020114 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8--meta-250.json0000644000000000000000000001102713334202347016606 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8--strict.json0000644000000000000000000001102713334202347016664 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/utf8.json0000644000000000000000000001102713334202347015301 0ustar rootroot[ [ "meta", "15 path=Ω.txt\n20 ctime=1491843102\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836217\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:51:42.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836217, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:51:42.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:51:42.000Z", "cksum": 5688, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "17 path=🌟.txt\n20 ctime=1491843956\n20 atime=1491843993\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836716\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:06:33.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T17:05:56.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "🌟.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836716, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "atime": "2017-04-10T17:06:33.000Z", "ctime": "2017-04-10T17:05:56.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "🌟.txt", "mode": 420, "uid": 501, "gid": 20, "size": 106, "mtime": "2017-04-10T17:05:55.000Z", "cksum": 6023, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "meta", "71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt\n20 ctime=1491843527\n20 atime=1491843758\n23 SCHILY.dev=16777220\n22 SCHILY.ino=9836396\n18 SCHILY.nlink=1\n" ], [ "entry", { "extended": { "atime": "2017-04-10T17:02:38.000Z", "charset": null, "comment": null, "ctime": "2017-04-10T16:58:47.000Z", "gid": null, "gname": null, "linkpath": null, "mtime": null, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "size": null, "uid": null, "uname": null, "dev": 16777220, "ino": 9836396, "nlink": 1, "global": false }, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "uname": "isaacs", "gname": "staff", "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "atime": "2017-04-10T17:02:38.000Z", "ctime": "2017-04-10T16:58:47.000Z", "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt", "mode": 420, "uid": 501, "gid": 20, "size": 2, "mtime": "2017-04-10T16:58:47.000Z", "cksum": 9990, "linkpath": "", "uname": "isaacs", "gname": "staff", "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip--meta-250-filter-strict.json0000644000000000000000000000734013334202347022773 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip--meta-250-filter.json0000644000000000000000000000734013334202347021465 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip--meta-250-strict.json0000644000000000000000000000731013334202347021505 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip--meta-250.json0000644000000000000000000000731013334202347020177 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip--filter-strict.json0000644000000000000000000000734013334202347021543 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip--filter.json0000644000000000000000000000734013334202347020235 0ustar rootroot[ [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": true, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": true, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": true, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "ignoredEntry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": true, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip--strict.json0000644000000000000000000000731013334202347020255 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] test/fixtures/parse/links-strip.json0000644000000000000000000000731013334202347016672 0ustar rootroot[ [ "entry", { "extended": null, "globalExtended": null, "type": "Directory", "meta": false, "ignore": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "uname": null, "gname": null, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/", "mode": 493, "uid": 0, "gid": 0, "size": 0, "mtime": "2018-08-13T04:10:48.000Z", "cksum": 4912, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "File", "meta": false, "ignore": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-1", "mode": 420, "uid": 501, "gid": 50, "size": 26, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 5515, "linkpath": "", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "Link", "meta": false, "ignore": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "atime": null, "ctime": null, "linkpath": "strip-dir/hardlink-1", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/hardlink-2", "mode": 420, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:05.000Z", "cksum": 7424, "linkpath": "strip-dir/hardlink-1", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "entry", { "extended": null, "globalExtended": null, "type": "SymbolicLink", "meta": false, "ignore": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "uname": null, "gname": null, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "atime": null, "ctime": null, "linkpath": "hardlink-2", "header": { "cksumValid": true, "needPax": false, "path": "strip-dir/symlink", "mode": 511, "uid": 501, "gid": 50, "size": 0, "mtime": "2017-04-10T19:27:33.000Z", "cksum": 6302, "linkpath": "hardlink-2", "uname": null, "gname": null, "devmaj": 0, "devmin": 0, "atime": null, "ctime": null } } ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "nullBlock" ], [ "end" ] ] isaacs-node-tar-0a52f00/test/fixtures/sync-gzip-fail.tgz000066400000000000000000000004501522005272700232160ustar00rootroot00000000000000:Zj1@7?7>P(;TE oęל\W,!PrѤ&d9w羕m]߷헝N<~h>c=?Xw?۳wgjRgt?B5)3O?B5 3zj{?B̬|F?&j>@#(OI2տOI4?&?B^BPisaacs-node-tar-0a52f00/test/fixtures/tars/000077500000000000000000000000001522005272700206065ustar00rootroot00000000000000isaacs-node-tar-0a52f00/test/fixtures/tars/bad-cksum.tar000066400000000000000000000060001522005272700231600ustar00rootroot00000000000000one-byte.txt000644 000765 000024 00000000001 13072734654 013751 0ustar00isaacsstaff000000 000000 anne-byte.txt000644 000765 000024 00000000001 13072734654 013751 0ustar00isaacsstaff000000 000000 aisaacs-node-tar-0a52f00/test/fixtures/tars/body-byte-counts.tar000066400000000000000000000120001522005272700245160ustar00rootroot000000000000001024-bytes.txt000644 000765 000024 00000002000 13072734613 013735 0ustar00isaacsstaff000000 000000 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 512-bytes.txt000644 000765 000024 00000001000 13072736047 013660 0ustar00isaacsstaff000000 000000 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx one-byte.txt000644 000765 000024 00000000001 13072734654 013751 0ustar00isaacsstaff000000 000000 azero-byte.txt000644 000765 000024 00000000000 13072735761 014146 0ustar00isaacsstaff000000 000000 isaacs-node-tar-0a52f00/test/fixtures/tars/dir.tar000066400000000000000000000030001522005272700220650ustar00rootroot00000000000000dir/000755 000765 000024 00000000000 13072735041 012244 5ustar00isaacsstaff000000 000000 isaacs-node-tar-0a52f00/test/fixtures/tars/emptypax.tar000066400000000000000000000110001522005272700231550ustar00rootroot00000000000000PaxHeader/🌟.txt000644 000765 000024 00000000170 13072735563 015560 xustar00isaacsstaff000000 000000 17 path=🌟.txt 20 ctime=1491843956 20 atime=1491845601 23 SCHILY.dev=16777220 22 SCHILY.ino=9836716 18 SCHILY.nlink=1 🌟.txt000644 000765 000024 00000000152 13072735563 013607 0ustar00isaacsstaff000000 000000 🌟✧✩⭐︎✪✫✬✭✮⚝✯✰✵✶✷✸✹❂⭑⭒★☆✡☪✴︎✦✡️🔯✴️🌠 PaxHeader/🌟.txt000644 000765 000024 0000000000 13072735563015430 xustar00isaacsstaff000000 000000 one-byte.txt000644 000765 000024 00000000001 13072734654 013751 0ustar00isaacsstaff000000 000000 aisaacs-node-tar-0a52f00/test/fixtures/tars/file.tar000066400000000000000000000040001522005272700222270ustar00rootroot00000000000000one-byte.txt000644 000765 000024 00000000001 13072734654 013751 0ustar00isaacsstaff000000 000000 aisaacs-node-tar-0a52f00/test/fixtures/tars/global-header.tar000066400000000000000000000060001522005272700240000ustar00rootroot00000000000000PaxHeader/ab000644 0000000013 007054 gustar00000000 000000 11 path=ab one-byte.txt000644 000765 000024 00000000001 13072734654 013751 0ustar00isaacsstaff000000 000000 aisaacs-node-tar-0a52f00/test/fixtures/tars/links-invalid.tar000066400000000000000000000060001522005272700240560ustar00rootroot00000000000000hardlink-1000644 000765 000024 0000000032 13072756211015074 0hardlink-2ustar00isaacsstaff000000 000000 this link is like diamond hardlink-2000644 000765 000024 0000000000 13072756211013215 1ustar00isaacsstaff000000 000000 symlink000755 000765 000024 00000000000 13072756245 014757 2hardlink-2ustar00isaacsstaff000000 000000 isaacs-node-tar-0a52f00/test/fixtures/tars/links-strip.tar000066400000000000000000000060001522005272700235710ustar00rootroot00000000000000strip-dir/000755 000000 000000 00000000000 13370171065 011144 5ustar00000000 000000 strip-dir/hardlink-1000644 000000 000000 00000000032 13370171065 013014 0ustar00000000 000000 this link is like diamond strip-dir/hardlink-2000644 000000 000000 00000000000 13370171065 016601 1strip-dir/hardlink-1ustar00000000 000000 strip-dir/1/2/3/hardlink-3000644 000000 000000 00000000000 13370171065 017245 1strip-dir/hardlink-1ustar00000000 000000 strip-dir/symlink000644 000000 000000 00000000000 13370171065 014421 2hardlink-2ustar00000000 000000 isaacs-node-tar-0a52f00/test/fixtures/tars/links.tar000066400000000000000000000060001522005272700224320ustar00rootroot00000000000000hardlink-1000644 000765 000024 00000000032 13072756211 013340 0ustar00isaacsstaff000000 000000 this link is like diamond hardlink-2000644 000765 000024 00000000000 13072756211 015210 1hardlink-1ustar00isaacsstaff000000 000000 symlink000755 000765 000024 00000000000 13072756245 014757 2hardlink-2ustar00isaacsstaff000000 000000 isaacs-node-tar-0a52f00/test/fixtures/tars/long-paths.tar000066400000000000000000000640001522005272700233720ustar00rootroot00000000000000100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734156 034400 0ustar00isaacsstaff000000 000000 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccPaxHeader/120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000351 13072734264 034107 xustar00isaacsstaff000000 000000 130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 20 ctime=1491843252 20 atime=1491843717 23 SCHILY.dev=16777220 22 SCHILY.ino=9836297 18 SCHILY.nlink=1 120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734264 034237 0ustar00isaacsstaff000000 000000 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccPaxHeader/170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000433 13072734462 034115 xustar00isaacsstaff000000 000000 180 path=170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 20 ctime=1491843378 20 atime=1491843717 23 SCHILY.dev=16777220 22 SCHILY.ino=9836326 18 SCHILY.nlink=1 170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734462 034244 0ustar00isaacsstaff000000 000000 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccclong-path/000755 000765 000024 00000000000 13072734104 013356 5ustar00isaacsstaff000000 000000 long-path/r/000755 000765 000024 00000000000 13072734104 013617 5ustar00isaacsstaff000000 000000 long-path/r/e/000755 000765 000024 00000000000 13072734104 014043 5ustar00isaacsstaff000000 000000 long-path/r/e/a/000755 000765 000024 00000000000 13072734104 014263 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/000755 000765 000024 00000000000 13072734104 014516 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/000755 000765 000024 00000000000 13072734104 014751 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/000755 000765 000024 00000000000 13072734104 015221 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/000755 000765 000024 00000000000 13072734104 015355 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/000755 000765 000024 00000000000 13072734104 015600 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/000755 000765 000024 00000000000 13072734104 016024 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/000755 000765 000024 00000000000 13072734104 016250 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/000755 000765 000024 00000000000 13072734104 016507 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/000755 000765 000024 00000000000 13072734104 016643 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/000755 000765 000024 00000000000 13072734104 017070 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/000755 000765 000024 00000000000 13072734104 017326 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/000755 000765 000024 00000000000 13072734104 017561 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/000755 000765 000024 00000000000 13072734104 020004 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/000755 000765 000024 00000000000 13072734104 020230 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/000755 000765 000024 00000000000 13072734104 020471 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/000755 000765 000024 00000000000 13072734104 020625 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/000755 000765 000024 00000000000 13072734104 021064 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/000755 000765 000024 00000000000 13072734104 021304 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/000755 000765 000024 00000000000 13072734104 021547 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/000755 000765 000024 00000000000 13072734707 022007 5ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt000644 000765 000024 00000000006 13072734516 022762 0ustar00isaacsstaff000000 000000 short cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734104 045174 0ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/hcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccch/PaxHeader/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000441 13072734104 044701 xustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t186 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 20 ctime=1491843140 20 atime=1491843717 23 SCHILY.dev=16777220 22 SCHILY.ino=9836253 18 SCHILY.nlink=1 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734104 045031 0ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/hcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccch/PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000523 13072734104 046734 xustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t236 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 20 ctime=1491843140 20 atime=1491843717 23 SCHILY.dev=16777220 22 SCHILY.ino=9836254 18 SCHILY.nlink=1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734104 047063 0ustar00isaacsstaff000000 000000 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/hcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccclong-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/Ω.txt000644 000765 000024 00000000256 13072734707 025372 xustar00isaacsstaff000000 000000 71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt 20 ctime=1491843527 20 atime=1491844045 23 SCHILY.dev=16777220 22 SCHILY.ino=9836396 18 SCHILY.nlink=1 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt000644 000765 000024 00000000002 13072734707 023406 0ustar00isaacsstaff000000 000000 Ωisaacs-node-tar-0a52f00/test/fixtures/tars/long-pax.tar000066400000000000000000000060001522005272700230370ustar00rootroot00000000000000PaxHeader/120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 0000002402 13072734264034131 xustar00isaacsstaff000000 000000 130 path=120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 1069 comment=all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy all work and no play makes johnny a tar boy 9 gid=20 15 gname=staff 20 mtime=1491843252 12 size=100 11 uid=501 16 uname=isaacs 120-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734264 034237 0ustar00isaacsstaff000000 000000 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccisaacs-node-tar-0a52f00/test/fixtures/tars/next-file-has-long.tar000066400000000000000000000110001522005272700247070ustar00rootroot00000000000000NextFileHasLongPath0000000252 007674 Lustar00000000 000000 170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc170-byte-filename-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc000644 000765 000024 00000000144 13072734462 034244 0ustar00isaacsstaff000000 000000 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccNextFileHasLongLinkpath0000000252 010551 Kustar00000000 000000 170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccclonglink000755 000765 000024 00000000000 13073011671 015737 2././@LongSymLinkustar00isaacsstaff000000 000000 isaacs-node-tar-0a52f00/test/fixtures/tars/null-byte.tar000066400000000000000000000240001522005272700232250ustar00rootroot00000000000000this_is_a_really_long_directory_name_with_a_lot_of_characters/0000775000175000017500000000000013137726606025734 5ustar freitagbfreitagb././@LongLink0000644000000000000000000000017200000000000011603 Lustar rootrootthis_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_lot_of_characters.tgzthis_is_a_really_long_directory_name_with_a_lot_of_characters/this_is_a_really_long_tgz_file_with_a_0000664000175000017500000000031013137726601035552 0ustar freitagbfreitagbYij1 a)lca605xT>NPB(} !,>]}_.ķ9c)BM>NZ}CUMX[\ƨB?dE|* 5~?/Q2!ƭ|];^ɿ=ߔUEOy{6uT(isaacs-node-tar-0a52f00/test/fixtures/tars/path-missing.tar000066400000000000000000000040001522005272700237130ustar00rootroot00000000000000000644 000765 000024 0000000001 13072734654011350 0ustar00isaacsstaff000000 000000 aisaacs-node-tar-0a52f00/test/fixtures/tars/trailing-slash-corner-case.tar000066400000000000000000000240001522005272700264320ustar00rootroot0000000000000099-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/0000755000076500000240000000000013312044077032454 5ustar rmgstaff././@LongLink0000644000000000000000000000023100000000000011720 Lustar rootwheel99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/a-truly-unlucky-file-beyond-130-byte-path-length.txt99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/0000644000076500000240000000106013312044077032453 0ustar rmgstaffBehold! I am a text file and NOT a tar header. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ././@LongLink0000644000000000000000000000017200000000000011724 Lustar rootwheel99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/some-unlucky-file.txt99-byte-dirname-ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/0000644000076500000240000000106013312042430032442 0ustar rmgstaffBehold! I am a text file and NOT a tar header. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx isaacs-node-tar-0a52f00/test/fixtures/tars/utf8.tar000066400000000000000000000160001522005272700222010ustar00rootroot00000000000000PaxHeader/Ω.txt000644 000765 000024 00000000166 13072734036 015054 xustar00isaacsstaff000000 000000 15 path=Ω.txt 20 ctime=1491843102 20 atime=1491843758 23 SCHILY.dev=16777220 22 SCHILY.ino=9836217 18 SCHILY.nlink=1 Ω.txt000644 000765 000024 00000000002 13072734036 013070 0ustar00isaacsstaff000000 000000 ΩPaxHeader/🌟.txt000644 000765 000024 00000000170 13072735563 015560 xustar00isaacsstaff000000 000000 17 path=🌟.txt 20 ctime=1491843956 20 atime=1491843993 23 SCHILY.dev=16777220 22 SCHILY.ino=9836716 18 SCHILY.nlink=1 🌟.txt000644 000765 000024 00000000152 13072735563 013607 0ustar00isaacsstaff000000 000000 🌟✧✩⭐︎✪✫✬✭✮⚝✯✰✵✶✷✸✹❂⭑⭒★☆✡☪✴︎✦✡️🔯✴️🌠 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/PaxHeader/Ω.txt000644 000765 000024 00000000256 13072734707 025372 xustar00isaacsstaff000000 000000 71 path=long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt 20 ctime=1491843527 20 atime=1491843758 23 SCHILY.dev=16777220 22 SCHILY.ino=9836396 18 SCHILY.nlink=1 long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt000644 000765 000024 00000000002 13072734707 023406 0ustar00isaacsstaff000000 000000 Ωisaacs-node-tar-0a52f00/test/fixtures/test.js000066400000000000000000000007771522005272700211650ustar00rootroot00000000000000const platform = process.platform === 'win32' ? 'win32' : 'posix' const { spawn } = require('child_process') const c = spawn(process.execPath, [ process.env.npm_execpath, 'run', `test:${platform}`, '--', ...process.argv.slice(2), ], { stdio: 'inherit', }) c.on('close', (code, signal) => { process.exitCode = code if (signal) { process.kill(process.pid, signal) setTimeout(() => {}, 200) } }) process.on('SIGTERM', () => c.kill('SIGTERM')) process.on('SIGINT', () => c.kill('SIGINT')) isaacs-node-tar-0a52f00/test/get-write-flag.js000066400000000000000000000034721522005272700211460ustar00rootroot00000000000000import fs from 'fs' import t from 'tap' import { fileURLToPath } from 'url' import { getWriteFlag } from '../dist/esm/get-write-flag.js' const __filename = fileURLToPath(import.meta.url) // run three scenarios // unix (no fmap) // win32 (without fmap support) // win32 (with fmap support) const hasFmap = !!fs.constants.UV_FS_O_FILEMAP const { platform } = process const UV_FS_O_FILEMAP = 0x20000000 const unixFlag = typeof fs.constants.O_NOFOLLOW === 'number' ? fs.constants.O_NOFOLLOW | fs.constants.O_TRUNC | fs.constants.O_CREAT | fs.constants.O_WRONLY : 'w' switch (process.argv[2]) { case 'win32-fmap': { const { O_CREAT, O_TRUNC, O_WRONLY } = fs.constants t.equal( getWriteFlag(1), UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY, ) t.equal(getWriteFlag(512 * 1024 + 1), 'w') break } case 'win32-nofmap': { t.equal(getWriteFlag(1), 'w') t.equal(getWriteFlag(512 * 1024 + 1), 'w') break } case 'unix': { t.equal(getWriteFlag(1), unixFlag) t.equal(getWriteFlag(512 * 1024 + 1), unixFlag) break } default: { const node = process.execPath t.spawn(node, [__filename, 'win32-fmap'], { env: { ...process.env, ...(platform === 'win32' ? {} : { __FAKE_FS_O_FILENAME__: String(UV_FS_O_FILEMAP), __FAKE_PLATFORM__: 'win32', }), }, }) t.spawn(node, [__filename, 'win32-nofmap'], { env: { ...process.env, ...(platform === 'win32' ? {} : { __FAKE_FS_O_FILENAME__: '0', __FAKE_PLATFORM__: 'win32', }), }, }) t.spawn(node, [__filename, 'unix'], { env: { ...process.env, ...(platform === 'win32' ? { __FAKE_PLATFORM__: 'linux' } : {}), }, }) } } isaacs-node-tar-0a52f00/test/ghsa-8qq5-rm4j-mr97.ts000066400000000000000000000075161522005272700215310ustar00rootroot00000000000000import { lstatSync, readFileSync, readlinkSync, writeFileSync } from 'fs' import { resolve } from 'path' import t from 'tap' import { Header, x } from 'tar' const targetSym = '/some/absolute/path' const absoluteWithDotDot = '/../a/target' const secretLinkpath = resolve(t.testdirName, 'secret.txt') t.formatSnapshot = (o: unknown): unknown => typeof o === 'string' ? o.replace( /^ENOENT: no such file or directory, link .*? -> .*?$/, 'ENOENT: no such file or directory, link', ) : Array.isArray(o) ? o.map(o => t.formatSnapshot?.(o)) : o const getExploitTar = () => { const chunks: Buffer[] = [] const hardHeader = Buffer.alloc(512) new Header({ path: 'exploit_hard', type: 'Link', size: 0, linkpath: secretLinkpath, }).encode(hardHeader, 0) chunks.push(hardHeader) const hardSubHeader = Buffer.alloc(1024) new Header({ path: 'sub/', type: 'Directory', size: 0, }).encode(hardSubHeader, 0) new Header({ path: 'sub/exploit_sub', type: 'Link', size: 0, linkpath: '../secret.txt', }).encode(hardSubHeader, 512) chunks.push(hardSubHeader) const symHeader = Buffer.alloc(512) new Header({ path: 'exploit_sym', type: 'SymbolicLink', size: 0, linkpath: targetSym, }).encode(symHeader, 0) chunks.push(symHeader) const escapeHeader = Buffer.alloc(512) new Header({ path: 'secret.txt', type: 'SymbolicLink', linkpath: '../secret.txt', }).encode(escapeHeader, 0) chunks.push(escapeHeader) const aDirHeader = Buffer.alloc(512) new Header({ path: 'a/', type: 'Directory', mode: 0o755, }).encode(aDirHeader, 0) chunks.push(aDirHeader) const absWithDotDotHeader = Buffer.alloc(512) new Header({ path: 'a/link', type: 'SymbolicLink', linkpath: absoluteWithDotDot, }).encode(absWithDotDotHeader, 0) chunks.push(absWithDotDotHeader) const winAbsWithDotDotHeader = Buffer.alloc(512) new Header({ path: 'a/winrootdotslink', type: 'SymbolicLink', linkpath: 'c:..\\foo\\bar', }).encode(winAbsWithDotDotHeader, 0) chunks.push(winAbsWithDotDotHeader) const winAbsWithDotDotEscapeHeader = Buffer.alloc(512) new Header({ path: 'a/winrootdotsescapelink', type: 'SymbolicLink', linkpath: 'c:..\\..\\..\\..\\foo\\bar', }).encode(winAbsWithDotDotEscapeHeader, 0) chunks.push(winAbsWithDotDotEscapeHeader) chunks.push(Buffer.alloc(1024)) return Buffer.concat(chunks) } const dir = t.testdir({ 'secret.txt': 'ORIGINAL DATA', 'exploit.tar': getExploitTar(), out: {}, }) const out = resolve(dir, 'out') const tarFile = resolve(dir, 'exploit.tar') const WARNINGS: [code: string, message: string][] = [] t.before(() => x({ cwd: out, file: tarFile, onwarn: (code: string, message: string) => WARNINGS.push([code, message]), }), ) t.test('warnings', async t => t.matchSnapshot(WARNINGS)) t.test('writefile exploits fail', async t => { writeFileSync(resolve(out, 'exploit_hard'), 'OVERWRITTEN') t.equal( readFileSync(resolve(dir, 'secret.txt'), 'utf8'), 'ORIGINAL DATA', ) writeFileSync(resolve(out, 'sub/exploit_sub'), 'OVERWRITTEN SUB') t.equal( readFileSync(resolve(dir, 'secret.txt'), 'utf8'), 'ORIGINAL DATA', ) }) t.test('symlink escapes are sanitized', async t => { t.not(readlinkSync(resolve(out, 'exploit_sym')), targetSym) t.throws(() => lstatSync(resolve(out, 'secret.txt')), { code: 'ENOENT', }) }) t.test('absolute symlink with .. has prefix stripped', async t => { t.equal( readlinkSync(resolve(out, 'a/link')), '../a/target', 'symlink target should be normalized', ) t.equal( readlinkSync(resolve(out, 'a/winrootdotslink')), '..\\foo\\bar', 'symlink target should be normalized', ) t.throws( () => lstatSync(resolve(out, 'a/winrootdotsescapelink')), 'escaping symlink is not created', ) }) isaacs-node-tar-0a52f00/test/ghsa-r6q2-hw4h-h46w.ts000066400000000000000000000037441522005272700215140ustar00rootroot00000000000000import t from 'tap' import { normalizeUnicode } from '../src/normalize-unicode.js' import { Header } from '../src/header.js' import { extract } from '../src/extract.js' import { resolve } from 'node:path' import { lstatSync, readFileSync, statSync } from 'node:fs' // these characters are problems on macOS's APFS const chars = { ['ff'.normalize('NFC')]: 'FF', ['fi'.normalize('NFC')]: 'FI', ['fl'.normalize('NFC')]: 'FL', ['ffi'.normalize('NFC')]: 'FFI', ['ffl'.normalize('NFC')]: 'FFL', ['ſt'.normalize('NFC')]: 'ST', ['st'.normalize('NFC')]: 'ST', ['ẛ'.normalize('NFC')]: 'Ṡ', ['ß'.normalize('NFC')]: 'SS', ['ẞ'.normalize('NFC')]: 'SS', ['ſ'.normalize('NFC')]: 'S', } for (const [c, n] of Object.entries(chars)) { t.test(`${c} => ${n}`, async t => { t.equal(normalizeUnicode(c), n) t.test('link then file', async t => { const tarball = Buffer.alloc(2048) new Header({ path: c, type: 'SymbolicLink', linkpath: './target', }).encode(tarball, 0) new Header({ path: n, type: 'File', size: 1, }).encode(tarball, 512) tarball[1024] = 'x'.charCodeAt(0) const cwd = t.testdir({ tarball }) await extract({ cwd, file: resolve(cwd, 'tarball') }) t.throws(() => statSync(resolve(cwd, 'target'))) t.equal(readFileSync(resolve(cwd, n), 'utf8'), 'x') }) t.test('file then link', { saveFixture: true }, async t => { const tarball = Buffer.alloc(2048) new Header({ path: n, type: 'File', size: 1, }).encode(tarball, 0) tarball[512] = 'x'.charCodeAt(0) new Header({ path: c, type: 'SymbolicLink', linkpath: './target', }).encode(tarball, 1024) const cwd = t.testdir({ tarball }) await extract({ cwd, file: resolve(cwd, 'tarball') }) t.throws(() => statSync(resolve(cwd, 'target'))) t.equal(lstatSync(resolve(cwd, c)).isSymbolicLink(), true) }) }) } isaacs-node-tar-0a52f00/test/header.js000066400000000000000000000621641522005272700175630ustar00rootroot00000000000000import t from 'tap' import { Header } from '../dist/esm/header.js' import { name } from '../dist/esm/types.js' t.test('ustar format', t => { const buf = Buffer.from( '666f6f2e74787400000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303037353520003035373736312000303030303234200037373737' + '3737373737373700313236373735363735343000303133303531200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030306973616163730000000000000000000000000000000000' + '0000000000000000007374616666000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ) const h = new Header({ path: 'foo.txt', }) const slab = Buffer.alloc(1024) Object.assign(h, { mode: 0o755, uid: 24561, gid: 20, size: 0o77777777777, mtime: new Date('2016-04-01T22:00Z'), type: 'File', uname: 'isaacs', gname: 'staff', }) h.encode(slab) t.equal(slab.subarray(0, 512).toString('hex'), buf.toString('hex')) t.equal( slab.toString('hex'), buf.toString('hex') + new Array(1025).join('0'), ) const h2 = new Header(buf) t.match(h2, { path: 'foo.txt', mode: 0o755, uid: 24561, gid: 20, size: 0o77777777777, ctime: null, atime: null, uname: 'isaacs', gname: 'staff', cksumValid: true, cksum: 5673, }) t.end() }) t.test('xstar format', t => { const buf = Buffer.from( '666f6f2e74787400000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303037353520003035373736312000303030303234200030303030' + '3030303134342000313236373735363735343000303135313331200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030306973616163730000000000000000000000000000000000' + '0000000000000000007374616666000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000031323637' + '3735363735343000313236373735363735343000000000000000000000000000' + // just some junk '420420420420420420420420420420420420420420420420420420420420', 'hex', ) const h = new Header({ path: 'foo.txt', }) Object.assign(h, { mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), type: 'File', uname: 'isaacs', gname: 'staff', }) h.encode() const slab = h.block t.equal(slab.toString('hex'), buf.subarray(0, 512).toString('hex')) const h2 = new Header(buf) t.match(h2, { path: 'foo.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), type: 'File', uname: 'isaacs', gname: 'staff', cksumValid: true, cksum: 6745, }) t.end() }) t.test('prefix handling', t => { t.plan(4) t.test('no times', t => { const buf = Buffer.from( '666f6f2e74787400000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303037353520003035373736312000303030303234200030303030' + '3030303134342000313236373735363735343000303337323734200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030306973616163730000000000000000000000000000000000' + '0000000000000000007374616666000000000000000000000000000000000000' + '00000000000000000030303030303020003030303030302000722f652f612f6c' + '2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f79' + '2f2d2f722f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f72' + '2f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f722f652f61' + '2f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d' + '2f702f612f742f68000000000000000000000000000000000000000000000000', 'hex', ) const h = new Header({ path: 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/d/e/e/p/-/p/a/t/h/foo.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: null, atime: undefined, type: '0', uname: 'isaacs', gname: 'staff', }) const b2 = Buffer.alloc(512) h.encode(b2, 0) t.equal( b2.toString().replace(/\0+/g, ' '), buf.toString().replace(/\0+/g, ' '), ) t.equal(b2.toString('hex'), buf.toString('hex')) const h2 = new Header(buf) t.match(h2, { path: 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/d/e/e/p/-/p/a/t/h/foo.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: null, atime: null, type: 'File', uname: 'isaacs', gname: 'staff', cksumValid: true, cksum: 16060, needPax: false, }) t.equal(b2.toString().replace(/\0.*$/, ''), 'foo.txt') t.equal( b2.subarray(345).toString().replace(/\0.*$/, ''), 'r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-' + '/d/e/e/p/-/p/a/t/h', ) t.end() }) t.test('a/c times, use shorter prefix field', t => { const buf = Buffer.from( '652f702f2d2f702f612f742f682f666f6f2e7478740000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303037353520003035373736312000303030303234200030303030' + '3030303134342000313236373735363735343000303431353030200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030306973616163730000000000000000000000000000000000' + '0000000000000000007374616666000000000000000000000000000000000000' + '00000000000000000030303030303020003030303030302000722f652f612f6c' + '2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f79' + '2f2d2f722f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f72' + '2f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f722f652f61' + '2f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f642f65000031323637' + '3735363735343000313236373735363735343000000000000000000000000000', 'hex', ) const h = new Header() h.path = 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/d/e/e/p/-/p/a/t/h/foo.txt' h.mode = 0o755 h.uid = 24561 h.gid = 20 h.size = 100 h.mtime = new Date('2016-04-01T22:00Z') h.ctime = new Date('2016-04-01T22:00Z') h.atime = new Date('2016-04-01T22:00Z') h.type = 'File' h.uname = 'isaacs' h.gname = 'staff' const b2 = Buffer.alloc(512) h.encode(b2, 0) t.equal(b2.toString('hex'), buf.toString('hex')) const b3 = Buffer.alloc(1024) h.encode(b3, 100) t.equal(b2.toString('hex'), b3.subarray(100, 612).toString('hex')) const h2 = new Header(b3, 100) t.match( h2, { path: 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/d/e/e/p/-/p/a/t/h/foo.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), type: 'File', uname: 'isaacs', gname: 'staff', cksumValid: true, cksum: 17216, needPax: false, }, 'header from buffer', ) t.equal(b2.toString().replace(/\0.*$/, ''), 'e/p/-/p/a/t/h/foo.txt') t.equal( b2.subarray(345).toString().replace(/\0.*$/, ''), 'r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-' + '/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/d/e', ) t.end() }) t.test('hella long basename', t => { const buf = Buffer.from( '6c6f6e672d66696c652d6c6f6e672d66696c652d6c6f6e672d66696c652d6c6f' + '6e672d66696c652d6c6f6e672d66696c652d6c6f6e672d66696c652d6c6f6e67' + '2d66696c652d6c6f6e672d66696c652d6c6f6e672d66696c652d6c6f6e672d66' + '696c650030303037353520003035373736312000303030303234200030303030' + '3030303134342000313236373735363735343000303630313431200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030306973616163730000000000000000000000000000000000' + '0000000000000000007374616666000000000000000000000000000000000000' + '00000000000000000030303030303020003030303030302000722f652f612f6c' + '2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f79' + '2f2d2f722f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f72' + '2f652f612f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f722f652f61' + '2f6c2f6c2f792f2d2f722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d' + '2f702f612f742f68000000000000000000000000000000000000000000000000', 'hex', ) const h = new Header({ path: 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/d/e/e/p/-/p/a/t/h/' + new Array(20).join('long-file-') + 'long-file.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: null, atime: undefined, type: '0', uname: 'isaacs', gname: 'staff', }) const b2 = Buffer.alloc(513) h.encode(b2, 1) t.equal(b2.toString('hex'), '00' + buf.toString('hex')) t.ok(h.needPax, 'need pax because long filename') const h2 = new Header(b2, 1) t.match(h2, { cksumValid: true, cksum: 24673, path: 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/r/e/a/l/l/y/-/' + 'r/e/a/l/l/y/-/d/e/e/p/-/p/a/t/h/long-file-long-file-long-' + 'file-long-file-long-file-long-file-long-file-long-file-long-' + 'file-long-file', needPax: false, }) t.end() }) t.test('long basename, long dirname', t => { const buf = Buffer.from( '6c6f6e672d6469726e616d652d6c6f6e672d6469726e616d652d6c6f6e672d64' + '69726e616d652d6c6f6e672d6469726e616d652d6c6f6e672d6469726e616d65' + '2d6c6f6e672d6469726e616d652d6c6f6e672d6469726e616d652d6c6f6e672d' + '6469720030303037353520003035373736312000303030303234200030303030' + '3030303134342000313236373735363735343000303334323035200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030306973616163730000000000000000000000000000000000' + '0000000000000000007374616666000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ) const h = new Header({ path: new Array(30).join('long-dirname-') + 'long-dirname/' + new Array(20).join('long-file-') + 'long-file.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: null, atime: undefined, type: '0', uname: 'isaacs', gname: 'staff', }) const b2 = Buffer.alloc(512) h.encode(b2, 0) t.equal(h.type, 'File') t.equal(h.typeKey, '0') t.equal(b2.toString('hex'), buf.toString('hex')) t.equal(h.cksum, 14469) t.ok(h.needPax, 'need pax because long filename') const h2 = new Header(b2) t.match(h2, { path: 'long-dirname-long-dirname-long-dirname-long-dirname-' + 'long-dirname-long-dirname-long-dirname-long-dir', cksum: 14469, cksumValid: true, needPax: false, }) t.end() }) }) t.test('throwers', t => { t.throws( _ => new Header(Buffer.alloc(100)), new Error('need 512 bytes for header'), ) t.throws( _ => new Header({}).encode(Buffer.alloc(100)), new Error('need 512 bytes for header'), ) t.end() }) t.test('null block', t => { const h = new Header(Buffer.alloc(512)) t.match(h, { cksumValid: false, needPax: false, path: '', type: 'File', mode: undefined, uid: undefined, gid: undefined, size: undefined, mtime: undefined, cksum: undefined, linkpath: '', uname: undefined, gname: undefined, devmaj: 0, devmin: 0, atime: undefined, ctime: undefined, nullBlock: true, }) t.end() }) t.test('unknown type', t => { const h = new Header( Buffer.from( '666f6f2e74787400000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303037353520003035373736312000303030303234200030303030' + '303030313434200031323637373536373534300030303630373620005a000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ), ) t.equal(h.type, 'Unsupported') t.equal(h.typeKey, 'Unsupported') t.end() }) t.test('dir as file with trailing /', t => { const b = Buffer.from( '782f792f00000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000030303030' + '3030303030302000000000000000000000000000303034363136200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030300000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ) const h = new Header(b) t.equal(h.type, 'Directory') b[156] = '0'.charCodeAt(0) const h2 = new Header(b) t.equal(h2.type, 'Directory') t.end() }) t.test('null numeric values do not get written', t => { const b = Buffer.alloc(512) const h = new Header() h.encode(b, 0) t.same( b, Buffer.from( '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000303033303737200030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030300000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ), ) const h2 = new Header(b) t.match(h2, { type: 'File', cksumValid: true, needPax: false, nullBlock: false, path: '', mode: undefined, uid: undefined, gid: undefined, size: undefined, mtime: undefined, cksum: 1599, linkpath: '', uname: '', gname: '', devmaj: 0, devmin: 0, atime: undefined, ctime: undefined, }) t.end() }) t.test('big numbers', t => { const b = Buffer.alloc(512) const h = new Header({ path: 'bignum', size: 0o77777777777 + 1, }) h.encode(b, 0) const h2 = new Header(b) t.equal(h2.size, 0o77777777777 + 1) t.end() }) t.test('dir with long body', t => { const b = Buffer.from( '7061636b6167652f76656e646f72000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303037353520003030303030302000303030303030200030303030' + '3030313030303020313330363133303232343120303132303236200035000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030300000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ) const h = new Header(b) t.equal(h.type, 'Directory') t.equal(h.size, 0) t.end() }) t.test('null block, global extended header', t => { const h = new Header( Buffer.alloc(512), 0, { undef: undefined, blerg: 'bloo', }, { path: '/global.path', foo: 'global foo', global: true, linkpath: 'asdf', }, ) t.match(h, { cksumValid: false, needPax: false, path: '', type: 'File', mode: null, uid: null, gid: null, size: null, mtime: null, cksum: null, linkpath: '', uname: null, gname: null, devmaj: 0, devmin: 0, atime: null, ctime: null, nullBlock: true, blerg: 'bloo', foo: 'global foo', }) t.end() }) t.test('gnutar-generated 10gb file size', t => { const b = Buffer.from( '313067622e696d67000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303030363634003030303137353000303030313735300080000000' + '0000000280000000313334373434303132303500303131313437002030000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461722020006973616163730000000000000000000000000000000000' + '0000000000000000006973616163730000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ) const h = new Header(b) t.equal(h.size, 1024 * 1024 * 1024 * 10, 'should be 10gb file') // cannot set type to something invalid t.throws(() => (h.type = 'Z')) t.end() }) t.test('tarmageddon, ensure that Header prioritizes Pax size', async t => { const h = new Header({ path: 'file.txt', size: 0, }) h.encode() t.equal(h.size, 0, 'size is zero in raw ustar header') const hPax = new Header(h.block, 0, { size: 123 }) t.equal(hPax.size, 123, 'if size is set in pax, takes priority') }) t.test('do not apply ex/gex to meta entries', t => { const normalEntryTypes = new Set([ 'File', 'OldFile', 'Link', 'SymbolicLink', 'CharacterDevice', 'BlockDevice', 'Directory', 'FIFO', 'ContiguousFile', 'GNUDumpDir', ]) for (const type of name.values()) { const data = new Header({ path: 'x', type, size: 1, }) data.encode() const h = new Header(data.block, 0, { size: 100, dev: 5678, ino: 9876, }) if (normalEntryTypes.has(type)) { if (h.type === 'Directory') { t.equal(h.size, 0, 'Directories always size=0, no matter what') } else { t.equal(h.size, 100, `expect ${type} to respect extended header`) } t.equal(h.dev, 5678, `expect ${type} to respect extended header`) t.equal(h.ino, 9876, `expect ${type} to respect extended header`) } else { t.equal(h.size, 1, `expect ${type} to ignore extended header`) t.equal(h.dev, undefined, `expect ${type} to ignore extended header`) t.equal(h.ino, undefined, `expect ${type} to ignore extended header`) } } return t.end() }) t.test('no negative size', t => { const i = new Header({ size: -1000 }) // stubbornly refuse t.equal(i.size, undefined) t.end() }) isaacs-node-tar-0a52f00/test/index.js000066400000000000000000000034501522005272700174330ustar00rootroot00000000000000import t from 'tap' import * as tar from '../dist/esm/index.js' t.match(tar, { create: Function, c: Function, replace: Function, r: Function, list: Function, t: Function, update: Function, u: Function, extract: Function, x: Function, Pack: Function, Unpack: Function, Parser: Function, ReadEntry: Function, WriteEntry: Function, Header: Function, Pax: Function, types: { name: new Map([ ['0', 'File'], ['', 'OldFile'], ['1', 'Link'], ['2', 'SymbolicLink'], ['3', 'CharacterDevice'], ['4', 'BlockDevice'], ['5', 'Directory'], ['6', 'FIFO'], ['7', 'ContiguousFile'], ['g', 'GlobalExtendedHeader'], ['x', 'ExtendedHeader'], ['A', 'SolarisACL'], ['D', 'GNUDumpDir'], ['I', 'Inode'], ['K', 'NextFileHasLongLinkpath'], ['L', 'NextFileHasLongPath'], ['M', 'ContinuationFile'], ['N', 'OldGnuLongPath'], ['S', 'SparseFile'], ['V', 'TapeVolumeHeader'], ['X', 'OldExtendedHeader'], ]), code: new Map([ ['File', '0'], ['OldFile', ''], ['Link', '1'], ['SymbolicLink', '2'], ['CharacterDevice', '3'], ['BlockDevice', '4'], ['Directory', '5'], ['FIFO', '6'], ['ContiguousFile', '7'], ['GlobalExtendedHeader', 'g'], ['ExtendedHeader', 'x'], ['SolarisACL', 'A'], ['GNUDumpDir', 'D'], ['Inode', 'I'], ['NextFileHasLongLinkpath', 'K'], ['NextFileHasLongPath', 'L'], ['ContinuationFile', 'M'], ['OldGnuLongPath', 'N'], ['SparseFile', 'S'], ['TapeVolumeHeader', 'V'], ['OldExtendedHeader', 'X'], ]), }, }) t.match(tar.PackSync, Function) t.match(tar.WriteEntrySync, Function) t.match(tar.WriteEntryTar, Function) t.match(tar.Pax.parse, Function) isaacs-node-tar-0a52f00/test/large-numbers.js000066400000000000000000000053501522005272700210700ustar00rootroot00000000000000import t from 'tap' import { encode, parse } from '../dist/esm/large-numbers.js' t.test('parse', t => { const cases = new Map([ ['ffffffffffffffffffffffff', -1], ['800000000000100000000020', 17592186044448], ['fffffffffffffffe1ecc8020', -8073215968], ['fffffffffffffff000000020', -68719476704], ['80000000001fffffffffffff', 9007199254740991], // MAX_SAFE_INTEGER ['ffffffffffe0000000000001', -9007199254740991], // MIN_SAFE_INTEGER ['800000000000100000000000', 17592186044416], ['fffffffffffffffe1ecc8000', -8073216000], ['fffffffffffffff000000000', -68719476736], ['800000000000000353b66200', 14289363456], ]) t.plan(cases.size) cases.forEach((value, hex) => t.equal(parse(Buffer.from(hex, 'hex')), value), ) }) t.test('parse out of range', t => { const cases = [ '800000030000000000000000', '800000000020000000000000', // MAX_SAFE_INTEGER + 1 'ffffffffffe0000000000000', // MIN_SAFE_INTEGER - 1 'fffffffffdd0000000000000', ] t.plan(cases.length) cases.forEach(hex => t.throws( _ => parse(Buffer.from(hex, 'hex')), Error('parsed number outside of javascript safe integer range'), ), ) }) t.test('parse invalid base256 encoding', t => { const cases = [ '313233343536373131', // octal encoded '700000030000000000000000', // does not start with 0x80 or 0xff ] t.plan(cases.length) cases.forEach(hex => t.throws( _ => parse(Buffer.from(hex, 'hex')), Error('invalid base256 encoding'), ), ) }) t.test('encode', t => { const cases = new Map([ ['ffffffffffffffffffffffff', -1], ['800000000000100000000020', 17592186044448], ['800000000000100000000000', 17592186044416], ['fffffffffffffffe1ecc8020', -8073215968], ['fffffffffffffff000000020', -68719476704], ['fffffffffffffff000000000', -68719476736], // Allows us to test the case where there's a trailing 00 ['80000000001fffffffffffff', 9007199254740991], // MAX_SAFE_INTEGER ['ffffffffffe0000000000001', -9007199254740991], // MIN_SAFE_INTEGER ]) t.plan(2) t.test('alloc', t => { t.plan(cases.size) cases.forEach((value, hex) => t.equal(encode(value, Buffer.alloc(12)).toString('hex'), hex), ) }) t.test('allocUnsafe', t => { t.plan(cases.size) cases.forEach((value, hex) => t.equal(encode(value, Buffer.allocUnsafe(12)).toString('hex'), hex), ) }) }) t.test('encode unsafe numbers', t => { const cases = [ Number.MAX_VALUE, Number.MAX_SAFE_INTEGER + 1, Number.MIN_SAFE_INTEGER - 1, Number.MIN_VALUE, ] t.plan(cases.length) cases.forEach(value => t.throws( _ => encode(value), Error( 'cannot encode number outside of javascript safe integer range', ), ), ) }) isaacs-node-tar-0a52f00/test/list.ts000066400000000000000000000260251522005272700173140ustar00rootroot00000000000000import type { Stats } from 'fs' import fs, { readFileSync } from 'fs' import fsp from 'fs/promises' import { dirname, resolve } from 'path' import type { Test } from 'tap' import t from 'tap' import { fileURLToPath } from 'url' import { list } from '../dist/esm/list.js' import { Parser } from '../dist/esm/parse.js' import type { ReadEntry } from '../dist/esm/read-entry.js' import { makeTar } from './fixtures/make-tar.js' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const poop = new Error('poop') const cbFail = (...args: any[]) => (args[args.length - 1] as Function)(poop) const syncFail = () => { throw poop } const asyncFail = async () => syncFail() const lp = JSON.parse( readFileSync(__dirname + '/fixtures/parse/long-paths.json', 'utf8'), ) as ( | ['meta', string] | ['entry', Record] | ['nullBlock' | 'eof' | 'end'] )[] t.test('basic', t => { const file = resolve(__dirname, 'fixtures/tars/long-paths.tar') const expect = (lp as any[]) .filter(e => Array.isArray(e) && e[0] === 'entry') .map((e: ['entry', Record]) => e[1].path as string) const check = (actual: string[], t: Test) => { t.same(actual, expect) return Promise.resolve(null) } ;[1000, undefined].forEach(maxReadSize => { t.test('file maxReadSize=' + maxReadSize, t => { t.test('sync', t => { const actual: string[] = [] const onReadEntry = (entry: ReadEntry) => actual.push(entry.path) list({ file: file, sync: true, onReadEntry, maxReadSize, }) return check(actual, t) }) t.test('async promise', async t => { const actual: string[] = [] const onReadEntry = (entry: ReadEntry) => actual.push(entry.path) return await list({ file, onReadEntry, maxReadSize, }).then(() => check(actual, t)) }) t.test('async cb', t => { const actual: string[] = [] const onReadEntry = (entry: ReadEntry) => actual.push(entry.path) list( { file: file, onReadEntry: onReadEntry, maxReadSize: maxReadSize, }, (er?: Error) => { if (er) { throw er } check(actual, t) t.end() }, ) }) t.end() }) }) t.test('stream', t => { t.test('sync', t => { const actual: string[] = [] const onReadEntry = (entry: ReadEntry) => actual.push(entry.path) const l = list({ sync: true, onReadEntry }) l.end(fs.readFileSync(file)) return check(actual, t) }) t.test('async', t => { const actual: string[] = [] const onReadEntry = (entry: ReadEntry) => actual.push(entry.path) const l = list() l.on('entry', onReadEntry) l.on('end', _ => check(actual, t).then(_ => t.end())) fs.createReadStream(file).pipe(l) }) t.end() }) t.test('no onReadEntry function', () => list({ file: file })) t.test('limit to specific files', t => { const fileList = [ 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t', '170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc///', ] const expect = [ '170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', ] t.test('no filter function', async t => { const check = () => t.same(actual, expect) const actual: string[] = [] return list( { file: file, onReadEntry: entry => actual.push(entry.path), }, fileList, ).then(check) }) t.test('no filter function, stream', t => { const check = () => t.same(actual, expect) const actual: string[] = [] const onReadEntry = (entry: ReadEntry) => actual.push(entry.path) fs.createReadStream(file).pipe( list(fileList) .on('entry', onReadEntry) .on('end', _ => { check() t.end() }), ) }) t.test('filter function', async t => { const check = () => t.same(actual, expect.slice(0, 1)) const actual: string[] = [] return list( { file: file, filter: path => path === expect[0], onReadEntry: entry => actual.push(entry.path), }, fileList, ).then(check) }) return t.test('list is unmunged', t => { t.same(fileList, [ 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t', '170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc///', ]) t.end() }) }) t.end() }) t.test('bad args', t => { t.throws( () => list({ file: __filename, sync: true }, () => {}), new TypeError('callback not supported for sync tar functions'), ) t.throws( () => list({}, () => {}), new TypeError('callback only supported with file option'), ) t.end() }) t.test('stat fails', async t => { const { list } = await t.mockImport( '../src/list.js', { fs: t.createMock(fs, { open: cbFail, stat: cbFail, lstat: cbFail, fstat: cbFail, openSync: syncFail, statSync: syncFail, lstatSync: syncFail, fstatSync: syncFail, }), 'fs/promises': t.createMock(fsp, { open: asyncFail, stat: asyncFail, lstat: asyncFail, fstat: asyncFail, }), }, ) t.test('sync', t => { t.plan(1) t.throws(() => list({ file: __filename, sync: true }), poop) }) t.test('cb', t => { t.plan(1) list({ file: __filename }, er => t.equal(er, poop)) }) t.test('promise', t => { t.plan(1) list({ file: __filename }).catch(er => t.equal(er, poop)) }) t.end() }) t.test('read fail', t => { t.test('sync', async t => { const { list } = await t.mockImport( '../src/list.js', { fs: t.createMock(fs, { read: cbFail, readSync: syncFail, }), 'fs/promises': t.createMock(fsp, { read: asyncFail, }), }, ) t.plan(1) t.throws( () => list({ file: __filename, sync: true, maxReadSize: 10, }), poop, ) }) t.test('cb', async t => { const { list } = await t.mockImport( '../src/list.js', { fs: t.createMock(fs, { read: cbFail, readSync: syncFail, }), 'fs/promises': t.createMock(fsp, { read: asyncFail, }), }, ) t.plan(1) await list({ file: __filename }, er => t.equal(er, poop)) }) t.test('promise', async t => { const { list } = await t.mockImport( '../src/list.js', { fs: t.createMock(fs, { read: cbFail, readSync: syncFail, }), 'fs/promises': t.createMock(fsp, { read: asyncFail, }), }, ) t.plan(1) await list({ file: __filename }).catch(er => t.equal(er, poop)) }) t.end() }) t.test('noResume option', t => { const file = resolve(__dirname, 'fixtures/tars/file.tar') t.test('sync', t => { let e!: ReadEntry list({ file: file, onReadEntry: entry => { e = entry process.nextTick(() => { t.notOk(entry.flowing) entry.resume() }) }, sync: true, noResume: true, }) t.ok(e) t.notOk(e.flowing) e.on('end', () => t.end()) }) t.test('async', t => list({ file: file, onReadEntry: entry => { process.nextTick(() => { t.notOk(entry.flowing) entry.resume() }) }, noResume: true, }), ) t.end() }) t.test('typechecks', t => { const p = list() //@ts-expect-error p.then t.type(p, Parser) t.end() }) // GHSA-29xp-372q-xqph t.test('reduce file size while synchronously reading', async t => { const data = makeTar([ { type: 'File', path: 'a', size: 1, }, 'a', { type: 'File', path: 'b', size: 1, }, 'b', '', '', ]) const dataLen = data.byteLength const truncLen = 512 * 2 const truncData = data.subarray(0, truncLen) const setup = async (t: Test) => { const dir = t.testdir({ 'file.tar': data }) const file = resolve(dir, 'file.tar') const { list } = await t.mockImport( '../src/list.js', { 'node:fs': t.createMock(fs, { fstatSync: (fd: number): Stats => { const st = fs.fstatSync(fd) // truncate the file before we have a chance to read fs.writeFileSync(file, truncData) return st }, }), }, ) return { file, list } } t.test('gutcheck, reading normally reads the whole file', async t => { const dir = t.testdir({ 'file.tar': data }) const file = resolve(dir, 'file.tar') const entries: string[] = [] list({ file, sync: true, maxReadSize: dataLen + 1, onReadEntry: e => entries.push(e.path), }) t.strictSame(entries, ['a', 'b']) entries.length = 0 list({ file, sync: true, maxReadSize: dataLen - 1, onReadEntry: e => entries.push(e.path), }) t.strictSame(entries, ['a', 'b']) }) t.test('read in one go', async t => { const { file, list } = await setup(t) const entries: string[] = [] list({ file, sync: true, maxReadSize: dataLen + 1, onReadEntry: e => entries.push(e.path), }) t.strictSame(entries, ['a']) }) t.test('read in parts', async t => { const { file, list } = await setup(t) const entries: string[] = [] list({ file, sync: true, maxReadSize: dataLen / 4, onReadEntry: e => entries.push(e.path), }) t.strictSame(entries, ['a']) }) }) isaacs-node-tar-0a52f00/test/load-all.js000066400000000000000000000007471522005272700200170ustar00rootroot00000000000000// just load all the files so we can't cheat coverage by avoiding something import fs from 'fs' import t from 'tap' import path, { dirname } from 'path' import { fileURLToPath } from 'url' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const lib = path.resolve(__dirname, '../dist/esm') await Promise.all( fs .readdirSync(lib) .filter(f => f.endsWith('.js')) .map(f => import('../dist/esm/' + f)), ) t.pass('all lib files loaded') isaacs-node-tar-0a52f00/test/make-command.ts000066400000000000000000000036641522005272700206760ustar00rootroot00000000000000import t from 'tap' import { makeCommand } from '../src/make-command.js' import { isAsyncFile, isAsyncNoFile, isSyncFile, isSyncNoFile, } from '../src/options.js' class Sync { sync: true = true } class Async {} const cmd = makeCommand( (opt, entries) => { t.equal(isSyncFile(opt), true) t.type(entries, Array) }, async (opt, entries) => { t.equal(isAsyncFile(opt), true) t.type(entries, Array) }, (opt, entries) => { t.equal(isSyncNoFile(opt), true) t.type(entries, Array) return new Sync() }, (opt, entries) => { t.equal(isAsyncNoFile(opt), true) t.type(entries, Array) return new Async() }, (opt, entries) => { if (entries?.length === 2) throw new Error('should not be len 2') if (!opt) throw new Error('should get opt') }, ) t.test('validation function is called', t => { t.throws(() => cmd({}, ['a', 'b'])) t.throws(() => cmd({ sync: true }, ['a', 'b'])) t.throws(() => cmd({ sync: true, file: 'x' }, ['a', 'b'])) t.throws(() => cmd({ file: 'x' }, ['a', 'b'])) // cases where cb is not allowed t.throws(() => cmd({}, [], () => {})) t.throws(() => cmd({}, () => {})) //@ts-expect-error t.throws(() => cmd({ sync: true }, [], () => {})) //@ts-expect-error t.throws(() => cmd({ sync: true }, () => {})) t.throws(() => cmd({ sync: true, file: 'x' }, [], () => {})) t.throws(() => cmd({ sync: true, file: 'x' }, () => {})) t.end() }) t.test('basic calls', async t => { t.match(cmd(), Async) t.match(cmd({}), Async) t.match(cmd({}, []), Async) t.match(cmd({ sync: true }), Sync) t.match(cmd({ sync: true }, []), Sync) t.equal(cmd({ sync: true, file: 'x' }), undefined) t.equal(await cmd({ file: 'x' }), undefined) t.equal(await cmd({ file: 'x' }, []), undefined) let cbCalled = false t.equal( await cmd({ file: 'x' }, [], () => { cbCalled = true }), undefined, ) t.equal(cbCalled, true, 'called callback') }) isaacs-node-tar-0a52f00/test/map.js000066400000000000000000000005421522005272700171000ustar00rootroot00000000000000import t from 'tap' import map from '../map.js' import { fileURLToPath } from 'url' const __filename = fileURLToPath(import.meta.url) t.equal(map('test/index.js'), 'src/index.ts') t.same(map('test/unpack.js'), ['src/unpack.ts', 'src/mkdir.ts']) t.same(map('test/load-all.js'), []) t.equal(map(__filename), 'map.js') t.equal(map('test/asdf'), 'src/asdf') isaacs-node-tar-0a52f00/test/mode-fix.js000066400000000000000000000010341522005272700200300ustar00rootroot00000000000000import t from 'tap' import { modeFix } from '../dist/esm/mode-fix.js' t.equal(modeFix(0o10644, false), 0o644) t.equal(modeFix(0o10644, true), 0o755) t.equal(modeFix(0o10604, true), 0o705) t.equal(modeFix(0o10600, true), 0o700) t.equal(modeFix(0o10066, true), 0o077) t.equal(modeFix(0o10664, false, true), 0o644) t.equal(modeFix(0o10066, false, true), 0o644) t.equal(modeFix(0o10666, true, true), 0o755) t.equal(modeFix(0o10604, true, true), 0o705) t.equal(modeFix(0o10600, true, true), 0o700) t.equal(modeFix(0o10066, true, true), 0o755) isaacs-node-tar-0a52f00/test/normalize-unicode.js000066400000000000000000000042451522005272700217530ustar00rootroot00000000000000import t from 'tap' import { fileURLToPath } from 'url' import { normalizeUnicode } from '../dist/esm/normalize-unicode.js' import { stripTrailingSlashes } from '../dist/esm/strip-trailing-slashes.js' import { normalizeWindowsPath } from '../dist/esm/normalize-windows-path.js' const __filename = fileURLToPath(import.meta.url) const fakePlatform = process.env.TESTING_TAR_FAKE_PLATFORM // café const cafe1 = Buffer.from([0x63, 0x61, 0x66, 0xc3, 0xa9]).toString() // cafe with a ` const cafe2 = Buffer.from([0x63, 0x61, 0x66, 0x65, 0xcc, 0x81]).toString() t.equal( normalizeUnicode(cafe1), normalizeUnicode(cafe2), 'matching unicodes', ) t.equal(normalizeUnicode(cafe1), normalizeUnicode(cafe2), 'cached') t.equal(normalizeUnicode('foo'), 'FOO', 'non-unicode string') if (fakePlatform === 'win32') { t.test('normalize with strip slashes', t => { const paths = [ '\\a\\b\\c\\d\\', '﹨aaaa﹨dddd﹨', '\bbb\eee\', '\\\\\eee\\\\\\', '¼foo.txt', '1/4foo.txt', ] t.plan(paths.length) for (const path of paths) { t.test(JSON.stringify(path), t => { const a = normalizeUnicode( stripTrailingSlashes(normalizeWindowsPath(path)), ) const b = stripTrailingSlashes( normalizeWindowsPath(normalizeUnicode(path)), ) t.matchSnapshot(a, 'normalized') t.equal(a, b, 'order should not matter') t.end() }) } t.end() }) } t.test('blow out the cache', t => { const cafBuf = Buffer.from([0x63, 0x61, 0x66]) const e1 = Buffer.from([0x65, 0xcc, 0x81]) const e2 = Buffer.from([0xc3, 0xa9]) let cafe1 = cafBuf let cafe2 = cafBuf for (let i = 0; i < 11_001; i++) { cafe1 = Buffer.concat([cafe1, e1]) cafe2 = Buffer.concat([cafe2, e2]) const n1 = normalizeUnicode(cafe1.toString()) const n2 = normalizeUnicode(cafe2.toString()) // don't test all of these, too noisy if (!(i % 500)) { t.equal(n1, n2) } } t.end() }) if (fakePlatform !== 'win32') { t.spawn(process.execPath, [__filename, 'win32'], { env: { ...process.env, TESTING_TAR_FAKE_PLATFORM: 'win32', }, }) } isaacs-node-tar-0a52f00/test/normalize-windows-path.js000066400000000000000000000020401522005272700227400ustar00rootroot00000000000000import t from 'tap' const realPlatform = process.platform const fakePlatform = realPlatform === 'win32' ? 'posix' : 'win32' t.test('posix', async t => { if (realPlatform === 'win32') { process.env.TESTING_TAR_FAKE_PLATFORM = fakePlatform } else { delete process.env.TESTING_TAR_FAKE_PLATFORM } const { normalizeWindowsPath } = await t.mockImport( '../dist/esm/normalize-windows-path.js', ) t.equal( normalizeWindowsPath('/some/path/back\\slashes'), '/some/path/back\\slashes', ) t.equal(normalizeWindowsPath('c:\\foo\\bar'), 'c:\\foo\\bar') t.end() }) t.test('win32', async t => { if (realPlatform !== 'win32') { process.env.TESTING_TAR_FAKE_PLATFORM = fakePlatform } else { delete process.env.TESTING_TAR_FAKE_PLATFORM } const { normalizeWindowsPath } = await t.mockImport( '../dist/esm/normalize-windows-path.js', ) t.equal( normalizeWindowsPath('/some/path/back\\slashes'), '/some/path/back/slashes', ) t.equal(normalizeWindowsPath('c:\\foo\\bar'), 'c:/foo/bar') t.end() }) isaacs-node-tar-0a52f00/test/options.js000066400000000000000000000033301522005272700200140ustar00rootroot00000000000000import t from 'tap' import { dealias, isSync, isSyncFile, isFile, isAsyncFile, isAsyncNoFile, isSyncNoFile, isAsync, isNoFile, } from '../dist/esm/options.js' t.same(dealias(), {}) t.same(dealias(false), {}) t.same( dealias({ C: 'dir', f: 'file', z: 'zip', P: 'preserve', U: 'unlink', 'strip-components': 99, foo: 'bar', }), { cwd: 'dir', file: 'file', gzip: 'zip', preservePaths: 'preserve', unlink: 'unlink', strip: 99, foo: 'bar', }, ) t.same( dealias({ C: 'dir', f: 'file', z: 'zip', P: 'preserve', U: 'unlink', stripComponents: 99, foo: 'bar', }), { cwd: 'dir', file: 'file', gzip: 'zip', preservePaths: 'preserve', unlink: 'unlink', strip: 99, foo: 'bar', }, ) t.same(dealias({ noChmod: false }), { chmod: true }) t.same(dealias({ noChmod: true }), {}) t.equal(isSyncFile(dealias({ sync: true, f: 'x' })), true) t.equal(isSyncFile(dealias({ file: 'x' })), false) t.equal(isSyncFile(dealias({ sync: true })), false) t.equal(isSyncFile(dealias({})), false) t.equal(isSync(dealias({ sync: true, f: 'x' })), true) t.equal(isSync(dealias({ file: 'x' })), false) t.equal(isSync(dealias({ sync: true })), true) t.equal(isSync(dealias({})), false) t.equal(isAsync(dealias({})), true) t.equal(isFile(dealias({ sync: true, f: 'x' })), true) t.equal(isNoFile(dealias({ sync: true, f: 'x' })), false) t.equal(isFile(dealias({ file: 'x' })), true) t.equal(isFile(dealias({ sync: true })), false) t.equal(isFile(dealias({})), false) t.equal(isSyncFile(dealias({})), false) t.equal(isSyncNoFile(dealias({ sync: true })), true) t.equal(isAsyncFile(dealias({})), false) t.equal(isAsyncNoFile(dealias({})), true) isaacs-node-tar-0a52f00/test/pack.js000066400000000000000000001542441522005272700172520ustar00rootroot00000000000000import t from 'tap' import { Pack, PackSync } from '../dist/esm/pack.js' import fs from 'fs' import path, { resolve } from 'path' import { fileURLToPath } from 'url' import { Parser } from '../src/parse.js' import { Header } from '../dist/esm/header.js' import zlib from 'zlib' import * as miniz from 'minizlib' import mutateFS from 'mutate-fs' import { Minipass } from 'minipass' import EE from 'events' import { rimraf } from 'rimraf' import { mkdirp } from 'mkdirp' import { ReadEntry } from '../dist/esm/read-entry.js' import { normalizeWindowsPath as normPath } from '../dist/esm/normalize-windows-path.js' import { chmodrSync } from 'chmodr' const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const fixtures = path.resolve(__dirname, 'fixtures') const files = path.resolve(fixtures, 'files') const tars = path.resolve(fixtures, 'tars') process.env.USER = 'isaacs' const isWindows = process.platform === 'win32' const ctime = new Date('2017-05-10T01:03:12.000Z') const atime = new Date('2017-04-17T00:00:00.000Z') const mtime = new Date('2016-04-01T19:00:00.000Z') t.teardown( mutateFS.statMutate((_er, st) => { if (st) { st.ctime = ctime st.atime = atime st.mtime = mtime } }), ) t.test('set up', t => { const one = fs.statSync(files + '/hardlink-1') const two = fs.statSync(files + '/hardlink-2') if (one.dev !== two.dev || one.ino !== two.ino) { try { fs.unlinkSync(files + '/hardlink-2') } catch (e) {} fs.linkSync(files + '/hardlink-1', files + '/hardlink-2') } chmodrSync(files, 0o644) t.end() }) t.test('pack a file', t => { const out = [] const seen = [] new Pack({ cwd: files, onWriteEntry: e => seen.push(e) }) .end('one-byte.txt') .on('data', c => out.push(c)) .on('end', _ => { const data = Buffer.concat(out) t.equal(data.length, 2048) t.match(data.subarray(512).toString(), /^a\0{511}\0{1024}$/) const h = new Header(data) const expect = { cksumValid: true, needPax: false, path: 'one-byte.txt', mode: isWindows ? 0o666 : 0o644, size: 1, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, type: 'File', } t.match(h, expect) || console.log(h, expect) const ps = new PackSync({ cwd: files }) const sout = [] ps.on('data', chunk => sout.push(chunk)) ps.add('one-byte.txt').end() const sync = Buffer.concat(sout) if (sync.length === 0) { throw new Error('no data!') } t.equal(sync.subarray(512).length, data.subarray(512).length) t.equal(sync.subarray(512).toString(), data.subarray(512).toString()) const hs = new Header(sync) t.match(hs, expect) t.strictSame( seen.map(e => e.path), ['one-byte.txt'], ) t.end() }) }) t.test('pack a file with a prefix', t => { const out = [] new Pack({ mtime, cwd: files, prefix: 'package/' }) .end('.dotfile') .on('data', c => out.push(c)) .on('end', _ => { const data = Buffer.concat(out) t.equal(data.length, 2048) t.match(data.subarray(512).toString(), /^.\n\0{510}\0{1024}$/) const h = new Header(data) const expect = { cksumValid: true, needPax: false, path: 'package/.dotfile', mode: isWindows ? 0o666 : 0o644, size: 2, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, type: 'File', } t.match(h, expect) const sync = new PackSync({ cwd: files, prefix: 'package' }) .add('.dotfile') .end() .read() t.equal(sync.subarray(512).toString(), data.subarray(512).toString()) const hs = new Header(sync) t.match(hs, expect) t.end() }) }) t.test('portable pack a dir', t => { const out = [] new Pack({ cwd: files, portable: true, gzip: true }) .add('dir') .on('data', c => out.push(c)) .end() .on('end', _ => { const zipped = Buffer.concat(out) t.equal(zipped[9], 255, 'gzip OS flag set to "unknown"') const data = new miniz.Gunzip().end(zipped).read() // dir/, dir/x, and the nulls // neither the dir or the file have any body bits const h = new Header(data) const expect = { type: 'Directory', cksumValid: true, needPax: false, path: 'dir/', mode: 0o755, size: 0, mtime: null, cksum: Number, linkpath: '', uname: '', gname: '', devmaj: 0, devmin: 0, atime: null, ctime: null, nullBlock: false, } t.match(h, expect) t.equal(data.length, 2048) t.match(data.subarray(1024).toString(), /^\0{1024}$/) const syncgz = new PackSync({ cwd: files, portable: true, gzip: true, }) .add('dir') .end() .read() t.equal(syncgz[9], 255, 'gzip OS flag set to "unknown"') const sync = new miniz.Gunzip().end(zipped).read() t.equal(sync.subarray(512).toString(), data.subarray(512).toString()) const hs = new Header(sync) t.match(hs, expect) const expect2 = { type: 'File', cksumValid: true, needPax: false, path: 'dir/x', mode: 0o644, size: 0, mtime: mtime, cksum: Number, linkpath: '', uname: '', gname: '', devmaj: 0, devmin: 0, atime: null, ctime: null, nullBlock: false, } t.match(new Header(data.subarray(512)), expect2) t.match(new Header(sync.subarray(512)), expect2) t.end() }) }) t.test('use process cwd if cwd not specified', t => { const cwd = process.cwd() t.teardown(_ => process.chdir(cwd)) process.chdir(files) const out = [] new Pack() .add('dir') .on('data', c => out.push(c)) .end() .on('end', _ => { const data = Buffer.concat(out) // dir/, dir/x, and the nulls // neither the dir or the file have any body bits const h = new Header(data) const expect = { type: 'Directory', cksumValid: true, needPax: false, path: 'dir/', mode: isWindows ? 0o777 : 0o755, size: 0, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, } t.match(h, expect) t.equal(data.length, 2048) t.match(data.subarray(1024).toString(), /^\0{1024}$/) const sync = new PackSync({ cwd: files }).add('dir').end().read() t.equal(sync.subarray(512).toString(), data.subarray(512).toString()) const hs = new Header(sync) t.match(hs, expect) const expect2 = { type: 'File', cksumValid: true, needPax: false, path: 'dir/x', mode: isWindows ? 0o666 : 0o644, size: 0, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, } t.match(new Header(data.subarray(512)), expect2) t.match(new Header(sync.subarray(512)), expect2) t.end() }) }) t.test('filter', t => { const out = [] const filter = (_path, stat) => stat.isDirectory() // only include directories, so dir/x should not appear new Pack({ cwd: files, filter: filter }) .add('dir') .on('data', c => out.push(c)) .end() .on('end', _ => { const data = Buffer.concat(out) // dir/, dir/x, and the nulls // neither the dir or the file have any body bits const h = new Header(data) const expect = { type: 'Directory', cksumValid: true, needPax: false, path: 'dir/', mode: isWindows ? 0o777 : 0o755, size: 0, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, } t.match(h, expect) t.equal(data.length, 1536) t.match(data.subarray(512).toString(), /^\0{1024}$/) const sync = new PackSync({ cwd: files, filter: filter }) .add('dir') .end() .read() t.equal(sync.subarray(512).toString(), data.subarray(512).toString()) const hs = new Header(sync) t.match(hs, expect) t.end() }) }) t.test('add the same dir twice (exercise cache code)', t => { const out = [] const filter = (_path, stat) => stat.isDirectory() // only include directories, so dir/x should not appear const pack = new Pack({ cwd: files, filter: filter }) .add('dir') .add('dir') .on('data', c => out.push(c)) .end() .on('end', _ => { const data = Buffer.concat(out) // dir/, dir/x, and the nulls // neither the dir or the file have any body bits const h = new Header(data) const expect = { type: 'Directory', cksumValid: true, needPax: false, path: 'dir/', mode: isWindows ? 0o777 : 0o755, size: 0, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, } t.match(h, expect) const h2 = new Header(data.subarray(512)) t.match(h2, expect) t.equal(data.length, 2048) t.match(data.subarray(1024).toString(), /^\0{1024}$/) const sync = new PackSync({ cwd: files, filter: filter, linkCache: pack.linkCache, readdirCache: pack.readdirCache, statCache: pack.statCache, }) .add('dir') .add('dir') .end() .read() t.equal( sync.subarray(1024).toString(), data.subarray(1024).toString(), ) const hs = new Header(sync) t.match(hs, expect) const hs2 = new Header(sync.subarray(512)) t.match(hs2, expect) t.end() }) }) t.test('if gzip is truthy, make it an object', t => { const opt = { gzip: true } new Pack(opt) t.type(opt.gzip, 'object') t.end() }) t.test('if brotli is truthy, make it an object', t => { const opt = { brotli: true } new Pack(opt) t.type(opt.brotli, 'object') t.end() }) t.test('if zstd is truthy, make it an object', t => { const opt = { zstd: true } new Pack(opt) t.type(opt.zstd, 'object') t.end() }) t.test('throws if both gzip and brotli are truthy', t => { const opt = { gzip: true, brotli: true } t.throws( _ => new Pack(opt), new TypeError('gzip, brotli, zstd are mutually exclusive'), ) t.end() }) t.test('throws if both gzip and zstd are truthy', t => { const opt = { gzip: true, zstd: true } t.throws( _ => new Pack(opt), new TypeError('gzip, brotli, zstd are mutually exclusive'), ) t.end() }) t.test('throws if both brotli and zstd are truthy', t => { const opt = { brotli: true, zstd: true } t.throws( _ => new Pack(opt), new TypeError('gzip, brotli, zstd are mutually exclusive'), ) t.end() }) t.test('throws if gzip, brotli, and zstd are all truthy', t => { const opt = { gzip: true, brotli: true, zstd: true } t.throws( _ => new Pack(opt), new TypeError('gzip, brotli, zstd are mutually exclusive'), ) t.end() }) t.test('gzip, also a very deep path', t => { const out = [] new Pack({ cwd: files, gzip: { flush: 1 }, }) .add('dir') .add('long-path') .on('data', c => out.push(c)) .end() .on('end', _ => { const zipped = Buffer.concat(out) const data = zlib.unzipSync(zipped) const entries = [] for (var i = 0; i < data.length; i += 512) { const slice = data.subarray(i, i + 512) const h = new Header(slice) if (h.nullBlock) { entries.push('null block') } else if (h.cksumValid) { entries.push([h.type, h.path]) } else if (entries.at(-1)[0] === 'File') { entries.at(-1).push(slice.toString().replace(/\0.*$/, '')) } } const expect = [ ['Directory', 'dir/'], ['Directory', 'long-path/'], ['File', 'dir/x'], ['Directory', 'long-path/r/'], ['Directory', 'long-path/r/e/'], ['Directory', 'long-path/r/e/a/'], ['Directory', 'long-path/r/e/a/l/'], ['Directory', 'long-path/r/e/a/l/l/'], ['Directory', 'long-path/r/e/a/l/l/y/'], ['Directory', 'long-path/r/e/a/l/l/y/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/'], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt', 'short\n', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', ], [ 'ExtendedHeader', 'PaxHeader/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222', ], [ 'ExtendedHeader', 'PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc', 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], ['ExtendedHeader', 'PaxHeader/Ω.txt'], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', 'Ω', ], 'null block', 'null block', ] let ok = true entries.forEach((entry, i) => { ok = ok && t.equal(entry[0], expect[i][0]) && t.equal(entry[1], expect[i][1]) && (!entry[2] || t.equal(entry[2], expect[i][2])) }) // t.match(entries, expect) t.end() }) }) t.test('brotli, also a very deep path', t => { const out = [] new Pack({ cwd: files, brotli: { flush: 1 }, }) .add('dir') .add('long-path') .on('data', c => out.push(c)) .end() .on('end', _ => { const zipped = Buffer.concat(out) const data = zlib.brotliDecompressSync(zipped) const entries = [] for (var i = 0; i < data.length; i += 512) { const slice = data.subarray(i, i + 512) const h = new Header(slice) if (h.nullBlock) { entries.push('null block') } else if (h.cksumValid) { entries.push([h.type, h.path]) } else if (entries.at(-1)[0] === 'File') { entries.at(-1).push(slice.toString().replace(/\0.*$/, '')) } } const expect = [ ['Directory', 'dir/'], ['Directory', 'long-path/'], ['File', 'dir/x'], ['Directory', 'long-path/r/'], ['Directory', 'long-path/r/e/'], ['Directory', 'long-path/r/e/a/'], ['Directory', 'long-path/r/e/a/l/'], ['Directory', 'long-path/r/e/a/l/l/'], ['Directory', 'long-path/r/e/a/l/l/y/'], ['Directory', 'long-path/r/e/a/l/l/y/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/'], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt', 'short\n', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', ], [ 'ExtendedHeader', 'PaxHeader/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222', ], [ 'ExtendedHeader', 'PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc', 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], ['ExtendedHeader', 'PaxHeader/Ω.txt'], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', 'Ω', ], 'null block', 'null block', ] let ok = true entries.forEach((entry, i) => { ok = ok && t.equal(entry[0], expect[i][0]) && t.equal(entry[1], expect[i][1]) && (!entry[2] || t.equal(entry[2], expect[i][2])) }) t.end() }) }) t.test('zstd, also a very deep path', t => { const out = [] new Pack({ cwd: files, zstd: { flush: 1 }, }) .add('dir') .add('long-path') .on('data', c => out.push(c)) .end() .on('end', _ => { const zipped = Buffer.concat(out) const data = zlib.zstdDecompressSync(zipped) const entries = [] for (var i = 0; i < data.length; i += 512) { const slice = data.subarray(i, i + 512) const h = new Header(slice) if (h.nullBlock) { entries.push('null block') } else if (h.cksumValid) { entries.push([h.type, h.path]) } else if (entries.at(-1)[0] === 'File') { entries.at(-1).push(slice.toString().replace(/\0.*$/, '')) } } const expect = [ ['Directory', 'dir/'], ['Directory', 'long-path/'], ['File', 'dir/x'], ['Directory', 'long-path/r/'], ['Directory', 'long-path/r/e/'], ['Directory', 'long-path/r/e/a/'], ['Directory', 'long-path/r/e/a/l/'], ['Directory', 'long-path/r/e/a/l/l/'], ['Directory', 'long-path/r/e/a/l/l/y/'], ['Directory', 'long-path/r/e/a/l/l/y/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/'], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt', 'short\n', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', ], [ 'ExtendedHeader', 'PaxHeader/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222', ], [ 'ExtendedHeader', 'PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc', 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], ['ExtendedHeader', 'PaxHeader/Ω.txt'], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', 'Ω', ], 'null block', 'null block', ] let ok = true entries.forEach((entry, i) => { ok = ok && t.equal(entry[0], expect[i][0]) && t.equal(entry[1], expect[i][1]) && (!entry[2] || t.equal(entry[2], expect[i][2])) }) t.end() }) }) t.test('very deep gzip path, sync', t => { const pack = new PackSync({ cwd: files, gzip: true, }) .add('dir') .add('long-path') .end() // these do nothing! pack.pause() pack.resume() const zipped = pack.read() t.type(zipped, Buffer) const data = zlib.unzipSync(zipped) const entries = [] for (var i = 0; i < data.length; i += 512) { const slice = data.subarray(i, i + 512) const h = new Header(slice) if (h.nullBlock) { entries.push('null block') } else if (h.cksumValid) { entries.push([h.type, h.path]) } else if (entries.at(-1)[0] === 'File') { entries.at(-1).push(slice.toString().replace(/\0.*$/, '')) } } const expect = [ ['Directory', 'dir/'], ['File', 'dir/x'], ['Directory', 'long-path/'], ['Directory', 'long-path/r/'], ['Directory', 'long-path/r/e/'], ['Directory', 'long-path/r/e/a/'], ['Directory', 'long-path/r/e/a/l/'], ['Directory', 'long-path/r/e/a/l/l/'], ['Directory', 'long-path/r/e/a/l/l/y/'], ['Directory', 'long-path/r/e/a/l/l/y/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/'], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt', 'short\n', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', ], [ 'ExtendedHeader', 'PaxHeader/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222', ], [ 'ExtendedHeader', 'PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc', 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], ['ExtendedHeader', 'PaxHeader/Ω.txt'], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', 'Ω', ], 'null block', 'null block', ] let ok = true entries.forEach((entry, i) => { ok = ok && t.equal(entry[0], expect[i][0]) && t.equal(entry[1], expect[i][1]) && (!entry[2] || t.equal(entry[2], expect[i][2])) }) // t.match(entries, expect) t.end() }) t.test('very deep brotli path, sync', t => { const pack = new PackSync({ cwd: files, brotli: true, }) .add('dir') .add('long-path') .end() // these do nothing! pack.pause() pack.resume() const zipped = pack.read() t.type(zipped, Buffer) const data = zlib.brotliDecompressSync(zipped) const entries = [] for (var i = 0; i < data.length; i += 512) { const slice = data.subarray(i, i + 512) const h = new Header(slice) if (h.nullBlock) { entries.push('null block') } else if (h.cksumValid) { entries.push([h.type, h.path]) } else if (entries.at(-1)[0] === 'File') { entries.at(-1).push(slice.toString().replace(/\0.*$/, '')) } } const expect = [ ['Directory', 'dir/'], ['File', 'dir/x'], ['Directory', 'long-path/'], ['Directory', 'long-path/r/'], ['Directory', 'long-path/r/e/'], ['Directory', 'long-path/r/e/a/'], ['Directory', 'long-path/r/e/a/l/'], ['Directory', 'long-path/r/e/a/l/l/'], ['Directory', 'long-path/r/e/a/l/l/y/'], ['Directory', 'long-path/r/e/a/l/l/y/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/'], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt', 'short\n', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', ], [ 'ExtendedHeader', 'PaxHeader/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222', ], [ 'ExtendedHeader', 'PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc', 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], ['ExtendedHeader', 'PaxHeader/Ω.txt'], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', 'Ω', ], 'null block', 'null block', ] let ok = true entries.forEach((entry, i) => { ok = ok && t.equal(entry[0], expect[i][0]) && t.equal(entry[1], expect[i][1]) && (!entry[2] || t.equal(entry[2], expect[i][2])) }) t.end() }) t.test('very deep zstd path, sync', t => { const pack = new PackSync({ cwd: files, zstd: true, }) .add('dir') .add('long-path') .end() // these do nothing! pack.pause() pack.resume() const zipped = pack.read() t.type(zipped, Buffer) const data = zlib.zstdDecompressSync(zipped) const entries = [] for (var i = 0; i < data.length; i += 512) { const slice = data.subarray(i, i + 512) const h = new Header(slice) if (h.nullBlock) { entries.push('null block') } else if (h.cksumValid) { entries.push([h.type, h.path]) } else if (entries.at(-1)[0] === 'File') { entries.at(-1).push(slice.toString().replace(/\0.*$/, '')) } } const expect = [ ['Directory', 'dir/'], ['File', 'dir/x'], ['Directory', 'long-path/'], ['Directory', 'long-path/r/'], ['Directory', 'long-path/r/e/'], ['Directory', 'long-path/r/e/a/'], ['Directory', 'long-path/r/e/a/l/'], ['Directory', 'long-path/r/e/a/l/l/'], ['Directory', 'long-path/r/e/a/l/l/y/'], ['Directory', 'long-path/r/e/a/l/l/y/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/'], ['Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/'], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', ], [ 'Directory', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt', 'short\n', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', ], [ 'ExtendedHeader', 'PaxHeader/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222', ], [ 'ExtendedHeader', 'PaxHeader/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccc', ], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccc', 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', ], ['ExtendedHeader', 'PaxHeader/Ω.txt'], [ 'File', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', 'Ω', ], 'null block', 'null block', ] let ok = true entries.forEach((entry, i) => { ok = ok && t.equal(entry[0], expect[i][0]) && t.equal(entry[1], expect[i][1]) && (!entry[2] || t.equal(entry[2], expect[i][2])) }) t.end() }) t.test('write after end', t => { const p = new Pack() p.end() t.throws(_ => p.add('nope'), new Error('write after end')) t.end() }) t.test('emit error when stat fail', t => { t.teardown(mutateFS.statFail(new Error('xyz'))) t.throws( _ => new PackSync({ cwd: files }).add('one-byte.txt'), new Error('xyz'), ) new Pack({ cwd: files }).add('one-byte.txt').on('error', e => { t.match(e, { message: 'xyz' }) t.end() }) }) t.test('readdir fail', t => { t.teardown(mutateFS.fail('readdir', new Error('xyz'))) t.throws(_ => new PackSync({ cwd: files }).add('dir'), new Error('xyz')) new Pack({ cwd: files }).add('dir').on('error', e => { t.match(e, { message: 'xyz' }) t.end() }) }) t.test('pipe into a slow reader', t => { const out = [] const mp = new Minipass() const mp2 = new Minipass() const p = new Pack({ cwd: files }).add('long-path').end() p.pause() p.pipe(mp).pipe(mp2) setTimeout(_ => { mp2.on('data', c => out.push(c)) setTimeout(_ => p.resume(), 100) }, 100) mp.on('end', _ => { const data = Buffer.concat(out) const h = new Header(data) const expect = { type: 'Directory', cksumValid: true, needPax: false, path: 'long-path/', mode: isWindows ? 0o777 : 0o755, size: 0, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, } t.match(h, expect) t.equal(data.length, 21504) t.match(data.subarray(data.length - 1024).toString(), /^\0{1024}$/) t.end() }) }) t.test('pipe into a slow gzip reader', t => { const out = [] const mp2 = new miniz.Unzip() const p = new Pack({ cwd: files, gzip: true }).add('long-path').end() p.pause() class SlowStream extends EE { write(chunk) { mp2.write(chunk) setTimeout(_ => { this.emit('drain') p.resume() }) return false } end(chunk) { return mp2.end(chunk) } } const ss = new SlowStream() setTimeout(_ => { p.pipe(ss) p.resume() }) mp2.on('data', c => out.push(c)) mp2.on('end', _ => { t.pass('mp2 end') const data = Buffer.concat(out) // dir/, dir/x, and the nulls // neither the dir or the file have any body bits const h = new Header(data) const expect = { type: 'Directory', cksumValid: true, needPax: false, path: 'long-path/', mode: isWindows ? 0o777 : 0o755, size: 0, mtime: mtime, cksum: Number, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, atime: atime, ctime: ctime, nullBlock: false, } t.match(h, expect) t.equal(data.length, 21504) t.match(data.subarray(data.length - 1024).toString(), /^\0{1024}$/) t.end() }) }) t.test('ignores mid-queue', t => { // we let the first one through, and then ignore all the others // so that we trigger the case where an ignored entry is not the // head of the queue. let didFirst = false const p = new Pack({ cwd: tars, filter: (p, _st) => { if (p === './') { return true } if (!didFirst) { return (didFirst = true) } return false }, }) const out = [] const files = fs.readdirSync(tars) p.on('data', c => out.push(c)) p.on('end', _ => { const data = Buffer.concat(out) t.equal(data.subarray(0, 100).toString().replace(/\0.*$/, ''), './') const file = data.subarray(512, 612).toString().replace(/\0.*$/, '') t.not(files.indexOf(file), -1) t.end() }) p.add('') p.end() }) t.test('warnings', t => { const f = path.resolve(files, '512-bytes.txt') t.test('preservePaths=false strict=false', t => { const warnings = [] const p = new Pack({ cwd: files, onwarn: (c, m, p) => warnings.push([c, m, p]), }) .end(f) .on('data', c => out.push(c)) const out = [] p.on('end', _ => { const data = Buffer.concat(out) t.equal(data.length, 2048) t.match(warnings, [ [ 'TAR_ENTRY_INFO', /stripping .* from absolute path/, { path: normPath(f) }, ], ]) t.match(new Header(data), { path: normPath(f).replace(/^(\/|[a-z]:\/)/i, ''), }) t.end() }) }) t.test('preservePaths=true', t => { t.plan(2) // with preservePaths, strictness doens't matter ;[true, false].forEach(strict => { t.test('strict=' + strict, t => { const warnings = [] const out = [] const p = new Pack({ cwd: files, strict: strict, preservePaths: true, onwarn: (c, m, p) => warnings.push([c, m, p]), }) .end(f) .on('data', c => out.push(c)) p.on('end', _ => { const data = Buffer.concat(out) t.equal(warnings.length, 0) t.match(new Header(data), { path: normPath(f), }) t.end() }) }) }) }) t.test('preservePaths=false strict=true', t => { new Pack({ strict: true, cwd: files, }) .end(f) .on('error', e => { t.match(e, { message: /stripping .* from absolute path/, path: normPath(f), }) t.end() }) }) t.end() }) t.test('no dir recurse', t => { const dir = path.resolve(fixtures, 'pack-no-dir-recurse') t.teardown(_ => rimraf.sync(dir)) t.beforeEach(() => { rimraf.sync(dir) mkdirp.sync(dir + '/x') fs.writeFileSync(dir + '/x/y', 'y') }) const check = (t, data) => { t.equal(data.length, 512 + 1024) t.equal(data.slice(512).toString(), new Array(1025).join('\0')) t.match(new Header(data), { type: 'Directory', path: 'x/', size: 0, }) t.end() } t.test('async', t => { const p = new Pack({ cwd: dir, noDirRecurse: true, }) const out = [] p.end('x') .on('data', c => out.push(c)) .on('end', _ => check(t, Buffer.concat(out))) }) t.test('sync', t => { const p = new PackSync({ cwd: dir, noDirRecurse: true, }) p.end('x') check(t, p.read()) }) t.end() }) t.test( 'follow', { skip: isWindows && 'file symlinks not available' }, t => { const check = (out, t) => { const data = Buffer.concat(out) t.equal(data.length, 2048) t.match(new Header(data, 0), { type: 'File', cksumValid: true, needPax: false, path: 'symlink', mode: isWindows ? 0o666 : 0o644, size: 26, }) t.match( data.subarray(512).toString(), /this link is like diamond\n\0+$/, ) t.end() } t.test('async', t => { const out = [] const p = new Pack({ cwd: files, follow: true }) p.on('data', c => out.push(c)) p.on('end', _ => check(out, t)) p.end('symlink') }) t.test('sync', t => { const out = [] const p = new PackSync({ cwd: files, follow: true }) p.on('data', c => out.push(c)) p.end('symlink') check(out, t) }) t.end() }, ) t.test('pack ReadEntries', t => { t.test('basic', t => { const readEntry = new ReadEntry( new Header({ path: 'x', type: 'File', size: 1, }), ) const p = new Pack() p.end(readEntry) const out = [] p.on('data', c => out.push(c)) p.on('end', _ => { const data = Buffer.concat(out) t.equal(data.length, 2048) t.match(data.subarray(1024).toString(), /^\0+$/) t.equal(data.subarray(0, 100).toString().replace(/\0.*$/, ''), 'x') t.equal(data.subarray(512, 514).toString(), 'x\0') t.end() }) const buf = Buffer.alloc(512) buf.write('x') readEntry.end(buf) }) t.test('prefix', t => { const readEntry = new ReadEntry( new Header({ path: 'x', type: 'File', size: 1, }), ) const p = new Pack({ prefix: 'y' }) p.end(readEntry) const out = [] p.on('data', c => out.push(c)) p.on('end', _ => { const data = Buffer.concat(out) t.equal(data.length, 2048) t.match(data.subarray(1024).toString(), /^\0+$/) t.equal(data.subarray(0, 100).toString().replace(/\0.*$/, ''), 'y/x') t.equal(data.subarray(512, 514).toString(), 'x\0') t.end() }) const buf = Buffer.alloc(512) buf.write('x') readEntry.end(buf) }) t.test('filter out', t => { const re1 = new ReadEntry( new Header({ path: 'a', type: 'File', size: 1, }), ) const re2 = new ReadEntry( new Header({ path: 'x', type: 'File', size: 1, }), ) const re3 = new ReadEntry( new Header({ path: 'y', type: 'File', size: 1, }), ) const p = new Pack({ filter: p => p === 'x' }) p.add(re1) p.add(re2) p.end(re3) const out = [] p.on('data', c => out.push(c)) p.on('end', _ => { const data = Buffer.concat(out) t.equal(data.length, 2048) t.match(data.subarray(1024).toString(), /^\0+$/) t.equal(data.subarray(0, 100).toString().replace(/\0.*$/, ''), 'x') t.equal(data.subarray(512, 514).toString(), 'x\0') t.end() }) { const buf = Buffer.alloc(512) buf.write('x') re1.end(buf) } { const buf = Buffer.alloc(512) buf.write('x') re2.end(buf) } { const buf = Buffer.alloc(512) buf.write('x') re3.end(buf) } }) t.end() }) t.test('filter out everything', t => { const filter = _ => false const check = (out, t) => { const data = Buffer.concat(out) t.equal(data.length, 1024) t.match(data.toString(), /^\0+$/) t.end() } t.test('sync', t => { const out = [] const p = new PackSync({ cwd: files, filter: filter }) p.on('data', c => out.push(c)) p.end('./') check(out, t) }) t.test('async', t => { const out = [] const p = new PackSync({ cwd: files, filter: filter }) p.on('data', c => out.push(c)) p.on('end', _ => check(out, t)) p.end('./') }) t.end() }) t.test('fs.open fails', t => { const poop = new Error('poop') t.teardown(mutateFS.fail('open', poop)) t.test('async', t => { t.plan(1) new Pack({ cwd: files }) .on('error', er => t.equal(er, poop)) .end('one-byte.txt') }) t.test('sync', t => { t.plan(1) t.throws(_ => new PackSync({ cwd: files }).end('one-byte.txt'), poop) }) t.end() }) const write = opts => new Promise((resolve, reject) => { const p = new Pack() let totalSize = 0 p.on('data', d => (totalSize += d.length)) p.once('error', reject) p.once('end', () => resolve(totalSize)) const file1 = new ReadEntry( new Header({ path: 'file1.txt', size: 5, type: 'File', }), ) if (opts.before) { file1.end('file1') p.add(file1) } else { p.add(file1) file1.end('file1') } p.end() }) t.test('padding works regardless of arite/add order', t => Promise.all([write({ before: true }), write({ before: false })]).then( res => t.equal( res[0], res[1], 'length is the same regardless of write/add order', ), ), ) t.test('prefix and subdirs', t => { const dir = path.resolve(fixtures, 'pack-prefix-subdirs') t.teardown(_ => rimraf.sync(dir)) mkdirp.sync(dir + '/in/a/b/c') fs.writeFileSync(dir + '/in/a/b/c/d', 'ddd') fs.writeFileSync(dir + '/in/a/b/d', 'ddd') fs.writeFileSync(dir + '/in/a/d', 'ddd') fs.writeFileSync(dir + '/in/d', 'ddd') const expect = [ 'out/x/\0', 'out/x/a/\0', 'out/x/d\0', 'ddd\0', 'out/x/a/b/\0', 'out/x/a/d\0', 'ddd\0', 'out/x/a/b/c/\0', 'out/x/a/b/d\0', 'ddd\0', 'out/x/a/b/c/d\0', 'ddd\0', '\0', '\0', ] const check = (out, t) => { const data = Buffer.concat(out) expect.forEach((e, i) => t.equal(e, data.subarray(i * 512, i * 512 + e.length).toString()), ) t.end() } const runTest = (t, path, Class) => { const p = new Class({ cwd: dir + '/in', prefix: 'out/x', }) const out = [] p.on('data', d => out.push(d)) p.on('end', _ => check(out, t)) p.end(path) } t.test('async', t => { t.test('.', t => runTest(t, '.', Pack)) return t.test('./', t => runTest(t, './', Pack)) }) return t.test('sync', t => { t.test('.', t => runTest(t, '.', PackSync)) return t.test('./', t => runTest(t, './', PackSync)) }) }) // https://github.com/npm/node-tar/issues/284 t.test('prefix and hard links', t => { const target = resolve(t.testdirName, 'in', 'target') const dir = t.testdir({ in: { target: 'ddd', z: { b: { c: { d: t.fixture('link', target), }, d: t.fixture('link', target), }, d: t.fixture('link', target), }, y: t.fixture('link', target), }, }) const expect = [ 'out/x/\0', { type: 'File', size: 3, path: 'out/x/target', linkpath: '', }, 'ddd\0\0\0\0\0\0\0\0\0\0\0', { path: 'out/x/y', type: 'Link', linkpath: 'out/x/target', }, 'out/x/z/\0', 'out/x/z/b/\0', { path: 'out/x/z/d', type: 'Link', linkpath: 'out/x/target', }, 'out/x/z/b/c/\0', { path: 'out/x/z/b/d', type: 'Link', linkpath: 'out/x/target', }, { path: 'out/x/z/b/c/d', type: 'Link', linkpath: 'out/x/target', }, '\0', '\0', ] const check = (out, t) => { const data = Buffer.concat(out) expect.forEach((e, i) => { if (typeof e === 'string') { t.equal(data.subarray(i * 512, i * 512 + e.length).toString(), e) } else { t.match(new Header(data.subarray(i * 512, (i + 1) * 512)), e) } }) t.end() } const runTest = (t, path, Class) => { const p = new Class({ cwd: dir + '/in', prefix: 'out/x', noDirRecurse: true, jobs: 1, }) const out = [] p.on('data', d => out.push(d)) p.on('end', () => check(out, t)) p.write(path) if (path === '.') { path = './' } p.write(`${path}target`) p.write(`${path}y`) p.write(`${path}z`) p.write(`${path}z/b`) p.write(`${path}z/d`) p.write(`${path}z/b/c`) p.write(`${path}z/b/d`) p.write(`${path}z/b/c/d`) p.end() } t.test('async', async t => { t.test('.', t => runTest(t, '.', Pack)) t.test('./', t => runTest(t, './', Pack)) }) t.test('sync', async t => { t.test('.', t => runTest(t, '.', PackSync)) t.test('./', t => runTest(t, './', PackSync)) }) t.end() }) // https://github.com/isaacs/node-tar/issues/448 t.test('aggressive async link target timing', async t => { const target = resolve(t.testdirName, 'pkgB/aaa.js') t.chdir( t.testdir({ output: {}, pkgB: { 'package.json': JSON.stringify({ name: 'pkgb', version: '1.2.3', main: './dist/index.js', }), 'aaa.js': 'console.log("hello, world")', 'index.js': t.fixture('link', target), 'foo.js': t.fixture('link', target), dist: { 'index.js': t.fixture('link', target), }, }, }), ) const { Pack } = await t.mockImport('../src/pack.js', { fs: t.createMock(fs, { // ensure that readdir is sorted, for test consistency readdir: (...args) => { const cb = args.pop() fs.readdir(...args, (er, results) => { return cb( er, results?.sort((a, b) => a.localeCompare(b, 'en')), ) }) }, // make it take longer to stat the target, so it comes in last, // even though it's typically first in the queue. lstat: (path, cb) => { if (path === target) { setTimeout(() => fs.lstat(target, cb), 200) } else { return fs.lstat(path, cb) } }, }), }) let sawFile = false let sawLinks = 0 const p = new Pack({ jobs: 999 }) .add('pkgB') .end() .pipe( new Parser({ onReadEntry(entry) { if (entry.path === 'pkgB/aaa.js') { sawFile = true t.equal(entry.type, 'File') } else if (entry.type === 'Link') { t.equal(entry.linkpath, 'pkgB/aaa.js') t.equal(sawFile, true) sawLinks++ } entry.resume() }, }), ) await new Promise(res => p.on('end', res)) t.equal(sawFile, true) t.equal(sawLinks, 3) }) // regression in PENDINGLINKS update, if only ONE hardlink is seen // it'll be treated as the "link" if not current entry, and deferred // forever. t.test('avoid permanent link deferral', async t => { const target = resolve(t.testdirName, 'externalTarget') t.chdir( t.testdir({ output: {}, externalTarget: 'hello', pkgB: { 'package.json': JSON.stringify({ name: 'pkgb', version: '1.2.3', main: './dist/index.js', }), 'aaa.js': 'console.log("hello, world")', 'index.js': t.fixture('link', target), 'foo.js': t.fixture('link', target), dist: { 'index.js': t.fixture('link', target), }, }, }), ) const { Pack } = await t.mockImport('../src/pack.js', { fs: t.createMock(fs, { // ensure that readdir is sorted, for test consistency readdir: (...args) => { const cb = args.pop() fs.readdir(...args, (er, results) => { return cb( er, results?.sort((a, b) => a.localeCompare(b, 'en')), ) }) }, // make it take longer to stat the target, so it comes in last, // even though it's typically first in the queue. lstat: (path, cb) => { if (path === target) { setTimeout(() => fs.lstat(target, cb), 200) } else { return fs.lstat(path, cb) } }, }), }) const links = new Set() const p = new Pack({ jobs: 999 }) .add('pkgB') .end() .pipe( new Parser({ onReadEntry(entry) { if (entry.type === 'Link') { links.add(entry.path) links.add(entry.linkpath) } entry.resume() }, }), ) await new Promise(res => p.on('end', res)) t.strictSame( links, new Set(['pkgB/index.js', 'pkgB/foo.js', 'pkgB/dist/index.js']), ) }) isaacs-node-tar-0a52f00/test/parse.js000066400000000000000000000630601522005272700174410ustar00rootroot00000000000000import t from 'tap' import { Parser } from '../dist/esm/parse.js' import { makeTar } from './fixtures/make-tar.js' import fs, { readFileSync } from 'fs' import path, { dirname } from 'path' import zlib from 'zlib' import { Minipass } from 'minipass' import { Header } from '../dist/esm/header.js' import EE from 'events' import { fileURLToPath } from 'url' import { Pax } from '../dist/esm/pax.js' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const tardir = path.resolve(__dirname, 'fixtures/tars') t.test('fixture tests', t => { class ByteStream extends Minipass { write(chunk) { for (let i = 0; i < chunk.length - 1; i++) { super.write(chunk.subarray(i, i + 1)) } const ret = super.write( chunk.subarray(chunk.length - 1, chunk.length), ) if (ret === false) { throw new Error('BS write return false') } return ret } } const trackEvents = (t, expect, p, slow) => { let ok = true let cursor = 0 p.on('entry', entry => { ok = ok && t.match(['entry', entry], expect[cursor++], entry.path) if (slow) { setTimeout(() => entry.resume()) } else { entry.resume() } }) p.on('ignoredEntry', entry => { ok = ok && t.match( ['ignoredEntry', entry], expect[cursor++], `ignored: ${entry.path}`, ) }) p.on('warn', (c, message, _data) => { ok = ok && t.match(['warn', c, message], expect[cursor++], 'warn') }) p.on('nullBlock', () => { ok = ok && t.match(['nullBlock'], expect[cursor++], 'null') }) p.on('error', er => { ok = ok && t.match(['error', er], expect[cursor++], 'error') }) p.on('meta', meta => { ok = ok && t.match(['meta', meta], expect[cursor++], 'meta') }) p.on('eof', () => { ok = ok && t.match(['eof'], expect[cursor++], 'eof') }) p.on('end', () => { ok = ok && t.match(['end'], expect[cursor++], 'end') t.end() }) } t.jobs = 4 const parsedir = path.resolve(__dirname, 'fixtures/parse') const files = fs.readdirSync(tardir) const maxMetaOpt = [250, undefined] const filterOpt = [true, false] const strictOpt = [true, false] const runTest = (file, maxMeta, filter, strict) => { const tardata = fs.readFileSync(file) const base = path.basename(file, '.tar') t.test( `file=${base}.tar maxmeta=${maxMeta} filter=${filter} strict=${strict}`, t => { const o = (maxMeta ? '-meta-' + maxMeta : '') + (filter ? '-filter' : '') + (strict ? '-strict' : '') const tail = (o ? '-' + o : '') + '.json' const eventsFile = parsedir + '/' + base + tail const expect = JSON.parse(readFileSync(eventsFile, 'utf8')) t.test('uncompressed one byte at a time', t => { const bs = new ByteStream() bs.on('data', c => { if (!Buffer.isBuffer(c)) throw new Error('wat1') if (c.length !== 1) throw new Error('wat2') }) const opt = maxMeta || filter || strict ? { maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, } : undefined const p = new Parser(opt) trackEvents(t, expect, p) bs.pipe(p) bs.write(tardata) bs.end() }) t.test('uncompressed all at once', t => { // this one writes it as a string const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, }) trackEvents(t, expect, p) p.end(tardata.toString('hex'), 'hex', () => {}) }) t.test('uncompressed one byte at a time, filename .tbr', t => { const bs = new ByteStream() const opt = maxMeta || filter || strict ? { maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tbr', } : undefined const bp = new Parser(opt) trackEvents(t, expect, bp) bs.pipe(bp) bs.end(tardata) }) t.test('uncompressed all at once, filename .tar.br', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tar.br', }) trackEvents(t, expect, p) p.end(tardata) }) t.test('gzipped all at once', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, }) trackEvents(t, expect, p) p.end(zlib.gzipSync(tardata), () => {}) }) t.test('gzipped all at once, filename .tbr', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tbr', }) trackEvents(t, expect, p) p.write(zlib.gzipSync(tardata), () => {}) p.end(() => {}) }) t.test('gzipped byte at a time', t => { const bs = new ByteStream() const bp = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, }) trackEvents(t, expect, bp) bs.pipe(bp) bs.end(zlib.gzipSync(tardata)) }) t.test('compress with brotli based on filename .tar.br', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tar.br', }) trackEvents(t, expect, p) p.end(zlib.brotliCompressSync(tardata)) }) t.test('compress with brotli based on filename .tbr', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tbr', }) trackEvents(t, expect, p) p.end(zlib.brotliCompressSync(tardata)) }) t.test('compress with brotli all at once', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, brotli: {}, }) trackEvents(t, expect, p) p.end(zlib.brotliCompressSync(tardata)) }) t.test('compress with brotli byte at a time', t => { const bs = new ByteStream() const bp = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, brotli: {}, }) trackEvents(t, expect, bp) bs.pipe(bp) bs.end(zlib.brotliCompressSync(tardata)) }) t.test('compress with brotli .tbr byte at a time', t => { const bs = new ByteStream() const bp = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tbr', }) trackEvents(t, expect, bp) bs.pipe(bp) bs.end(zlib.brotliCompressSync(tardata)) }) t.test('compress with zstd based on filename .tar.zst', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tar.zst', }) trackEvents(t, expect, p) p.end(zlib.zstdCompressSync(tardata)) }) t.test('compress with zstd based on filename .tzst', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tzst', }) trackEvents(t, expect, p) p.end(zlib.zstdCompressSync(tardata)) }) t.test('compress with zstd all at once', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, zstd: {}, }) trackEvents(t, expect, p) p.end(zlib.zstdCompressSync(tardata)) }) t.test('compress with zstd byte at a time', t => { const bs = new ByteStream() const bp = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, zstd: {}, }) trackEvents(t, expect, bp) bs.pipe(bp) bs.end(zlib.zstdCompressSync(tardata)) }) t.test('compress with zstd .tzst byte at a time', t => { const bs = new ByteStream() const bp = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, file: 'example.tzst', }) trackEvents(t, expect, bp) bs.pipe(bp) bs.end(zlib.zstdCompressSync(tardata)) }) t.test('async chunks', t => { const p = new Parser({ maxMetaEntrySize: maxMeta, filter: filter ? (_path, entry) => entry.size % 2 !== 0 : undefined, strict: strict, }) trackEvents(t, expect, p, true) const first = tardata.subarray(0, Math.floor(tardata.length / 2)) p.write(first.toString('hex'), 'hex') process.nextTick(() => p.end(tardata.subarray(Math.floor(tardata.length / 2))), ) }) t.end() }, ) } files .map(f => path.resolve(tardir, f)) .forEach(file => maxMetaOpt.forEach(maxMeta => strictOpt.forEach(strict => filterOpt.forEach(filter => runTest(file, maxMeta, filter, strict), ), ), ), ) t.end() }) t.test('strict warn with an error emits that error', t => { t.plan(1) const p = new Parser({ strict: true, }) p.on('error', emitted => t.equal(emitted, er)) const er = new Error('yolo') p.warn('TAR_TEST', er) }) t.test('onwarn gets added to the warn event', t => { t.plan(1) const p = new Parser({ onwarn(_code, message) { t.equal(message, 'this is fine') }, }) p.warn('TAR_TEST', 'this is fine') }) t.test('onReadEntry gets added to entry event', t => { t.plan(1) const p = new Parser({ onReadEntry: entry => t.equal(entry, 'yes hello this is dog'), }) p.emit('entry', 'yes hello this is dog') }) t.test('drain event timings', t => { let sawOndone = false const ondone = function () { sawOndone = true this.emit('prefinish') this.emit('finish') this.emit('end') this.emit('close') } // write 1 header and body, write 2 header, verify false return // wait for drain event before continuing. // write 2 body, 3 header and body, 4 header, verify false return // wait for drain event // write 4 body and null blocks const data = [ [ { path: 'one', size: 513, type: 'File', }, new Array(513).join('1'), '1', { path: 'two', size: 513, type: 'File', }, new Array(513).join('2'), '2', { path: 'three', size: 1024, type: 'File', }, ], [ new Array(513).join('3'), new Array(513).join('3'), { path: 'four', size: 513, type: 'File', }, ], [ new Array(513).join('4'), '4', { path: 'five', size: 1024, type: 'File', }, new Array(513).join('5'), new Array(513).join('5'), { path: 'six', size: 1024, type: 'File', }, new Array(513).join('6'), new Array(513).join('6'), { path: 'seven', size: 1024, type: 'File', }, new Array(513).join('7'), new Array(513).join('7'), { path: 'eight', size: 1024, type: 'File', }, new Array(513).join('8'), new Array(513).join('8'), { path: 'four', size: 513, type: 'File', }, new Array(513).join('4'), '4', { path: 'five', size: 1024, type: 'File', }, new Array(513).join('5'), new Array(513).join('5'), { path: 'six', size: 1024, type: 'File', }, new Array(513).join('6'), new Array(513).join('6'), { path: 'seven', size: 1024, type: 'File', }, new Array(513).join('7'), new Array(513).join('7'), { path: 'eight', size: 1024, type: 'File', }, new Array(513).join('8'), ], [ new Array(513).join('8'), { path: 'nine', size: 1537, type: 'File', }, new Array(513).join('9'), ], [new Array(513).join('9')], [new Array(513).join('9')], ['9'], ].map(chunks => makeTar(chunks)) const expect = [ 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'four', 'five', 'six', 'seven', 'eight', 'nine', ] class SlowStream extends EE { write() { setTimeout(() => this.emit('drain')) return false } end() { return this.write() } } let currentEntry const autoPipe = true const p = new Parser({ ondone, onReadEntry: entry => { t.equal(entry.path, expect.shift()) currentEntry = entry if (autoPipe) { setTimeout(() => entry.pipe(new SlowStream())) } }, }) data.forEach(d => { if (!t.equal(p.write(d), false, 'write should return false')) { return t.end() } }) const go = () => { const d = data.shift() if (d === undefined) { return p.end() } let paused if (currentEntry) { currentEntry.pause() paused = true } const hunklen = Math.floor(d.length / 2) const hunks = [d.subarray(0, hunklen), d.subarray(hunklen)] p.write(hunks[0]) if (currentEntry && !paused) { currentEntry.pause() paused = true } if ( !t.equal(p.write(hunks[1]), false, 'write should return false: ' + d) ) { return t.end() } p.once('drain', go) if (paused) { currentEntry.resume() } } p.once('drain', go) p.on('end', () => { t.ok(sawOndone) t.end() }) go() }) t.test('consume while consuming', t => { const data = makeTar([ { path: 'one', size: 0, type: 'File', }, { path: 'zero', size: 0, type: 'File', }, { path: 'two', size: 513, type: 'File', }, new Array(513).join('2'), '2', { path: 'three', size: 1024, type: 'File', }, new Array(513).join('3'), new Array(513).join('3'), { path: 'zero', size: 0, type: 'File', }, { path: 'zero', size: 0, type: 'File', }, { path: 'four', size: 1024, type: 'File', }, new Array(513).join('4'), new Array(513).join('4'), { path: 'zero', size: 0, type: 'File', }, { path: 'zero', size: 0, type: 'File', }, ]) const runTest = (t, size) => { const p = new Parser() const first = data.subarray(0, size) const rest = data.subarray(size) p.once('entry', _entry => { for (let pos = 0; pos < rest.length; pos += size) { p.write(rest.subarray(pos, pos + size)) } p.end() }) .on('entry', entry => entry.resume()) .on('end', () => t.end()) .write(first) } // one that aligns, and another that doesn't, so that we // get some cases where there's leftover chunk and a buffer t.test('size=1000', t => runTest(t, 1000)) t.test('size=1024', t => runTest(t, 4096)) t.end() }) t.test('truncated input', t => { const data = makeTar([ { path: 'foo/', type: 'Directory', }, { path: 'foo/bar', type: 'File', size: 18, }, ]) t.test('truncated at block boundary', t => { const warnings = [] const p = new Parser({ onwarn: (_c, message) => warnings.push(message), }) p.end(data) t.same(warnings, [ 'Truncated input (needed 512 more bytes, only 0 available)', ]) t.end() }) t.test('truncated mid-block', t => { const warnings = [] const p = new Parser({ onwarn: (_c, message) => warnings.push(message), }) p.write(data) p.end(Buffer.from('not a full block')) t.same(warnings, [ 'Truncated input (needed 512 more bytes, only 16 available)', ]) t.end() }) t.end() }) t.test('truncated gzip input', t => { const raw = makeTar([ { path: 'foo/', type: 'Directory', }, { path: 'foo/bar', type: 'File', size: 18, }, new Array(19).join('x'), '', '', ]) const tgz = zlib.gzipSync(raw) const split = Math.floor((tgz.length * 2) / 3) const trunc = tgz.subarray(0, split) const skipEarlyEnd = process.version.match(/^v4\./) t.test( 'early end', { skip: skipEarlyEnd ? 'not a zlib error on v4' : false, }, t => { const warnings = [] const p = new Parser() p.on('error', er => warnings.push(er.message)) let aborted = false p.on('abort', () => (aborted = true)) p.end(trunc) t.equal(aborted, true, 'aborted writing') t.same(warnings, ['zlib: unexpected end of file']) t.end() }, ) t.test('just wrong', t => { const warnings = [] const p = new Parser() p.on('error', er => warnings.push(er.message)) let aborted = false p.on('abort', () => (aborted = true)) p.write(trunc) p.write(trunc) p.write(tgz.subarray(split)) p.end() t.equal(aborted, true, 'aborted writing') t.match(warnings, [/^zlib: /]) t.end() }) t.end() }) t.test('end while consuming', t => { // https://github.com/npm/node-tar/issues/157 const data = zlib.gzipSync( makeTar([ { path: 'package/package.json', type: 'File', size: 130, }, new Array(131).join('x'), { path: 'package/node_modules/@c/d/node_modules/e/package.json', type: 'File', size: 30, }, new Array(31).join('e'), { path: 'package/node_modules/@c/d/package.json', type: 'File', size: 33, }, new Array(34).join('d'), { path: 'package/node_modules/a/package.json', type: 'File', size: 59, }, new Array(60).join('a'), { path: 'package/node_modules/b/package.json', type: 'File', size: 30, }, new Array(31).join('b'), '', '', ]), ) const actual = [] const expect = [ 'package/package.json', 'package/node_modules/@c/d/node_modules/e/package.json', 'package/node_modules/@c/d/package.json', 'package/node_modules/a/package.json', 'package/node_modules/b/package.json', ] const mp = new Minipass() const p = new Parser({ onReadEntry: entry => { actual.push(entry.path) entry.resume() }, onwarn: (c, m, data) => t.fail(`${c}: ${m}`, data), }) p.on('end', () => { t.same(actual, expect) t.end() }) mp.end(data) mp.pipe(p) }) t.test('bad archives', t => { const p = new Parser() const warnings = [] p.on('warn', (code, msg, data) => { warnings.push([code, msg, data]) }) p.on('end', () => { // last one should be 'this archive sucks' t.match(warnings.pop(), [ 'TAR_BAD_ARCHIVE', 'Unrecognized archive format', { code: 'TAR_BAD_ARCHIVE', tarCode: 'TAR_BAD_ARCHIVE' }, ]) t.end() }) // javascript test is not a tarball. p.end(fs.readFileSync(__filename)) }) t.test('header that throws', t => { const p = new Parser() p.on('warn', (_c, m, d) => { t.equal(m, 'invalid base256 encoding') t.match(d, { code: 'TAR_ENTRY_INVALID', }) t.end() }) const h = new Header({ path: 'path', mode: 0o07777, // gonna make this one invalid uid: 1234, gid: 4321, type: 'File', size: 1, }) h.encode() const buf = h.block const bad = Buffer.from([0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]) bad.copy(buf, 100) t.throws(() => new Header(buf), 'the header with that buffer throws') p.write(buf) }) t.test('warnings that are not so bad', t => { const p = new Parser() const warnings = [] p.on('warn', (code, m, d) => { warnings.push([code, m, d]) t.fail('should get no warnings') }) // the parser doesn't actually decide what's "ok" or "supported", // it just parses. So we have to set it ourselves like unpack does p.once('entry', entry => (entry.invalid = true)) p.on('entry', entry => entry.resume()) const data = makeTar([ { path: '/a/b/c', type: 'File', size: 1, }, 'a', { path: 'a/b/c', type: 'Directory', }, '', '', ]) p.on('end', () => { t.same(warnings, []) t.end() }) p.end(data) }) // verify that node-tar is not vulnerable to tarmageddon attack // https://edera.dev/stories/tarmageddon t.test('tarmageddon', t => { // this is the nested tarball that will be inside the archive const nested = makeTar([ { path: 'one', size: 1, type: 'File', }, '1', ]) // gutcheck t.equal(nested.byteLength, 1024) // Expect this one to have 2 entries. // First a zero-length nested.tar, then the 'one' file. t.test('no pax, 2 entries', t => { const noPax = makeTar([ { path: 'nested.tar', size: 0, }, nested, '', '', ]) const expect = [ { size: 0, path: 'nested.tar' }, { size: 1, path: 'one' }, ] const actual = [] const p = new Parser() p.on('entry', e => { e.resume() actual.push({ size: e.size, path: e.path, }) }) p.on('end', () => { t.strictSame(actual, expect) t.end() }) p.end(noPax) }) t.test('with pax, 1 entry', async t => { // when there is a Pax header, that size overrides the size in // the ustar header block. const withPax = makeTar([ new Pax({ path: 'nested.tar', // actual size of nested tarball, 1024 bytes size: nested.byteLength, }).encode(), { path: 'nested.tar', // fake size, attempting to unpack tar's contents directly size: 0, }, nested, ]) // expect a single 1024 byte file entry to be emitted const expect = [{ size: 1024, path: 'nested.tar' }] const actual = [] const p = new Parser() p.on('entry', e => { actual.push({ size: e.size, path: e.path, }) e.resume() }) p.on('end', () => { t.strictSame(actual, expect) t.end() }) p.end(withPax) }) t.end() }) t.test('max decompression ratio', async t => { const makeCompressedBomb = () => { const payload = Buffer.alloc(8 * 1024 * 1024) return zlib.gzipSync( makeTar([ { path: 'bomb', size: payload.length, type: 'File', }, payload, '', '', ]), ) } const bomb = makeCompressedBomb() t.test('parsing aborts by default', async t => { const p = new Parser({}) t.throws( () => p.end(bomb), { tarCode: 'TAR_ABORT', recoverable: false, message: /max decompression ratio exceeded/, }, 'parsing aborts', ) // no-op to abort again p.abort(new Error('hello')) }) t.test('aborting only happens one time', t => { const p = new Parser({}) t.throws(() => p.abort(new Error('hello')), { message: 'hello', tarCode: 'TAR_ABORT', recoverable: false, }) // this is ignored p.end(bomb) t.end() }) t.test('parsing can disable the limit explicitly', async () => { let bytesRead = 0 await new Promise(res => new Parser({ maxDecompressionRatio: Infinity, onReadEntry(e) { e.on('data', c => (bytesRead += c.byteLength)) }, }) .on('end', res) .end(bomb) .resume(), ) t.equal(bytesRead, 8 * 1024 * 1024) }) t.end() }) isaacs-node-tar-0a52f00/test/path-reservations.js000066400000000000000000000104641522005272700220050ustar00rootroot00000000000000import t from 'tap' import { posix, win32 } from 'node:path' // load up the posix and windows versions of the reserver if (process.platform === 'win32') { process.env.TESTING_TAR_FAKE_PLATFORM = 'posix' } const { PathReservations } = await t.mockImport( '../dist/esm/path-reservations.js', { path: posix, }, ) delete process.env.TESTING_TAR_FAKE_PLATFORM if (process.platform !== 'win32') { process.env.TESTING_TAR_FAKE_PLATFORM = 'win32' } const { PathReservations: WinPathReservations } = await t.mockImport( '../dist/esm/path-reservations.js', { path: win32, }, ) t.test('basic race', t => { // simulate the race conditions we care about let didFile = false const file = done => { t.equal(didFile, false, 'only call file once') didFile = true t.equal(didLink, false, 'do file before link') setTimeout(done) } let didLink = false const link = done => { t.equal(didLink, false, 'only call once') t.equal(didFile, true, 'do file before link') didLink = true // make sure this one is super duper cleared lol // the subsequent calls are no-ops, but verify as much done() done() done() } let didDir = false const dir = done => { t.equal(didDir, false, 'only do dir once') t.equal(didLink, true, 'do link before dir') didDir = true done() } let didDir2 = false const dir2 = done => { t.equal(didDir, true, 'did dir before dir2') t.equal(didDir2, false, 'only do dir2 once') didDir2 = true done() } let didDir3 = false const dir3 = done => { t.equal(didDir2, true, 'did dir2 before dir3') t.equal(didDir3, false, 'only do dir3 once') didDir3 = true done() t.end() } const r = new PathReservations() t.ok(r.reserve(['a/b/c/d'], file), 'file starts right away') t.notOk(r.reserve(['a/B/c////D', 'a/b/e'], link), 'link waits') t.notOk(r.reserve(['a/b/e/f'], dir), 'dir waits') t.notOk(r.reserve(['a/b'], dir2), 'dir2 waits') t.notOk(r.reserve(['a/b/x'], dir3), 'dir3 waits') }) t.test('unicode shenanigans', t => { const e1 = Buffer.from([0xc3, 0xa9]) const e2 = Buffer.from([0x65, 0xcc, 0x81]) let didCafe1 = false const cafe1 = done => { t.equal(didCafe1, false, 'did cafe1 only once') t.equal(didCafe2, false, 'did cafe1 before cafe2') didCafe1 = true setTimeout(done) } let didCafe2 = false const cafe2 = done => { t.equal(didCafe1, true, 'did cafe1 before cafe2') t.equal(didCafe2, false, 'did cafe2 only once') didCafe2 = true done() t.end() } const cafePath1 = `c/a/f/${e1}` const cafePath2 = `c/a/f/${e2}` const r = new PathReservations() t.ok(r.reserve([cafePath1], cafe1)) t.notOk(r.reserve([cafePath2], cafe2)) }) t.test('absolute paths and trailing slash', t => { let calledA1 = false let calledA2 = false const a1 = done => { t.equal(calledA1, false, 'called a1 only once') t.equal(calledA2, false, 'called a1 before 2') calledA1 = true setTimeout(done) } const a2 = done => { t.equal(calledA1, true, 'called a1 before 2') t.equal(calledA2, false, 'called a2 only once') calledA2 = true done() if (calledR2) { t.end() } } let calledR1 = false let calledR2 = false const r1 = done => { t.equal(calledR1, false, 'called r1 only once') t.equal(calledR2, false, 'called r1 before 2') calledR1 = true setTimeout(done) } const r2 = done => { t.equal(calledR1, true, 'called r1 before 2') t.equal(calledR2, false, 'called r1 only once') calledR2 = true done() if (calledA2) { t.end() } } const r = new PathReservations() t.ok(r.reserve(['/p/a/t/h'], a1)) t.notOk(r.reserve(['/p/a/t/h/'], a2)) t.ok(r.reserve(['p/a/t/h'], r1)) t.notOk(r.reserve(['p/a/t/h/'], r2)) }) t.test('on windows, everything collides with everything', t => { const r = new WinPathReservations() let called1 = false let called2 = false const f1 = done => { t.equal(called1, false, 'only call 1 once') t.equal(called2, false, 'call 1 before 2') called1 = true setTimeout(done) } const f2 = done => { t.equal(called1, true, 'call 1 before 2') t.equal(called2, false, 'only call 2 once') called2 = true done() t.end() } t.equal(r.reserve(['some/path'], f1), true) t.equal(r.reserve(['other/path'], f2), false) }) isaacs-node-tar-0a52f00/test/pax.js000066400000000000000000000252431522005272700171200ustar00rootroot00000000000000import t from 'tap' import { Pax } from '../dist/esm/pax.js' t.test('create a pax', t => { const p = new Pax({ atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('1979-07-01T19:10:00.000Z'), mtime: new Date('1979-07-01T19:10:00.000Z'), gid: 20, gname: 'staff', uid: 24561, uname: 'isaacs', path: 'foo.txt', size: 100, dev: 123456, ino: 7890, nlink: 1, }) const buf = Buffer.from( // pax entry header '5061784865616465722f666f6f2e747874000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303036343420003035373736312000303030303234200030303030' + '3030303330342000323136373231373631302000303136373332200078000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030306973616163730000000000000000000000000000000000' + '0000000000000000007374616666000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000032313637' + '3231373631302000323136373231373631302000000000000000000000000000' + // entry body '313620706174683d666f6f2e7478740a3139206374696d653d32393937303432' + '30300a3139206174696d653d3239393730343230300a323120534348494c592e' + '6465763d3132333435360a313920534348494c592e696e6f3d373839300a3138' + '20534348494c592e6e6c696e6b3d310a39206769643d32300a313520676e616d' + '653d73746166660a3139206d74696d653d3239393730343230300a3132207369' + '7a653d3130300a3133207569643d32343536310a313620756e616d653d697361' + '6163730a00000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ) const actual = p.encode() t.match(actual, buf) t.end() }) t.test('null pax', t => { const p = new Pax({}) t.same(p.encode(), Buffer.allocUnsafe(0)) t.end() }) t.test('tiny pax', t => { // weird to have a global setting a path. Maybe this should be // an error? const p = new Pax({ path: 'ab' }, true) const actual = p.encode() const buf = Buffer.from( // header '5061784865616465722f61620000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000030303036343420000000000000000000000000000000000030303030' + '3030303031332000000000000000000000000000303037303534200067000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0075737461720030300000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000003030303030302000303030303030200000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + // body // note that a 2-char path is 11, but a 1 char path is 9, because // adding the second char bumps the n to 10, which adds 1, which // means it has to be 11. // a 1-char path COULD be encoded as EITHER "10 path=x\n", or as // "9 path=x\n", and it'd be true either way. '313120706174683d61620a000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', 'hex', ) t.same(actual, buf) t.end() }) t.test('parse', t => { const p = Pax.parse('11 path=ab\n', { uid: 24561 }, true) t.same( p, Object.assign(Object.create(Pax.prototype), { atime: undefined, mode: undefined, charset: undefined, comment: undefined, ctime: undefined, gid: undefined, gname: undefined, linkpath: undefined, mtime: undefined, path: 'ab', size: undefined, uid: 24561, uname: undefined, dev: undefined, ino: undefined, nlink: undefined, global: true, }), ) t.same( Pax.parse('11 path=ab\n'), Object.assign(Object.create(Pax.prototype), { atime: undefined, mtime: undefined, ctime: undefined, charset: undefined, comment: undefined, gid: undefined, gname: undefined, linkpath: undefined, path: 'ab', size: undefined, mode: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, nlink: undefined, global: false, }), ) t.same(Pax.parse('9 gid=20\n9 path=x\n'), { atime: undefined, ctime: undefined, charset: undefined, comment: undefined, gid: 20, gname: undefined, linkpath: undefined, mtime: undefined, path: 'x', size: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, nlink: undefined, mode: undefined, global: false, }) t.same(Pax.parse('9 gid=20\n9 path=x\n'), { atime: undefined, charset: undefined, comment: undefined, ctime: undefined, gid: 20, gname: undefined, linkpath: undefined, mtime: undefined, path: 'x', size: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, mode: undefined, nlink: undefined, global: false, }) // test that null just safely terminates the value t.same(Pax.parse('12 path=x\0y\n'), { atime: undefined, charset: undefined, comment: undefined, ctime: undefined, gid: undefined, gname: undefined, linkpath: undefined, mtime: undefined, path: 'x', size: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, mode: undefined, nlink: undefined, global: false, }) t.same(Pax.parse('20 mtime=1491436800\n'), { atime: undefined, charset: undefined, comment: undefined, ctime: undefined, gid: undefined, gname: undefined, linkpath: undefined, mtime: new Date('2017-04-06'), path: undefined, size: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, nlink: undefined, mode: undefined, global: false, }) const breaky = '93 NODETAR.package.readme=karma-moment\n' + '=================\n' + '\n' + 'Karma plugin for Moment framework\n' + '\n' const noKey = '10 =pathx\n' t.same(Pax.parse(breaky + '9 gid=20\n10 path=x\n' + noKey), { atime: undefined, charset: undefined, comment: undefined, ctime: undefined, gid: 20, gname: undefined, linkpath: undefined, mtime: undefined, path: 'x', size: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, nlink: undefined, mode: undefined, global: false, }) t.end() }) t.test('string fields stay string', t => { t.same( Pax.parse( '14 path=12345\n18 linkpath=54321\n13 WAT=12345\n15 ctime=12345\n', ), { atime: undefined, charset: undefined, comment: undefined, ctime: new Date('1970-01-01T03:25:45.000Z'), gid: undefined, gname: undefined, linkpath: '54321', mtime: undefined, path: '12345', size: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, mode: undefined, nlink: undefined, global: false, }, ) t.end() }) t.test('no negative size', t => { t.same(Pax.parse('14 size=-1000\n'), { atime: undefined, charset: undefined, comment: undefined, ctime: undefined, gid: undefined, gname: undefined, linkpath: undefined, mtime: undefined, path: undefined, size: undefined, uid: undefined, uname: undefined, dev: undefined, ino: undefined, mode: undefined, nlink: undefined, global: false, }) t.same(Pax.parse('13 size=1000\n'), { atime: undefined, charset: undefined, comment: undefined, ctime: undefined, gid: undefined, gname: undefined, linkpath: undefined, mtime: undefined, path: undefined, size: 1000, uid: undefined, uname: undefined, dev: undefined, ino: undefined, mode: undefined, nlink: undefined, global: false, }) t.end() }) isaacs-node-tar-0a52f00/test/process-umask.ts000066400000000000000000000001461522005272700211310ustar00rootroot00000000000000import t from 'tap' import { umask } from '../src/process-umask.js' t.equal(umask(), process.umask()) isaacs-node-tar-0a52f00/test/read-entry.js000066400000000000000000000156471522005272700204110ustar00rootroot00000000000000import t from 'tap' import { ReadEntry } from '../dist/esm/read-entry.js' import { Header } from '../dist/esm/header.js' t.test('create read entry', t => { const h = new Header({ path: 'oof.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), type: 'File', uname: 'isaacs', gname: 'staff', }) h.encode() const entry = new ReadEntry( h, { x: 'y', path: 'foo.txt' }, { z: 0, a: null, b: undefined }, ) t.ok(entry.header.cksumValid, 'header checksum should be valid') t.match(entry, { extended: { x: 'y', path: 'foo.txt' }, globalExtended: { z: 0, a: null, b: undefined }, header: { cksumValid: true, needPax: false, path: 'oof.txt', mode: 0o755, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00:00.000Z'), typeKey: '0', type: 'File', linkpath: null, uname: 'isaacs', gname: 'staff', devmaj: 0, devmin: 0, atime: new Date('2016-04-01T22:00:00.000Z'), ctime: new Date('2016-04-01T22:00:00.000Z'), }, blockRemain: 512, remain: 100, type: 'File', meta: false, ignore: false, path: 'foo.txt', mode: 0o755, uid: 24561, gid: 20, uname: 'isaacs', gname: 'staff', size: 100, mtime: new Date('2016-04-01T22:00:00.000Z'), atime: new Date('2016-04-01T22:00:00.000Z'), ctime: new Date('2016-04-01T22:00:00.000Z'), linkpath: null, x: 'y', z: 0, }) let data = '' let ended = false entry.on('data', c => (data += c)) entry.on('end', _ => (ended = true)) const body = Buffer.alloc(512) body.write(new Array(101).join('z'), 0) entry.write(body) entry.end() t.equal(data, new Array(101).join('z')) t.ok(ended, 'saw end event') t.end() }) t.test('entry with extended linkpath', t => { const h = new Header({ path: 'oof.txt', mode: 0o755, uid: 24561, gid: 20, size: 0, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), type: 'SymbolicLink', uname: 'isaacs', gname: 'staff', }) h.encode() const entry = new ReadEntry( h, { x: 'y', linkpath: 'bar.txt', path: 'foo.txt' }, { z: 0, a: null, b: undefined }, ) t.ok(entry.header.cksumValid, 'header checksum should be valid') t.match(entry, { extended: { x: 'y', path: 'foo.txt', linkpath: 'bar.txt' }, globalExtended: { z: 0, a: null, b: undefined }, header: { cksumValid: true, needPax: false, path: 'oof.txt', mode: 0o755, uid: 24561, gid: 20, size: 0, mtime: new Date('2016-04-01T22:00:00.000Z'), typeKey: '2', type: 'SymbolicLink', linkpath: null, uname: 'isaacs', gname: 'staff', devmaj: 0, devmin: 0, atime: new Date('2016-04-01T22:00:00.000Z'), ctime: new Date('2016-04-01T22:00:00.000Z'), }, blockRemain: 0, remain: 0, type: 'SymbolicLink', meta: false, ignore: false, path: 'foo.txt', mode: 0o755, uid: 24561, gid: 20, uname: 'isaacs', gname: 'staff', size: 0, mtime: new Date('2016-04-01T22:00:00.000Z'), atime: new Date('2016-04-01T22:00:00.000Z'), ctime: new Date('2016-04-01T22:00:00.000Z'), linkpath: 'bar.txt', x: 'y', z: 0, }) let data = '' entry.on('data', c => (data += c)) const body = Buffer.alloc(512) body.write(new Array(101).join('z'), 0) t.throws(() => entry.write(body)) entry.end() t.equal(data, '') t.end() }) t.test('meta entry', t => { const h = new Header({ path: 'PaxHeader/foo.txt', mode: 0o755, uid: 24561, gid: 20, size: 23, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), type: 'NextFileHasLongLinkpath', uname: 'isaacs', gname: 'staff', }) const body = Buffer.alloc(512) body.write('not that long, actually') const expect = 'not that long, actually' let actual = '' const entry = new ReadEntry(h) entry.on('data', c => (actual += c)) entry.write(body.subarray(0, 1)) entry.write(body.subarray(1, 25)) entry.write(body.subarray(25)) t.throws(_ => entry.write(Buffer.alloc(1024))) t.equal(actual, expect) t.match(entry, { meta: true, type: 'NextFileHasLongLinkpath' }) t.end() }) t.test('unknown entry type', t => { const h = new Header({ path: 'PaxHeader/foo.txt', mode: 0o755, uid: 24561, gid: 20, size: 23, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), uname: 'isaacs', gname: 'staff', }) h.encode() // this triggers its type to be Unsupported, which means that any // data written to it will be thrown away. h.block.write('9', 156, 1, 'ascii') const body = Buffer.alloc(512) body.write('not that long, actually') const expect = '' let actual = '' const entry = new ReadEntry(new Header(h.block)) entry.on('data', c => (actual += c)) entry.write(body.subarray(0, 1)) entry.write(body.subarray(1, 25)) entry.write(body.subarray(25)) t.throws(() => entry.write(Buffer.alloc(1024))) t.equal(actual, expect) t.match(entry, { ignore: true }) t.end() }) t.test('entry without mode', t => { const h = new Header({ path: 'foo.txt', uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00Z'), ctime: new Date('2016-04-01T22:00Z'), atime: new Date('2016-04-01T22:00Z'), type: 'File', uname: 'isaacs', gname: 'staff', }) h.encode() const entry = new ReadEntry(h) t.ok(entry.header.cksumValid, 'header checksum should be valid') t.match(entry, { header: { cksumValid: true, needPax: false, path: 'foo.txt', mode: null, uid: 24561, gid: 20, size: 100, mtime: new Date('2016-04-01T22:00:00.000Z'), typeKey: '0', type: 'File', linkpath: null, uname: 'isaacs', gname: 'staff', devmaj: 0, devmin: 0, atime: new Date('2016-04-01T22:00:00.000Z'), ctime: new Date('2016-04-01T22:00:00.000Z'), }, blockRemain: 512, remain: 100, type: 'File', meta: false, ignore: false, path: 'foo.txt', mode: null, uid: 24561, gid: 20, uname: 'isaacs', gname: 'staff', size: 100, mtime: new Date('2016-04-01T22:00:00.000Z'), atime: new Date('2016-04-01T22:00:00.000Z'), ctime: new Date('2016-04-01T22:00:00.000Z'), linkpath: null, }) let data = '' let ended = false entry.on('data', c => (data += c)) entry.on('end', _ => (ended = true)) const body = Buffer.alloc(512) body.write(new Array(101).join('z'), 0) entry.write(body) entry.end() t.equal(data, new Array(101).join('z')) t.ok(ended, 'saw end event') t.end() }) isaacs-node-tar-0a52f00/test/replace.ts000066400000000000000000000273361522005272700177620ustar00rootroot00000000000000import type { Test } from 'tap' import t from 'tap' import { replace as r } from '../dist/esm/replace.js' import path, { dirname, resolve } from 'path' import fs from 'fs' //@ts-ignore import mutateFS from 'mutate-fs' import { list } from '../dist/esm/list.js' import { fileURLToPath } from 'url' import zlib from 'zlib' import { spawn } from 'child_process' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const fixtures = path.resolve(__dirname, 'fixtures') const tars = path.resolve(fixtures, 'tars') const data = fs.readFileSync(tars + '/body-byte-counts.tar') const dataNoNulls = data.subarray(0, data.length - 1024) const fixtureDef = { 'body-byte-counts.tar': data, 'no-null-eof.tar': dataNoNulls, 'truncated-head.tar': Buffer.concat([ dataNoNulls, data.subarray(0, 500), ]), 'truncated-body.tar': Buffer.concat([ dataNoNulls, data.subarray(0, 700), ]), 'zero.tar': Buffer.from(''), 'empty.tar': Buffer.alloc(512), 'compressed.tgz': zlib.gzipSync(data), 'compressed.tbr': zlib.brotliCompressSync(data), 'compressed.tzst': zlib.zstdCompressSync(data), } t.test('basic file add to archive (good or truncated)', t => { const check = (file: string, t: Test) => { const c = spawn('tar', ['tf', file], { stdio: [0, 'pipe', 2] }) const out: Buffer[] = [] c.stdout?.on('data', (chunk: Buffer) => out.push(chunk)) c.on('close', (code, signal) => { t.equal(code, 0) t.equal(signal, null) const actual = Buffer.concat(out).toString().trim().split(/\r?\n/) t.same(actual, [ '1024-bytes.txt', '512-bytes.txt', 'one-byte.txt', 'zero-byte.txt', path.basename(__filename), ]) t.end() }) } const files: (keyof typeof fixtureDef)[] = [ 'body-byte-counts.tar', 'no-null-eof.tar', 'truncated-head.tar', 'truncated-body.tar', ] const td = Object.fromEntries(files.map(f => [f, fixtureDef[f]])) const fileList = [path.basename(__filename)] t.test('sync', t => { t.plan(files.length) const dir = t.testdir(td) for (const file of files) { t.test(file, t => { r( { sync: true, file: resolve(dir, file), cwd: __dirname, }, fileList, ) check(resolve(dir, file), t) }) } }) t.test('async cb', t => { t.plan(files.length) const dir = t.testdir(td) for (const file of files) { t.test(file, t => { r( { file: resolve(dir, file), cwd: __dirname, }, fileList, er => { if (er) { throw er } check(resolve(dir, file), t) }, ) }) } }) t.test('async', t => { t.plan(files.length) const dir = t.testdir(td) for (const file of files) { t.test(file, t => { r( { file: resolve(dir, file), cwd: __dirname, }, fileList, ).then(() => { check(resolve(dir, file), t) }) }) } }) t.end() }) t.test('add to empty archive', t => { const check = (file: string, t: Test) => { const c = spawn('tar', ['tf', file]) const out: Buffer[] = [] c.stdout.on('data', (chunk: Buffer) => out.push(chunk)) c.on('close', (code, signal) => { t.equal(code, 0) t.equal(signal, null) const actual = Buffer.concat(out).toString().trim().split('\n') t.same(actual, [path.basename(__filename)]) t.end() }) } const files: (keyof typeof fixtureDef)[] = ['empty.tar', 'zero.tar'] const td = Object.fromEntries(files.map(f => [f, fixtureDef[f]])) //@ts-ignore files.push('not-existing.tar') t.test('sync', t => { const dir = t.testdir(td) t.plan(files.length) for (const file of files) { t.test(file, t => { r( { sync: true, file: resolve(dir, file), cwd: __dirname, }, [path.basename(__filename)], ) check(resolve(dir, file), t) }) } }) t.test('async cb', t => { const dir = t.testdir(td) t.plan(files.length) for (const file of files) { t.test(file, t => { r( { file: resolve(dir, file), cwd: __dirname, }, [path.basename(__filename)], er => { if (er) { throw er } check(resolve(dir, file), t) }, ) }) } }) t.test('async', async t => { const dir = t.testdir(td) t.plan(files.length) for (const file of files) { t.test(file, t => { r( { file: resolve(dir, file), cwd: __dirname, }, [path.basename(__filename)], ).then(() => { check(resolve(dir, file), t) }) }) } }) t.end() }) t.test('cannot append to gzipped archives', async t => { const dir = t.testdir({ 'compressed.tgz': fixtureDef['compressed.tgz'], }) const file = resolve(dir, 'compressed.tgz') const expect = new Error('cannot append to compressed archives') const expectT = new TypeError('cannot append to compressed archives') t.throws( () => r( { file, cwd: __dirname, gzip: true, }, [path.basename(__filename)], ), expectT, ) t.throws( () => r( { file, cwd: __dirname, sync: true, }, [path.basename(__filename)], ), expect, ) return r( { file, cwd: __dirname, }, [path.basename(__filename)], er => t.match(er, expect), ) }) t.test('cannot append to brotli compressed archives', async t => { const dir = t.testdir({ 'compressed.tbr': fixtureDef['compressed.tbr'], }) const file = resolve(dir, 'compressed.tbr') const expect = new Error('cannot append to compressed archives') const expectT = new TypeError('cannot append to compressed archives') t.throws( () => r( { file, cwd: __dirname, brotli: true, }, [path.basename(__filename)], ), expectT, ) t.throws( () => r( { file, cwd: __dirname, sync: true, }, [path.basename(__filename)], ), expect, ) t.end() }) t.test('cannot append to zstd compressed archives', async t => { const dir = t.testdir({ 'compressed.tbr': fixtureDef['compressed.tzst'], }) const file = resolve(dir, 'compressed.tzst') const expect = new Error('cannot append to compressed archives') const expectT = new TypeError('cannot append to compressed archives') t.throws( () => r( { file, cwd: __dirname, zstd: true, }, [path.basename(__filename)], ), expectT, ) t.end() }) t.test('other throws', t => { t.throws(() => r({}, ['asdf']), new TypeError('file is required')) t.throws( () => r({ file: 'asdf' }, []), new TypeError('no paths specified to add/replace'), ) t.end() }) t.test('broken open', t => { const dir = t.testdir({ 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], }) const file = resolve(dir, 'body-byte-counts.tar') const poop = new Error('poop') t.teardown(mutateFS.fail('open', poop)) t.throws(() => r({ sync: true, file }, ['README.md']), poop) r({ file }, ['README.md'], er => { t.match(er, poop) t.end() }) }) t.test('broken fstat', t => { const td = { 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], } const poop = new Error('poop') t.test('sync', t => { const dir = t.testdir(td) const file = resolve(dir, 'body-byte-counts.tar') t.teardown(mutateFS.fail('fstat', poop)) t.throws(() => r({ sync: true, file }, ['README.md']), poop) t.end() }) t.test('async', t => { const dir = t.testdir(td) const file = resolve(dir, 'body-byte-counts.tar') t.teardown(mutateFS.fail('fstat', poop)) r({ file }, ['README.md'], async er => { t.match(er, poop) t.end() }) }) t.end() }) t.test('broken read', t => { const dir = t.testdir({ 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], }) const file = resolve(dir, 'body-byte-counts.tar') const poop = new Error('poop') t.teardown(mutateFS.fail('read', poop)) t.throws(() => r({ sync: true, file }, ['README.md']), poop) r({ file }, ['README.md'], er => { t.match(er, poop) t.end() }) }) t.test('mtime cache', async t => { const td = { 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], } let mtimeCache: Map const check = (file: string, t: Test) => { const c = spawn('tar', ['tf', file]) const out: Buffer[] = [] c.stdout.on('data', chunk => out.push(chunk)) c.on('close', (code, signal) => { t.equal(code, 0) t.equal(signal, null) const actual = Buffer.concat(out).toString().trim().split(/\r?\n/) t.same(actual, [ '1024-bytes.txt', '512-bytes.txt', 'one-byte.txt', 'zero-byte.txt', path.basename(__filename), ]) const mtc: Record = {} mtimeCache.forEach( (_v, k) => (mtc[k] = mtimeCache.get(k)!.toISOString()), ) t.same(mtc, { '1024-bytes.txt': '2017-04-10T16:57:47.000Z', '512-bytes.txt': '2017-04-10T17:08:55.000Z', 'one-byte.txt': '2017-04-10T16:58:20.000Z', 'zero-byte.txt': '2017-04-10T17:08:01.000Z', }) t.end() }) } t.test('sync', t => { const dir = t.testdir(td) const file = resolve(dir, 'body-byte-counts.tar') r( { sync: true, file, cwd: __dirname, mtimeCache: (mtimeCache = new Map()), }, [path.basename(__filename)], ) check(file, t) }) t.test('async cb', t => { const dir = t.testdir(td) const file = resolve(dir, 'body-byte-counts.tar') r( { file, cwd: __dirname, mtimeCache: (mtimeCache = new Map()), }, [path.basename(__filename)], er => { if (er) { throw er } check(file, t) }, ) }) t.test('async promise', t => { const dir = t.testdir(td) const file = resolve(dir, 'body-byte-counts.tar') r( { file, cwd: __dirname, mtimeCache: (mtimeCache = new Map()), }, [path.basename(__filename)], ).then(_ => check(file, t)) }) t.end() }) t.test('create tarball out of another tarball', t => { const td = { 'out.tar': fs.readFileSync(path.resolve(tars, 'dir.tar')), } const check = (out: string, t: Test) => { const expect = [ 'dir/', 'Ω.txt', '🌟.txt', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', ] list({ f: out, sync: true, onReadEntry: entry => { t.equal(entry.path, expect.shift()) }, }) t.same(expect, []) t.end() } t.test('sync', t => { const dir = t.testdir(td) const out = resolve(dir, 'out.tar') r( { f: out, cwd: tars, sync: true, }, ['@utf8.tar'], ) check(out, t) }) t.test('async cb', t => { const dir = t.testdir(td) const out = resolve(dir, 'out.tar') r( { f: out, cwd: tars, }, ['@utf8.tar'], er => { if (er) { throw er } check(out, t) }, ) }) t.test('async', t => { const dir = t.testdir(td) const out = resolve(dir, 'out.tar') r( { f: out, cwd: tars, }, ['@utf8.tar'], ).then(() => check(out, t)) }) t.end() }) isaacs-node-tar-0a52f00/test/strip-absolute-path.js000066400000000000000000000033001522005272700222250ustar00rootroot00000000000000import t from 'tap' import { stripAbsolutePath } from '../dist/esm/strip-absolute-path.js' import realPath from 'node:path' const cwd = process.cwd() t.test('basic', t => { const cases = { '/': ['/', ''], '////': ['////', ''], 'c:///a/b/c': ['c:///', 'a/b/c'], '\\\\foo\\bar\\baz': ['\\\\foo\\bar\\', 'baz'], '//foo//bar//baz': ['//', 'foo//bar//baz'], 'c:\\c:\\c:\\c:\\\\d:\\e/f/g': ['c:\\c:\\c:\\c:\\\\d:\\', 'e/f/g'], } for (const [input, [root, stripped]] of Object.entries(cases)) { t.strictSame(stripAbsolutePath(input, cwd), [root, stripped], input) } t.end() }) t.test('drive-local paths', async t => { const env = process.env t.teardown(() => (process.env = env)) const cwd = 'D:\\safety\\land' // be windowsy const path = { ...realPath.win32, win32: realPath.win32, posix: realPath.posix, } const { stripAbsolutePath } = await t.mockImport( '../dist/esm/strip-absolute-path.js', { path }, ) const cases = { '/': ['/', ''], '////': ['////', ''], 'c:///a/b/c': ['c:///', 'a/b/c'], '\\\\foo\\bar\\baz': ['\\\\foo\\bar\\', 'baz'], '//foo//bar//baz': ['//', 'foo//bar//baz'], 'c:\\c:\\c:\\c:\\\\d:\\e/f/g': ['c:\\c:\\c:\\c:\\\\d:\\', 'e/f/g'], 'c:..\\system\\explorer.exe': ['c:', '..\\system\\explorer.exe'], 'd:..\\..\\unsafe\\land': ['d:', '..\\..\\unsafe\\land'], 'c:foo': ['c:', 'foo'], 'D:mark': ['D:', 'mark'], '//?/X:/y/z': ['//?/X:/', 'y/z'], '\\\\?\\X:\\y\\z': ['\\\\?\\X:\\', 'y\\z'], } for (const [input, [root, stripped]] of Object.entries(cases)) { if ( !t.strictSame(stripAbsolutePath(input, cwd), [root, stripped], input) ) { break } } t.end() }) isaacs-node-tar-0a52f00/test/strip-trailing-slashes.js000066400000000000000000000005471522005272700227400ustar00rootroot00000000000000import t from 'tap' import { stripTrailingSlashes } from '../dist/esm/strip-trailing-slashes.js' const short = '///a///b///c///' const long = short.repeat(10) + '/'.repeat(1000000) t.equal(stripTrailingSlashes('no slash'), 'no slash') t.equal(stripTrailingSlashes(short), '///a///b///c') t.equal(stripTrailingSlashes(long), short.repeat(9) + '///a///b///c') isaacs-node-tar-0a52f00/test/symlink-error.js000066400000000000000000000004721522005272700211420ustar00rootroot00000000000000import t from 'tap' import { SymlinkError } from '../dist/esm/symlink-error.js' t.match(new SymlinkError('symlink', 'path'), { name: 'SymlinkError', path: 'path', symlink: 'symlink', syscall: 'symlink', code: 'TAR_SYMLINK_ERROR', message: 'TAR_SYMLINK_ERROR: Cannot extract through symbolic link', }) isaacs-node-tar-0a52f00/test/symlink-race-extract.ts000066400000000000000000000040511522005272700224020ustar00rootroot00000000000000import fs, { lstatSync, readFileSync, symlinkSync, writeFileSync, } from 'node:fs' import { resolve } from 'node:path' import t from 'tap' import { extract } from '../src/extract.js' import { Header } from '../src/header.js' if (typeof fs.constants.O_NOFOLLOW !== 'number') { t.plan(0, 'no O_NOFOLLOW flag') process.exit(0) } const makeTarball = () => { const header = Buffer.alloc(512) new Header({ path: 'victim.txt', type: 'File', size: 6, }).encode(header) return Buffer.concat([ header, Buffer.from('PWNED\n'.padEnd(512, '\0')), Buffer.alloc(1024), ]) } t.test('extract does not follow a raced-in symlink', async t => { const dir = t.testdir({ cwd: {}, 'target.txt': 'ORIGINAL\n', }) const cwd = resolve(dir, 'cwd') const target = resolve(dir, 'target.txt') const tarball = resolve(dir, 'poc.tar') const victim = resolve(cwd, 'victim.txt') writeFileSync(tarball, makeTarball()) const warnings: [code: string, message: string][] = [] const lstat = fs.lstat let raced = false fs.lstat = ((path, options, cb) => { const callback = typeof options === 'function' ? options : ( (cb as Parameters[1] & ((err: NodeJS.ErrnoException | null, stats: fs.Stats) => void)) ) if (!raced && String(path) === victim) { raced = true symlinkSync(target, victim) const er = Object.assign(new Error('raced symlink'), { code: 'ENOENT', }) process.nextTick(() => callback(er, undefined as never)) return } return typeof options === 'function' ? lstat(path, options) : lstat(path, options, cb as never) }) as typeof fs.lstat t.teardown(() => { fs.lstat = lstat }) await extract({ cwd, file: tarball, onwarn: (code, message) => warnings.push([code, String(message)]), }) t.equal(readFileSync(target, 'utf8'), 'ORIGINAL\n') t.equal(lstatSync(victim).isSymbolicLink(), true) t.match(warnings, [ ['TAR_ENTRY_ERROR', /ELOOP|symbolic link|Too many symbolic links/], ]) }) isaacs-node-tar-0a52f00/test/types.js000066400000000000000000000004531522005272700174700ustar00rootroot00000000000000import t from 'tap' import * as types from '../dist/esm/types.js' t.equal(types.name.get('0'), 'File') t.equal(types.code.get('File'), '0') t.equal(types.isCode('0'), true) t.equal(types.isCode('Z'), false) t.equal(types.isName('TapeVolumeHeader'), true) t.equal(types.isName('Unsupported'), false) isaacs-node-tar-0a52f00/test/unpack.js000066400000000000000000002504571522005272700176200ustar00rootroot00000000000000import { Unpack, UnpackSync } from '../dist/esm/unpack.js' import fs, { readFileSync } from 'fs' import { Minipass } from 'minipass' import * as z from 'minizlib' import path from 'path' import { rimraf } from 'rimraf' import t from 'tap' import { fileURLToPath } from 'url' import zlib from 'zlib' import { Header } from '../dist/esm/header.js' import { extract } from '../dist/esm/extract.js' import { makeTar } from './fixtures/make-tar.js' const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const fixtures = path.resolve(__dirname, 'fixtures') const tars = path.resolve(fixtures, 'tars') const parses = path.resolve(fixtures, 'parse') import eos from 'end-of-stream' import { mkdirp } from 'mkdirp' import mutateFS from 'mutate-fs' import { normalizeWindowsPath as normPath } from '../dist/esm/normalize-windows-path.js' import { ReadEntry } from '../dist/esm/read-entry.js' import { Pax } from '../dist/esm/pax.js' const makeCompressedBomb = () => { const payload = Buffer.alloc(8 * 1024 * 1024) return zlib.gzipSync( makeTar([ { path: 'bomb', size: payload.length, type: 'File', }, payload, '', '', ]), ) } // On Windows in particular, the "really deep folder path" file // often tends to cause problems, which don't indicate a failure // of this library, it's just what happens on Windows with super // long file paths. const isWindows = process.platform === 'win32' const isLongFile = f => f.match(/r.e.a.l.l.y.-.d.e.e.p.-.f.o.l.d.e.r.-.p.a.t.h/) t.capture(process, 'umask', () => 0o22) t.test('basic file unpack tests', t => { const cases = { 'emptypax.tar': { '🌟.txt': '🌟✧✩⭐︎✪✫✬✭✮⚝✯✰✵✶✷✸✹❂⭑⭒★☆✡☪✴︎✦✡️🔯✴️🌠\n', 'one-byte.txt': 'a', }, 'body-byte-counts.tar': { '1024-bytes.txt': new Array(1024).join('x') + '\n', '512-bytes.txt': new Array(512).join('x') + '\n', 'one-byte.txt': 'a', 'zero-byte.txt': '', }, 'utf8.tar': { '🌟.txt': '🌟✧✩⭐︎✪✫✬✭✮⚝✯✰✵✶✷✸✹❂⭑⭒★☆✡☪✴︎✦✡️🔯✴️🌠\n', 'Ω.txt': 'Ω', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt': 'Ω', }, 'file.tar': { 'one-byte.txt': 'a', }, 'global-header.tar': { 'one-byte.txt': 'a', }, 'long-pax.tar': { '120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', }, 'long-paths.tar': { '100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '120-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', '170-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt': 'short\n', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt': 'Ω', }, } const tarfiles = Object.keys(cases) t.plan(tarfiles.length) t.jobs = tarfiles.length tarfiles.forEach(tarfile => { t.test(tarfile, t => { const tf = path.resolve(tars, tarfile) const dir = t.testdir({}) const linkdir = dir + '.link' t.beforeEach(async () => { await rimraf(linkdir) fs.symlinkSync(dir, linkdir) }) const check = t => { const expect = cases[tarfile] Object.keys(expect).forEach(file => { const f = path.resolve(dir, file) if (isWindows && isLongFile(file)) { return } t.equal(fs.readFileSync(f, 'utf8'), expect[file], file) }) t.end() } t.plan(2) t.test('async unpack', t => { t.plan(2) t.test('strict', t => { const unpack = new Unpack({ cwd: linkdir, strict: true }) fs.createReadStream(tf).pipe(unpack) eos(unpack, () => check(t)) }) t.test('loose', t => { const unpack = new Unpack({ cwd: linkdir }) fs.createReadStream(tf).pipe(unpack) eos(unpack, () => check(t)) }) }) t.test('sync unpack', t => { t.plan(2) t.test('strict', t => { const unpack = new UnpackSync({ cwd: linkdir }) unpack.end(fs.readFileSync(tf)) check(t) }) t.test('loose', t => { const unpack = new UnpackSync({ cwd: linkdir }) unpack.end(fs.readFileSync(tf)) check(t) }) }) }) }) }) t.test('cwd default to process cwd', t => { const u = new Unpack() const us = new UnpackSync() const cwd = normPath(process.cwd()) t.equal(u.cwd, cwd) t.equal(us.cwd, cwd) t.end() }) t.test('links!', t => { const dir = t.testdir({}) const data = fs.readFileSync(tars + '/links.tar') const stripData = fs.readFileSync(tars + '/links-strip.tar') t.plan(6) t.beforeEach(() => mkdirp(dir)) t.afterEach(() => rimraf(dir)) const check = t => { const hl1 = fs.lstatSync(dir + '/hardlink-1') const hl2 = fs.lstatSync(dir + '/hardlink-2') t.equal(hl1.dev, hl2.dev) t.equal(hl1.ino, hl2.ino) t.equal(hl1.nlink, 2) t.equal(hl2.nlink, 2) if (!isWindows) { // doesn't work on win32 without special privs const sym = fs.lstatSync(dir + '/symlink') t.ok(sym.isSymbolicLink()) t.equal(fs.readlinkSync(dir + '/symlink'), 'hardlink-2') } t.end() } const checkForStrip = t => { const hl1 = fs.lstatSync(dir + '/hardlink-1') const hl2 = fs.lstatSync(dir + '/hardlink-2') const hl3 = fs.lstatSync(dir + '/1/2/3/hardlink-3') t.equal(hl1.dev, hl2.dev) t.equal(hl1.ino, hl2.ino) t.equal(hl1.dev, hl3.dev) t.equal(hl1.ino, hl3.ino) t.equal(hl1.nlink, 3) t.equal(hl2.nlink, 3) if (!isWindows) { const sym = fs.lstatSync(dir + '/symlink') t.ok(sym.isSymbolicLink()) t.equal(fs.readlinkSync(dir + '/symlink'), 'hardlink-2') } t.end() } const checkForStrip3 = t => { // strips the linkpath entirely, so the link doesn't get extracted. t.throws(() => fs.lstatSync(dir + '/3'), { code: 'ENOENT' }) t.end() } t.test('async', t => { const unpack = new Unpack({ cwd: dir }) let finished = false unpack.on('finish', () => (finished = true)) unpack.on('close', () => t.ok(finished, 'emitted finish before close')) unpack.on('close', () => check(t)) unpack.end(data) }) t.test('sync', t => { const unpack = new UnpackSync({ cwd: dir }) unpack.end(data) check(t) }) t.test('sync strip', t => { const unpack = new UnpackSync({ cwd: dir, strip: 1 }) unpack.end(stripData) checkForStrip(t) }) t.test('async strip', t => { const unpack = new Unpack({ cwd: dir, strip: 1 }) let finished = false unpack.on('finish', () => (finished = true)) unpack.on('close', () => t.ok(finished, 'emitted finish before close')) unpack.on('close', () => checkForStrip(t)) unpack.end(stripData) }) t.test('sync strip 3', t => { const unpack = new UnpackSync({ cwd: dir, strip: 3 }) unpack.end(fs.readFileSync(tars + '/links-strip.tar')) checkForStrip3(t) }) t.test('async strip 3', t => { const unpack = new Unpack({ cwd: dir, strip: 3 }) let finished = false unpack.on('finish', () => (finished = true)) unpack.on('close', () => t.ok(finished, 'emitted finish before close')) unpack.on('close', () => checkForStrip3(t)) unpack.end(stripData) }) }) t.test('links without cleanup (exercise clobbering code)', t => { const dir = t.testdir({}) const data = fs.readFileSync(tars + '/links.tar') t.plan(6) t.beforeEach(() => { // clobber this junk try { mkdirp.sync(dir + '/hardlink-1') mkdirp.sync(dir + '/hardlink-2') fs.writeFileSync(dir + '/symlink', 'not a symlink') } catch (er) {} }) const check = t => { const hl1 = fs.lstatSync(dir + '/hardlink-1') const hl2 = fs.lstatSync(dir + '/hardlink-2') t.equal(hl1.dev, hl2.dev) t.equal(hl1.ino, hl2.ino) t.equal(hl1.nlink, 2) t.equal(hl2.nlink, 2) if (!isWindows) { const sym = fs.lstatSync(dir + '/symlink') t.ok(sym.isSymbolicLink()) t.equal(fs.readlinkSync(dir + '/symlink'), 'hardlink-2') } t.end() } t.test('async', t => { const unpack = new Unpack({ cwd: dir }) let prefinished = false unpack.on('prefinish', () => (prefinished = true)) unpack.on('finish', () => t.ok(prefinished, 'emitted prefinish before finish'), ) unpack.on('close', () => check(t)) unpack.end(data) }) t.test('sync', t => { const unpack = new UnpackSync({ cwd: dir }) unpack.end(data) check(t) }) t.test('async again', t => { const unpack = new Unpack({ cwd: dir }) eos(unpack, () => check(t)) unpack.end(data) }) t.test('sync again', t => { const unpack = new UnpackSync({ cwd: dir }) unpack.end(data) check(t) }) t.test('async unlink', t => { const unpack = new Unpack({ cwd: dir, unlink: true }) unpack.on('close', () => check(t)) unpack.end(data) }) t.test('sync unlink', t => { const unpack = new UnpackSync({ cwd: dir, unlink: true }) unpack.end(data) check(t) }) }) t.test('nested dir dupe', t => { const dir = t.testdir({}) mkdirp.sync(dir + '/d/e/e/p') const expect = { 'd/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/a.txt': 'short\n', 'd/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'd/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'd/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': 'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', 'd/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt': 'Ω', } const check = t => { const entries = fs.readdirSync(dir) t.equal(entries.length, 1) t.equal(entries[0], 'd') Object.keys(expect).forEach(f => { const file = dir + '/' + f t.equal(fs.readFileSync(file, 'utf8'), expect[f]) }) t.end() } const unpack = new Unpack({ cwd: dir, strip: 8 }) const data = fs.readFileSync(tars + '/long-paths.tar') // while we're at it, why not use gzip too? const zip = new z.Gzip() zip.pipe(unpack) unpack.on('close', () => check(t)) zip.end(data) }) t.test( 'symlink in dir path', { skip: isWindows && 'symlinks not fully supported', }, t => { const data = makeTar([ { path: 'd/i', type: 'Directory', }, { path: 'd/i/r/dir', type: 'Directory', mode: 0o751, mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/file', type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), }, 'a', { path: 'd/i/r/link', type: 'Link', linkpath: 'd/i/r/file', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/symlink', type: 'SymbolicLink', linkpath: './dir', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/symlink/x', type: 'File', size: 0, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, '', '', ]) t.test('no clobbering', t => { const warnings = [] const cwd = t.testdir({}) const u = new Unpack({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), }) u.on('close', () => { t.equal( fs.lstatSync(cwd + '/d/i').mode & 0o7777, isWindows ? 0o666 : 0o755, ) t.equal( fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, isWindows ? 0o666 : 0o751, ) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') if (!isWindows) { t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'got symlink', ) t.throws(() => fs.statSync(cwd + '/d/i/r/symlink/x')) } t.equal(warnings[0][0], 'TAR_ENTRY_ERROR') if (!isWindows) { t.equal( warnings[0][1], 'TAR_SYMLINK_ERROR: Cannot extract through symbolic link', ) t.match(warnings[0][2], { name: 'SymlinkError', code: 'TAR_SYMLINK_ERROR', tarCode: 'TAR_ENTRY_ERROR', path: cwd + '/d/i/r/symlink/', symlink: cwd + '/d/i/r/symlink', }) } t.equal(warnings.length, 1) t.end() }) u.end(data) }) t.test('no clobbering, sync', t => { const warnings = [] const cwd = t.testdir({}) const u = new UnpackSync({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), }) u.end(data) t.equal( fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, isWindows ? 0o666 : 0o751, ) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') if (!isWindows) { t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'got symlink', ) t.throws(() => fs.statSync(cwd + '/d/i/r/symlink/x')) } t.equal(warnings.length, 1) t.equal(warnings[0][0], 'TAR_ENTRY_ERROR') t.equal( warnings[0][1], 'TAR_SYMLINK_ERROR: Cannot extract through symbolic link', ) t.match(warnings[0][2], { name: 'SymlinkError', path: cwd + '/d/i/r/symlink/', symlink: cwd + '/d/i/r/symlink', }) t.end() }) t.test('extract through symlink', t => { const warnings = [] const cwd = t.testdir({}) const u = new Unpack({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), preservePaths: true, }) u.on('close', () => { t.same(warnings, []) t.equal(fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, 0o751) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'got symlink', ) t.ok(fs.lstatSync(cwd + '/d/i/r/dir/x').isFile(), 'x thru link') t.ok( fs.lstatSync(cwd + '/d/i/r/symlink/x').isFile(), 'x thru link', ) t.end() }) u.end(data) }) t.test('extract through symlink sync', t => { const warnings = [] const cwd = t.testdir({}) const u = new UnpackSync({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), preservePaths: true, }) u.end(data) t.same(warnings, []) t.equal(fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, 0o751) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'got symlink', ) t.ok(fs.lstatSync(cwd + '/d/i/r/dir/x').isFile(), 'x thru link') t.ok(fs.lstatSync(cwd + '/d/i/r/symlink/x').isFile(), 'x thru link') t.end() }) t.test('clobber through symlink', t => { const warnings = [] const cwd = t.testdir({}) const u = new Unpack({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), unlink: true, }) u.on('close', () => { t.same(warnings, []) t.equal(fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, 0o751) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') t.notOk( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'no link', ) t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isDirectory(), 'sym is dir', ) t.ok( fs.lstatSync(cwd + '/d/i/r/symlink/x').isFile(), 'x thru link', ) t.end() }) u.end(data) }) t.test('clobber through symlink with busted unlink', t => { const poop = new Error('poop') // for some reason, resetting fs.unlink in the teardown was breaking const reset = mutateFS.fail('unlink', poop) const cwd = t.testdir({}) const warnings = [] const u = new Unpack({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), unlink: true, }) u.on('close', () => { t.same(warnings, [['TAR_ENTRY_ERROR', 'poop', poop]]) reset() t.end() }) u.end(data) }) t.test('clobber through symlink sync', t => { const warnings = [] const cwd = t.testdir({}) const u = new UnpackSync({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), unlink: true, }) u.end(data) t.equal(fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, 0o751) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') t.notOk( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'no link', ) t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isDirectory(), 'sym is dir', ) t.ok(fs.lstatSync(cwd + '/d/i/r/symlink/x').isFile(), 'x thru link') t.end() }) t.test('clobber dirs', t => { const cwd = t.testdir({ d: { i: { r: { dir: {}, file: {}, link: {}, symlink: {}, }, }, }, }) const warnings = [] const u = new Unpack({ cwd, onwarn: (c, w, d) => { warnings.push([c, w, d]) }, chmod: true, }) u.on('close', () => { t.equal(fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, 0o751) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'got symlink', ) t.throws(() => fs.statSync(cwd + '/d/i/r/symlink/x')) t.equal(warnings.length, 1) t.equal(warnings[0][0], 'TAR_ENTRY_ERROR') t.equal( warnings[0][1], 'TAR_SYMLINK_ERROR: Cannot extract through symbolic link', ) t.match(warnings[0][2], { name: 'SymlinkError', path: cwd + '/d/i/r/symlink/', symlink: cwd + '/d/i/r/symlink', }) t.end() }) u.end(data) }) t.test('clobber dirs sync', t => { const cwd = t.testdir({ d: { i: { r: { dir: {}, file: {}, link: {}, symlink: {}, }, }, }, }) const warnings = [] const u = new UnpackSync({ cwd, onwarn: (c, w, d) => { warnings.push([c, w, d]) }, chmod: true, processUmask: 0o22, }) u.end(data) t.equal(fs.lstatSync(cwd + '/d/i/r/dir').mode & 0o7777, 0o751) t.ok(fs.lstatSync(cwd + '/d/i/r/file').isFile(), 'got file') t.ok( fs.lstatSync(cwd + '/d/i/r/symlink').isSymbolicLink(), 'got symlink', ) t.throws(() => fs.statSync(cwd + '/d/i/r/symlink/x')) t.equal(warnings.length, 1) t.equal(warnings[0][0], 'TAR_ENTRY_ERROR') t.equal( warnings[0][1], 'TAR_SYMLINK_ERROR: Cannot extract through symbolic link', ) t.match(warnings[0][2], { name: 'SymlinkError', path: cwd + '/d/i/r/symlink/', symlink: cwd + '/d/i/r/symlink', }) t.end() }) t.end() }, ) t.test('unsupported entries', t => { const unknown = new Header({ path: 'qux', size: 4 }) unknown.encode() unknown.block?.write('Z', 156) const data = makeTar([ { path: 'dev/random', type: 'CharacterDevice', }, { path: 'dev/hd0', type: 'BlockDevice', }, { path: 'dev/fifo0', type: 'FIFO', }, // note: unrecognized types are ignored, so this won't emit a warning. // gnutar and bsdtar treat unrecognized types as 'file', so it may be // worth doing the same thing, but with a warning. unknown.block, 'asdf', '', '', ]) t.test('basic, warns', t => { const cwd = t.testdir({}) const warnings = [] const u = new Unpack({ cwd, onwarn: (c, w, d) => warnings.push([c, w, d]), }) const c = 'TAR_ENTRY_UNSUPPORTED' const expect = [ [ c, 'unsupported entry type: CharacterDevice', { entry: { path: 'dev/random' }, }, ], [ c, 'unsupported entry type: BlockDevice', { entry: { path: 'dev/hd0' }, }, ], [ c, 'unsupported entry type: FIFO', { entry: { path: 'dev/fifo0' }, }, ], ] u.on('close', () => { t.equal(fs.readdirSync(cwd).length, 0) t.match(warnings, expect) t.end() }) u.end(data) }) t.test('strict, throws', t => { const cwd = t.testdir({}) const warnings = [] const errors = [] const u = new Unpack({ cwd, strict: true, onwarn: (c, w, d) => warnings.push([c, w, d]), }) u.on('error', e => errors.push(e)) u.on('close', () => { t.equal(fs.readdirSync(cwd).length, 0) t.same(warnings, []) t.match(errors, [ { message: 'unsupported entry type: CharacterDevice', entry: { path: 'dev/random' }, }, { message: 'unsupported entry type: BlockDevice', entry: { path: 'dev/hd0' }, }, { message: 'unsupported entry type: FIFO', entry: { path: 'dev/fifo0' }, }, ]) t.end() }) u.end(data) }) t.end() }) t.test('file in dir path', t => { const data = makeTar([ { path: 'd/i/r/file', type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'a', { path: 'd/i/r/file/a/b/c', type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'b', '', '', ]) t.test('fail because of file', t => { const check = t => { const cwd = t.testdirName t.equal(fs.readFileSync(cwd + '/d/i/r/file', 'utf8'), 'a') t.throws(() => fs.statSync(cwd + '/d/i/r/file/a/b/c')) t.end() } t.plan(2) t.test('async', t => { const cwd = t.testdir({}) new Unpack({ cwd }).on('close', () => check(t)).end(data) }) t.test('sync', t => { const cwd = t.testdir({}) new UnpackSync({ cwd }).end(data) check(t) }) }) t.test('clobber on through', t => { const check = t => { const cwd = t.testdirName t.ok(fs.statSync(cwd + '/d/i/r/file').isDirectory()) t.equal(fs.readFileSync(cwd + '/d/i/r/file/a/b/c', 'utf8'), 'b') t.end() } t.plan(2) t.test('async', t => { const cwd = t.testdir({}) new Unpack({ cwd, unlink: true }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { const cwd = t.testdir({}) new UnpackSync({ cwd, unlink: true }).end(data) check(t) }) }) t.end() }) t.test('set umask option', t => { const cwd = t.testdir({}) const data = makeTar([ { path: 'd/i/r/dir', type: 'Directory', mode: 0o751, }, '', '', ]) new Unpack({ umask: 0o027, cwd, }) .on('close', () => { t.equal( fs.statSync(cwd + '/d/i/r').mode & 0o7777, isWindows ? 0o666 : 0o750, ) t.equal( fs.statSync(cwd + '/d/i/r/dir').mode & 0o7777, isWindows ? 0o666 : 0o751, ) t.end() }) .end(data) }) t.test('absolute paths', t => { const dir = t.testdir({}) t.teardown(() => rimraf(dir)) t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const absolute = path.resolve(dir, 'd/i/r/absolute') const root = path.parse(absolute).root const extraAbsolute = root + root + root + absolute t.ok(path.isAbsolute(extraAbsolute)) t.ok(path.isAbsolute(absolute)) const parsed = path.parse(absolute) const relative = absolute.slice(parsed.root.length) t.notOk(path.isAbsolute(relative)) const data = makeTar([ { path: extraAbsolute, type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'a', '', '', ]) t.test('warn and correct', t => { const check = t => { const r = normPath(root) t.match(warnings, [ [ `stripping ${r}${r}${r}${r} from absolute path`, { path: normPath(absolute), code: 'TAR_ENTRY_INFO' }, ], ]) t.ok(fs.lstatSync(path.resolve(dir, relative)).isFile(), 'is file') t.end() } const warnings = [] t.test('async', t => { warnings.length = 0 new Unpack({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { warnings.length = 0 new UnpackSync({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t) }) t.end() }) t.test('preserve absolute path', t => { // if we use the extraAbsolute path here, we end up creating a dir // like C:\C:\C:\C:\path\to\absolute, which is both 100% valid on // windows, as well as SUUUUUPER annoying. const data = makeTar([ { path: isWindows ? absolute : extraAbsolute, type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'a', '', '', ]) const check = t => { t.same(warnings, []) t.ok(fs.lstatSync(absolute).isFile(), 'is file') t.end() } const warnings = [] t.test('async', t => { warnings.length = 0 new Unpack({ preservePaths: true, cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { warnings.length = 0 new UnpackSync({ preservePaths: true, cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t) }) t.end() }) t.end() }) t.test('.. paths', t => { const dir = t.testdir({}) t.beforeEach(async () => { await rimraf(dir) await mkdirp(dir) }) const fmode = 0o755 const dotted = 'a/b/c/../d' const resolved = path.resolve(dir, dotted) const data = makeTar([ { path: dotted, type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'd', '', '', ]) t.test('warn and skip', t => { const check = t => { t.match(warnings, [ ["path contains '..'", { path: dotted, code: 'TAR_ENTRY_ERROR' }], ]) t.throws(() => fs.lstatSync(resolved)) t.end() } const warnings = [] t.test('async', t => { warnings.length = 0 new Unpack({ fmode: fmode, cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { warnings.length = 0 new UnpackSync({ fmode: fmode, cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t) }) t.end() }) t.test('preserve dotted path', t => { const check = t => { t.same(warnings, []) t.ok(fs.lstatSync(resolved).isFile(), 'is file') t.equal( fs.lstatSync(resolved).mode & 0o777, isWindows ? 0o666 : fmode, ) t.end() } const warnings = [] t.test('async', t => { warnings.length = 0 new Unpack({ fmode: fmode, preservePaths: true, cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { warnings.length = 0 new UnpackSync({ fmode: fmode, preservePaths: true, cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t) }) t.end() }) t.end() }) t.test('fail all stats', t => { const poop = new Error('poop') poop.code = 'EPOOP' const dir = normPath(t.testdir({})) const { stat, fstat, lstat, statSync, fstatSync, lstatSync } = fs const unmutate = () => Object.assign(fs, { stat, fstat, lstat, statSync, fstatSync, lstatSync, }) const mutate = () => { fs.stat = fs.lstat = fs.fstat = (...args) => { // don't fail statting the cwd, or we get different errors if (normPath(args[0]) === dir) { return lstat(dir, args.pop()) } process.nextTick(() => args.pop()(poop)) } fs.statSync = fs.lstatSync = fs.fstatSync = (...args) => { if (normPath(args[0]) === dir) { return lstatSync(dir) } throw poop } } const warnings = [] t.beforeEach(() => { warnings.length = 0 mkdirp.sync(dir) mutate() }) t.afterEach(async () => { unmutate() await rimraf(dir) }) const data = makeTar([ { path: 'd/i/r/file/', type: 'Directory', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/dir/', type: 'Directory', mode: 0o751, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/file', type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'a', { path: 'd/i/r/link', type: 'Link', linkpath: 'd/i/r/file', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/symlink', type: 'SymbolicLink', linkpath: './dir', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, '', '', ]) const check = (t, expect) => { t.match(warnings, expect) warnings.forEach(w => t.equal(w[0], w[1].message)) t.end() } t.test('async', t => { const expect = [ ['poop', poop], ['poop', poop], ] new Unpack({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t, expect)) .end(data) }) t.test('sync', t => { const expect = [ ['poop', poop], ['poop', poop], ] new UnpackSync({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t, expect) }) t.end() }) t.test('fail symlink', t => { const poop = new Error('poop') poop.code = 'EPOOP' const dir = t.testdir({}) t.teardown(mutateFS.fail('symlink', poop)) const warnings = [] t.beforeEach(async () => { warnings.length = 0 await rimraf(dir) await mkdirp(dir) }) const data = makeTar([ { path: 'd/i/r/dir/', type: 'Directory', mode: 0o751, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/symlink', type: 'SymbolicLink', linkpath: './dir', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, '', '', ]) const check = (t, expect) => { t.match(warnings, expect) warnings.forEach(w => t.equal(w[0], w[1].message)) t.end() } t.test('async', t => { const expect = [['poop', poop]] new Unpack({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t, expect)) .end(data) }) t.test('sync', t => { const expect = [['poop', poop]] new UnpackSync({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t, expect) }) t.end() }) t.test('fail chmod', t => { const poop = new Error('poop') poop.code = 'EPOOP' const dir = t.testdir() t.teardown(mutateFS.fail('chmod', poop)) const warnings = [] t.beforeEach(async () => { warnings.length = 0 await rimraf(dir) await mkdirp(dir) }) const data = makeTar([ { path: 'd/i/r/dir/', type: 'Directory', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/dir/', type: 'Directory', mode: 0o751, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, '', '', ]) const check = (t, expect) => { t.match(warnings, expect) warnings.forEach(w => t.equal(w[0], w[1].message)) t.end() } t.test('async', t => { const expect = [['poop', poop]] new Unpack({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), chmod: true, processUmask: 0o22, }) .on('close', () => check(t, expect)) .end(data) }) t.test('sync', t => { const expect = [['poop', poop]] new UnpackSync({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), chmod: true, processUmask: 0o22, }).end(data) check(t, expect) }) t.end() }) t.test('fail mkdir', t => { const poop = new Error('poop') poop.code = 'EPOOP' let unmutate const dir = t.testdir({}) const warnings = [] t.beforeEach(async () => { warnings.length = 0 await rimraf(dir) await mkdirp(dir) unmutate = mutateFS.fail('mkdir', poop) }) t.afterEach(() => unmutate()) const data = makeTar([ { path: 'dir/', type: 'Directory', mode: 0o751, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, '', '', ]) const expect = [ [ 'ENOENT: no such file or directory', { code: 'ENOENT', syscall: 'lstat', path: normPath(path.resolve(dir, 'dir')), }, ], ] const check = t => { t.match(warnings, expect) warnings.forEach(w => t.equal(w[0], w[1].message)) t.end() } t.test('sync', t => { new UnpackSync({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t) }) t.test('async', t => { new Unpack({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t)) .end(data) }) t.end() }) t.test('fail write', t => { const poop = new Error('poop') poop.code = 'EPOOP' const dir = t.testdir({}) t.teardown(mutateFS.fail('write', poop)) const warnings = [] t.beforeEach(async () => { warnings.length = 0 await rimraf(dir) await mkdirp(dir) }) const data = makeTar([ { path: 'x', type: 'File', size: 1, mode: 0o751, mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'x', '', '', ]) const expect = [['poop', poop]] const check = t => { t.match(warnings, expect) warnings.forEach(w => t.equal(w[0], w[1].message)) t.end() } t.test('async', t => { new Unpack({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { new UnpackSync({ cwd: dir, onwarn: (_c, w, d) => warnings.push([w, d]), }).end(data) check(t) }) t.end() }) t.test('skip existing', t => { const date = new Date('2011-03-27T22:16:31.000Z') t.beforeEach(async t => { const dir = t.testdir({ x: 'y', }) fs.utimesSync(dir + '/x', date, date) }) const data = makeTar([ { path: 'x', type: 'File', size: 1, mode: 0o751, mtime: new Date('2013-12-19T17:00:00.000Z'), }, 'x', '', '', ]) const check = t => { const dir = t.testdirName const st = fs.lstatSync(dir + '/x') t.equal(st.atime.toISOString(), date.toISOString()) t.equal(st.mtime.toISOString(), date.toISOString()) const data = fs.readFileSync(dir + '/x', 'utf8') t.equal(data, 'y') t.end() } t.test('async', t => { const dir = t.testdirName new Unpack({ cwd: dir, keep: true, }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { const dir = t.testdirName new UnpackSync({ cwd: dir, keep: true, }).end(data) check(t) }) t.end() }) t.test('skip newer', t => { const date = new Date('2013-12-19T17:00:00.000Z') t.beforeEach(async t => { const dir = t.testdir({ x: 'y' }) fs.utimesSync(dir + '/x', date, date) }) const data = makeTar([ { path: 'x', type: 'File', size: 1, mode: 0o751, mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'x', '', '', ]) const check = t => { const dir = t.testdirName const st = fs.lstatSync(dir + '/x') t.equal(st.atime.toISOString(), date.toISOString()) t.equal(st.mtime.toISOString(), date.toISOString()) const data = fs.readFileSync(dir + '/x', 'utf8') t.equal(data, 'y') t.end() } t.test('async', t => { new Unpack({ cwd: t.testdirName, newer: true, }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { new UnpackSync({ cwd: t.testdirName, newer: true, }).end(data) check(t) }) t.end() }) t.test('no mtime', t => { const date = new Date('2011-03-27T22:16:31.000Z') const data = makeTar([ { path: 'x/', type: 'Directory', size: 0, atime: date, ctime: date, mtime: date, }, { path: 'x/y', type: 'File', size: 1, mode: 0o751, atime: date, ctime: date, mtime: date, }, 'x', '', '', ]) const check = t => { const dir = t.testdirName // this may fail if it's run on March 27, 2011 const stx = fs.lstatSync(dir + '/x') t.not(stx.atime.toISOString(), date.toISOString()) t.not(stx.mtime.toISOString(), date.toISOString()) const sty = fs.lstatSync(dir + '/x/y') t.not(sty.atime.toISOString(), date.toISOString()) t.not(sty.mtime.toISOString(), date.toISOString()) const data = fs.readFileSync(dir + '/x/y', 'utf8') t.equal(data, 'x') t.end() } t.test('async', t => { const dir = t.testdir({}) new Unpack({ cwd: dir, noMtime: true, }) .on('close', () => check(t)) .end(data) }) t.test('sync', t => { const dir = t.testdir({}) new UnpackSync({ cwd: dir, noMtime: true, }).end(data) check(t) }) t.end() }) t.test('unpack big enough to pause/drain', t => { const dir = t.testdir({}) const stream = fs.createReadStream(fixtures + '/parses.tar') const u = new Unpack({ cwd: dir, strip: 3, strict: true, }) u.on('ignoredEntry', entry => t.fail('should not get ignored entry: ' + entry.path), ) u.on('close', () => { t.pass('extraction finished') const actual = fs.readdirSync(dir) const expected = fs.readdirSync(parses) t.same(actual, expected) t.end() }) stream.pipe(u) }) t.test('set owner', t => { // fake it on platforms that don't have getuid const myUid = 501 const myGid = 1024 t.capture(process, 'getuid', () => myUid) t.capture(process, 'getgid', () => myGid) // can't actually do this because it requires root, but we can // verify that chown gets called. t.test('as root, defaults to true', t => { t.capture(process, 'getuid', () => 0) const u = new Unpack() t.equal(u.preserveOwner, true, 'preserveOwner enabled') t.end() }) t.test('as non-root, defaults to false', t => { t.capture(process, 'getuid', () => 501) const u = new Unpack() t.equal(u.preserveOwner, false, 'preserveOwner disabled') t.end() }) const data = makeTar([ { uid: 2456124561, gid: 813708013, path: 'foo/', type: 'Directory', }, { uid: myUid, gid: 813708013, path: 'foo/my-uid-different-gid', type: 'File', size: 3, }, 'qux', { uid: 2456124561, path: 'foo/different-uid-nogid', type: 'Directory', }, { uid: 2456124561, path: 'foo/different-uid-nogid/bar', type: 'File', size: 3, }, 'qux', { gid: 813708013, path: 'foo/different-gid-nouid/bar', type: 'File', size: 3, }, 'qux', { uid: myUid, gid: myGid, path: 'foo-mine/', type: 'Directory', }, { uid: myUid, gid: myGid, path: 'foo-mine/bar', type: 'File', size: 3, }, 'qux', { uid: myUid, path: 'foo-mine/nogid', type: 'Directory', }, { uid: myUid, path: 'foo-mine/nogid/bar', type: 'File', size: 3, }, 'qux', '', '', ]) t.test('chown failure results in unpack failure', t => { const poop = new Error('expected chown failure') const un = mutateFS.fail('chown', poop) const unl = mutateFS.fail('lchown', poop) const unf = mutateFS.fail('fchown', poop) t.teardown(async () => { un() unf() unl() }) t.test('sync', t => { const cwd = t.testdir({}) let warned = false const u = new UnpackSync({ cwd, preserveOwner: true, onwarn: (_c, _m, er) => { if (!warned) { warned = true t.equal(er, poop) } }, }) u.end(data) t.equal(warned, true) t.end() }) t.test('async', t => { const cwd = t.testdir({}) let warned = false const u = new Unpack({ cwd, preserveOwner: true, onwarn: (_c, _m, er) => { if (!warned) { warned = true t.equal(er, poop) } }, }) u.on('finish', () => { t.equal(warned, true) t.end() }) u.end(data) }) t.end() }) t.test('chown when true', t => { const chown = fs.chown const lchown = fs.lchown const fchown = fs.fchown const chownSync = fs.chownSync const fchownSync = fs.fchownSync const lchownSync = fs.lchownSync let called = 0 fs.fchown = fs.chown = fs.lchown = (_path, _owner, _group, cb) => { called++ cb() } fs.chownSync = fs.lchownSync = fs.fchownSync = () => called++ t.teardown(() => { fs.chown = chown fs.fchown = fchown fs.lchown = lchown fs.chownSync = chownSync fs.fchownSync = fchownSync fs.lchownSync = lchownSync }) t.test('sync', t => { const cwd = t.testdir({}) called = 0 const u = new UnpackSync({ cwd, preserveOwner: true }) u.end(data) t.ok(called >= 5, 'called chowns') t.end() }) t.test('async', t => { const cwd = t.testdir({}) called = 0 const u = new Unpack({ cwd, preserveOwner: true }) u.end(data) u.on('close', () => { t.ok(called >= 5, 'called chowns') t.end() }) }) t.end() }) t.test('no chown when false', t => { const poop = new Error('poop') const un = mutateFS.fail('chown', poop) const unf = mutateFS.fail('fchown', poop) const unl = mutateFS.fail('lchown', poop) t.teardown(async () => { un() unf() unl() }) const check = t => { const dir = t.testdirName const dirStat = fs.statSync(dir + '/foo') t.not(dirStat.uid, 2456124561) t.not(dirStat.gid, 813708013) const fileStat = fs.statSync(dir + '/foo/my-uid-different-gid') t.not(fileStat.uid, 2456124561) t.not(fileStat.gid, 813708013) const dirStat2 = fs.statSync(dir + '/foo/different-uid-nogid') t.not(dirStat2.uid, 2456124561) const fileStat2 = fs.statSync(dir + '/foo/different-uid-nogid/bar') t.not(fileStat2.uid, 2456124561) t.end() } t.test('sync', t => { const dir = t.testdir({}) const u = new UnpackSync({ cwd: dir, preserveOwner: false }) u.end(data) check(t) }) t.test('async', t => { const dir = t.testdir({}) const u = new Unpack({ cwd: dir, preserveOwner: false }) u.end(data) u.on('close', () => check(t)) }) t.end() }) t.end() }) t.test('unpack when dir is not writable', t => { const data = makeTar([ { path: 'a/', type: 'Directory', mode: 0o444, }, { path: 'a/b', type: 'File', size: 1, }, 'a', '', '', ]) const check = t => { const dir = t.testdirName t.equal( fs.statSync(dir + '/a').mode & 0o7777, isWindows ? 0o666 : 0o744, ) t.equal(fs.readFileSync(dir + '/a/b', 'utf8'), 'a') t.end() } t.test('sync', t => { const dir = t.testdir({}) const u = new UnpackSync({ cwd: dir, strict: true }) u.end(data) check(t) }) t.test('async', t => { const dir = t.testdir({}) const u = new Unpack({ cwd: dir, strict: true }) u.end(data) u.on('close', () => check(t)) }) t.end() }) t.test('transmute chars on windows', t => { const data = makeTar([ { path: '<|>?:.txt', size: 5, type: 'File', }, '<|>?:', '', '', ]) const hex = 'ef80bcef81bcef80beef80bfef80ba2e747874' const uglyName = Buffer.from(hex, 'hex').toString() const check = t => { const dir = t.testdirName const ugly = path.resolve(dir, uglyName) t.same(fs.readdirSync(dir), [uglyName]) t.equal(fs.readFileSync(ugly, 'utf8'), '<|>?:') t.end() } t.test('async', t => { const dir = t.testdir({}) const u = new Unpack({ cwd: dir, win32: true, }) u.end(data) u.on('close', () => check(t)) }) t.test('sync', t => { const dir = t.testdir({}) const u = new UnpackSync({ cwd: dir, win32: true, }) u.end(data) check(t) }) t.end() }) t.test('safely transmute chars on windows with absolutes', t => { // don't actually make the directory const poop = new Error('poop') t.teardown(mutateFS.fail('mkdir', poop)) const data = makeTar([ { path: 'c:/x/y/z/<|>?:.txt', size: 5, type: 'File', }, '<|>?:', '', '', ]) const hex = 'ef80bcef81bcef80beef80bfef80ba2e747874' const uglyName = Buffer.from(hex, 'hex').toString() const uglyPath = 'c:/x/y/z/' + uglyName const u = new Unpack({ win32: true, preservePaths: true, }) u.on('entry', entry => { t.equal(entry.path, uglyPath) t.end() }) u.end(data) }) t.test('use explicit chmod when required by umask', t => { const data = makeTar([ { path: 'x/y/z', mode: 0o775, type: 'Directory', }, '', '', ]) const check = async t => { const cwd = t.testdirName const st = fs.statSync(cwd + '/x/y/z') t.equal(st.mode & 0o777, isWindows ? 0o666 : 0o775) t.end() } t.test('async', t => { const cwd = t.testdir({}) const unpack = new Unpack({ cwd, chmod: true, processUmask: 0o22, }) unpack.on('close', () => check(t)) unpack.end(data) }) return t.test('sync', t => { const cwd = t.testdir({}) const unpack = new UnpackSync({ cwd, chmod: true, processUmask: 0o22, }) unpack.end(data) check(t) }) }) t.test('dont use explicit chmod if chmod flag not set', t => { t.capture(process, 'umask', () => { throw new Error('should not call process.umask()') }) const data = makeTar([ { path: 'x/y/z', mode: 0o775, type: 'Directory', }, '', '', ]) const check = async t => { const cwd = t.testdirName const st = fs.statSync(cwd + '/x/y/z') t.equal(st.mode & 0o777, isWindows ? 0o666 : 0o755) t.end() } t.test('async', t => { const cwd = t.testdir({}) const unpack = new Unpack({ cwd }) unpack.on('close', () => check(t)) unpack.end(data) }) return t.test('sync', t => { const cwd = t.testdir({}) const unpack = new UnpackSync({ cwd }) unpack.end(data) check(t) }) }) t.test('chown implicit dirs and also the entries', t => { const basedir = t.testdir({}) // club these so that the test can run as non-root const chown = fs.chown const chownSync = fs.chownSync const lchown = fs.lchown const lchownSync = fs.lchownSync const fchown = fs.fchown const fchownSync = fs.fchownSync const getuid = process.getuid const getgid = process.getgid t.teardown(() => { fs.chown = chown fs.chownSync = chownSync fs.lchown = lchown fs.lchownSync = lchownSync fs.fchown = fchown fs.fchownSync = fchownSync process.getgid = getgid }) let chowns = 0 let currentTest = null fs.lchown = fs.fchown = fs.chown = (path, uid, gid, cb) => { currentTest.equal(uid, 420, 'chown(' + path + ') uid') currentTest.equal(gid, 666, 'chown(' + path + ') gid') chowns++ cb() } fs.lchownSync = fs.chownSync = fs.fchownSync = (path, uid, gid) => { currentTest.equal(uid, 420, 'chownSync(' + path + ') uid') currentTest.equal(gid, 666, 'chownSync(' + path + ') gid') chowns++ } const data = makeTar([ { path: 'a/b/c', mode: 0o775, type: 'File', size: 1, uid: null, gid: null, }, '.', { path: 'x/y/z', mode: 0o775, uid: 12345, gid: 54321, type: 'File', size: 1, }, '.', '', '', ]) const check = async t => { currentTest = null t.equal(chowns, 8) chowns = 0 await rimraf(basedir) t.end() } t.test('throws when setting uid/gid improperly', t => { t.throws( () => new Unpack({ uid: 420 }), TypeError('cannot set owner without number uid and gid'), ) t.throws( () => new Unpack({ gid: 666 }), TypeError('cannot set owner without number uid and gid'), ) t.throws( () => new Unpack({ uid: 1, gid: 2, preserveOwner: true }), TypeError( 'cannot preserve owner in archive and also set owner explicitly', ), ) t.end() }) const tests = () => t .test('async', t => { currentTest = t mkdirp.sync(basedir) const unpack = new Unpack({ cwd: basedir, uid: 420, gid: 666, }) unpack.on('close', () => check(t)) unpack.end(data) }) .then( t.test('sync', t => { currentTest = t mkdirp.sync(basedir) const unpack = new UnpackSync({ cwd: basedir, uid: 420, gid: 666, }) unpack.end(data) check(t) }), ) tests() t.test('make it look like processUid is 420', t => { process.getuid = () => 420 t.end() }) tests() t.test('make it look like processGid is 666', t => { process.getuid = getuid process.getgid = () => 666 t.end() }) return tests() }) t.test('bad cwd setting', t => { const basedir = t.testdir({}) const cases = [ // the cwd itself { path: './', type: 'Directory', }, // a file directly in the cwd { path: 'a', type: 'File', }, // a file nested within a subdir of the cwd { path: 'a/b/c', type: 'File', }, ] fs.writeFileSync(basedir + '/file', 'xyz') cases.forEach(c => t.test(c.type + ' ' + c.path, t => { const data = makeTar([ { path: c.path, mode: 0o775, type: c.type, size: 0, uid: null, gid: null, }, '', '', ]) t.test('cwd is a file', t => { const cwd = basedir + '/file' const opt = { cwd: cwd } t.throws(() => new UnpackSync(opt).end(data), { name: 'CwdError', message: "ENOTDIR: Cannot cd into '" + normPath(cwd) + "'", path: normPath(cwd), code: 'ENOTDIR', }) new Unpack(opt) .on('error', er => { t.match(er, { name: 'CwdError', message: "ENOTDIR: Cannot cd into '" + normPath(cwd) + "'", path: normPath(cwd), code: 'ENOTDIR', }) t.end() }) .end(data) }) return t.test('cwd is missing', t => { const cwd = basedir + '/asdf/asdf/asdf' const opt = { cwd: cwd } t.throws(() => new UnpackSync(opt).end(data), { name: 'CwdError', message: "ENOENT: Cannot cd into '" + normPath(cwd) + "'", path: normPath(cwd), code: 'ENOENT', }) new Unpack(opt) .on('error', er => { t.match(er, { name: 'CwdError', message: "ENOENT: Cannot cd into '" + normPath(cwd) + "'", path: normPath(cwd), code: 'ENOENT', }) t.end() }) .end(data) }) }), ) t.end() }) t.test('transform', t => { const cases = { 'emptypax.tar': { '🌟.txt': '🌟✧✩⭐︎✪✫✬✭✮⚝✯✰✵✶✷✸✹❂⭑⭒★☆✡☪✴︎✦✡️🔯✴️🌠\n', 'one-byte.txt': '[a]', }, 'body-byte-counts.tar': { '1024-bytes.txt': new Array(1024).join('[x]') + '[\n]', '512-bytes.txt': new Array(512).join('[x]') + '[\n]', 'one-byte.txt': '[a]', 'zero-byte.txt': '', }, 'utf8.tar': { '🌟.txt': '🌟✧✩⭐︎✪✫✬✭✮⚝✯✰✵✶✷✸✹❂⭑⭒★☆✡☪✴︎✦✡️🔯✴️🌠\n', 'Ω.txt': '[Ω]', 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt': '[Ω]', }, } const txFn = entry => { switch (path.basename(entry.path)) { case 'zero-bytes.txt': return entry case 'one-byte.txt': case '1024-bytes.txt': case '512-bytes.txt': case 'Ω.txt': return new Bracer() } } class Bracer extends Minipass { write(data) { const d = data .toString() .split('') .map(c => '[' + c + ']') .join('') return super.write(d) } } const tarfiles = Object.keys(cases) t.plan(tarfiles.length) t.jobs = tarfiles.length tarfiles.forEach(tarfile => { t.test(tarfile, t => { const tf = path.resolve(tars, tarfile) const check = t => { const dir = t.testdirName const expect = cases[tarfile] Object.keys(expect).forEach(file => { const f = path.resolve(dir, file) t.equal(fs.readFileSync(f, 'utf8'), expect[file], file) }) t.end() } t.plan(2) t.test('async unpack', t => { t.plan(2) t.test('strict', t => { const dir = t.testdir({}) const unpack = new Unpack({ cwd: dir, strict: true, transform: txFn, }) fs.createReadStream(tf).pipe(unpack) eos(unpack, () => check(t)) }) t.test('loose', t => { const dir = t.testdir({}) const unpack = new Unpack({ cwd: dir, transform: txFn }) fs.createReadStream(tf).pipe(unpack) eos(unpack, () => check(t)) }) }) t.test('sync unpack', t => { t.plan(2) t.test('strict', t => { const dir = t.testdir({}) const unpack = new UnpackSync({ cwd: dir, strict: true, transform: txFn, }) unpack.end(fs.readFileSync(tf)) check(t) }) t.test('loose', t => { const dir = t.testdir({}) const unpack = new UnpackSync({ cwd: dir, transform: txFn }) unpack.end(fs.readFileSync(tf)) check(t) }) }) }) }) }) t.test('transform error', t => { const tarfile = path.resolve(tars, 'body-byte-counts.tar') const tardata = fs.readFileSync(tarfile) const poop = new Error('poop') const txFn = () => { const tx = new Minipass() tx.write = () => tx.emit('error', poop) tx.resume() return tx } t.test('sync unpack', t => { t.test('strict', t => { const dir = t.testdir({}) const unpack = new UnpackSync({ cwd: dir, strict: true, transform: txFn, }) const expect = 3 let actual = 0 unpack.on('error', er => { t.equal(er, poop) actual++ }) unpack.end(tardata) t.equal(actual, expect, 'error count') t.end() }) t.test('loose', t => { const dir = t.testdir({}) const unpack = new UnpackSync({ cwd: dir, transform: txFn }) const expect = 3 let actual = 0 unpack.on('warn', (_code, _msg, er) => { t.equal(er, poop) actual++ }) unpack.end(tardata) t.equal(actual, expect, 'error count') t.end() }) t.end() }) t.test('async unpack', t => { const dir = t.testdir({}) // the last error is about the folder being deleted, just ignore that one t.test('strict', t => { const unpack = new Unpack({ cwd: dir, strict: true, transform: txFn, }) t.plan(3) t.teardown(() => { unpack.removeAllListeners('error') unpack.on('error', () => {}) }) unpack.on('error', er => t.equal(er, poop)) unpack.end(tardata) }) t.test('loose', t => { const dir = t.testdir({}) const unpack = new Unpack({ cwd: dir, transform: txFn }) t.plan(3) t.teardown(() => unpack.removeAllListeners('warn')) unpack.on('warn', (_code, _msg, er) => t.equal(er, poop)) unpack.end(tardata) }) t.end() }) t.end() }) t.test('futimes/fchown failures', t => { const archive = path.resolve(tars, 'utf8.tar') const tardata = fs.readFileSync(archive) const poop = new Error('poop') const second = new Error('second error') const methods = ['utimes', 'chown'] methods.forEach(method => { const fc = method === 'chown' t.test(method + ' fallback', t => { const dir = t.testdir({}) t.teardown(mutateFS.fail('f' + method, poop)) // forceChown will fail on systems where the user is not root // and/or the uid/gid in the archive aren't valid. We're just // verifying coverage here, so make the method auto-pass. t.teardown(mutateFS.pass(method)) t.plan(2) t.test('async unpack', t => { t.plan(2) t.test('strict', t => { const unpack = new Unpack({ cwd: dir, strict: true, forceChown: fc, }) unpack.on('finish', () => t.end()) unpack.end(tardata) }) t.test('loose', t => { const unpack = new Unpack({ cwd: dir, forceChown: fc }) unpack.on('finish', () => t.end()) unpack.on('warn', t.fail) unpack.end(tardata) }) }) t.test('sync unpack', t => { t.plan(2) t.test('strict', t => { const unpack = new UnpackSync({ cwd: dir, strict: true, forceChown: fc, }) unpack.end(tardata) t.end() }) t.test('loose', t => { const unpack = new UnpackSync({ cwd: dir, forceChown: fc }) unpack.on('warn', t.fail) unpack.end(tardata) t.end() }) }) }) t.test('also fail ' + method, t => { const unmutate = mutateFS.fail('f' + method, poop) const unmutate2 = mutateFS.fail(method, second) t.teardown(() => { unmutate() unmutate2() }) t.plan(2) t.test('async unpack', t => { t.plan(2) t.test('strict', t => { const dir = t.testdir({}) const unpack = new Unpack({ cwd: dir, strict: true, forceChown: fc, }) t.plan(3) unpack.on('error', er => t.equal(er, poop)) unpack.end(tardata) }) t.test('loose', t => { const dir = t.testdir({}) const unpack = new Unpack({ cwd: dir, forceChown: fc }) t.plan(3) unpack.on('warn', (_code, _m, er) => t.equal(er, poop)) unpack.end(tardata) }) }) t.test('sync unpack', t => { t.plan(2) t.test('strict', t => { const dir = t.testdir({}) const unpack = new UnpackSync({ cwd: dir, strict: true, forceChown: fc, }) t.plan(3) unpack.on('error', er => t.equal(er, poop)) unpack.end(tardata) }) t.test('loose', t => { const dir = t.testdir({}) const unpack = new UnpackSync({ cwd: dir, forceChown: fc }) t.plan(3) unpack.on('warn', (_c, _m, er) => t.equal(er, poop)) unpack.end(tardata) }) }) }) }) t.end() }) t.test('onReadEntry option is preserved', t => { let oecalls = 0 const onReadEntry = _entry => oecalls++ const data = makeTar([ { path: 'd/i', type: 'Directory', }, { path: 'd/i/r/dir', type: 'Directory', mode: 0o751, mtime: new Date('2011-03-27T22:16:31.000Z'), }, { path: 'd/i/r/file', type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), }, 'a', '', '', ]) const check = t => { t.equal(oecalls, 3) oecalls = 0 t.end() } t.test('sync', t => { const dir = t.testdir({}) const unpack = new UnpackSync({ cwd: dir, onReadEntry }) unpack.end(data) check(t) }) t.test('async', t => { const dir = t.testdir({}) mkdirp.sync(dir) const unpack = new Unpack({ cwd: dir, onReadEntry }) unpack.on('finish', () => check(t)) unpack.end(data) }) t.end() }) t.test('do not reuse hardlinks, only nlink=1 files', t => { const now = new Date('2018-04-30T18:30:39.025Z') const data = makeTar([ { path: 'overwriteme', type: 'File', size: 4, mode: 0o644, mtime: now, }, 'foo\n', { path: 'link', linkpath: 'overwriteme', type: 'Link', mode: 0o644, mtime: now, }, { path: 'link', type: 'File', size: 4, mode: 0o644, mtime: now, }, 'bar\n', '', '', ]) const checks = { link: 'bar\n', overwriteme: 'foo\n', } const check = t => { const dir = t.testdirName for (const f in checks) { t.equal(fs.readFileSync(dir + '/' + f, 'utf8'), checks[f], f) t.equal(fs.statSync(dir + '/' + f).nlink, 1, f) } t.end() } t.test('async', t => { const dir = t.testdir({}) const u = new Unpack({ cwd: dir }) u.on('close', () => check(t)) u.end(data) }) t.test('sync', t => { const dir = t.testdir({}) const u = new UnpackSync({ cwd: dir }) u.end(data) check(t) }) t.end() }) t.test('trying to unpack a non-zlib gzip file should fail', t => { const data = Buffer.from('hello this is not gzip data') const dataGzip = Buffer.concat([Buffer.from([0x1f, 0x8b]), data]) t.test('abort if gzip has an error', t => { const expect = { message: /^zlib/, errno: Number, code: /^Z/, recoverable: false, cwd: normPath(t.testdirName), tarCode: 'TAR_ABORT', } const opts = { cwd: t.testdir({}), gzip: true, } new Unpack(opts) .once('error', er => t.match(er, expect, 'async emits')) .end(dataGzip) const skip = !/^v([0-9]|1[0-3])\./.test(process.version) ? false : 'node prior to v14 did not raise sync zlib errors properly' t.throws( () => new UnpackSync(opts).end(dataGzip), expect, 'sync throws', { skip }, ) t.end() }) t.test('bad archive if no gzip', t => { t.plan(2) const expect = { tarCode: 'TAR_BAD_ARCHIVE', recoverable: false, } const opts = { cwd: t.testdir({}) } new Unpack(opts) .once('error', er => t.match(er, expect, 'async emits')) .end(data) t.throws(() => new UnpackSync(opts).end(data), expect, 'sync throws') }) t.end() }) t.test('max decompression ratio', t => { const data = makeCompressedBomb() t.test('aborts compressed bombs by default', t => { t.plan(2) const cwd = t.testdir({}) new Unpack({ cwd }) .once('error', er => t.match(er, { tarCode: 'TAR_ABORT', recoverable: false, cwd: normPath(cwd), message: /max decompression ratio exceeded/, }), ) .end(data) t.throws( () => new UnpackSync({ cwd }).end(data), { tarCode: 'TAR_ABORT', recoverable: false, cwd: normPath(cwd), message: /max decompression ratio exceeded/, }, 'sync throws', ) }) t.test('can be disabled explicitly', t => { const cwd = t.testdir({}) const u = new Unpack({ cwd, maxDecompressionRatio: Infinity, }) u.on('error', er => t.fail(er.message)) u.on('close', () => { t.equal(fs.statSync(path.resolve(cwd, 'bomb')).size, 8 * 1024 * 1024) t.end() }) u.end(data) }) t.end() }) t.test('handle errors on fs.close', t => { const poop = new Error('poop') // have to actually close them, or else windows gets mad t.teardown(mutateFS.fail('close', poop)) const data = makeTar([ { path: 'file', type: 'File', size: 1, atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, 'a', '', '', ]) t.plan(2) t.test('async', t => { new Unpack({ cwd: t.testdir({}), strict: true }) .on('error', er => t.equal(er, poop, 'async')) .on('end', () => t.end()) .end(data) }) t.test('sync', t => { t.throws( () => new UnpackSync({ cwd: normPath(t.testdir({})), strict: true, }).end(data), poop, 'sync', ) t.end() }) }) t.test('using strip option when top level file exists', t => { const data = makeTar([ { path: 'top', type: 'File', size: 0, }, { path: 'x', type: 'Directory', }, { path: 'x/a', type: 'File', size: 'a'.length, }, 'a', { path: 'y', type: 'GNUDumpDir', }, { path: 'y/b', type: 'File', size: 'b'.length, }, 'b', '', '', ]) t.plan(2) const check = (t, path) => { t.equal(fs.statSync(path).isDirectory(), true) t.equal(fs.readFileSync(path + '/a', 'utf8'), 'a') t.equal(fs.readFileSync(path + '/b', 'utf8'), 'b') t.throws(() => fs.statSync(path + '/top'), { code: 'ENOENT' }) t.end() } t.test('async', t => { const path = t.testdir({ y: {} }) new Unpack({ cwd: path, strip: 1 }) .on('end', () => check(t, path)) .end(data) }) t.test('sync', t => { const path = t.testdir({ y: {} }) new UnpackSync({ cwd: path, strip: 1 }).end(data) check(t, path) }) }) t.test('handle EPERMs when creating symlinks', t => { // https://github.com/npm/node-tar/issues/265 const msg = 'You do not have sufficient privilege to perform this operation.' const er = Object.assign(new Error(msg), { code: 'EPERM', }) t.teardown(mutateFS.fail('symlink', er)) const data = makeTar([ { path: 'x', type: 'Directory', }, { path: 'x/y', type: 'File', size: 'hello, world'.length, }, 'hello, world', { path: 'x/link1', type: 'SymbolicLink', linkpath: './y', }, { path: 'x/link2', type: 'SymbolicLink', linkpath: './y', }, { path: 'x/link3', type: 'SymbolicLink', linkpath: './y', }, { path: 'x/z', type: 'File', size: 'hello, world'.length, }, 'hello, world', '', '', ]) const check = (t, path) => { t.match( WARNINGS, [ ['TAR_ENTRY_ERROR', msg], ['TAR_ENTRY_ERROR', msg], ['TAR_ENTRY_ERROR', msg], ], 'got expected warnings', ) t.equal(WARNINGS.length, 3) WARNINGS.length = 0 t.equal(fs.readFileSync(`${path}/x/y`, 'utf8'), 'hello, world') t.equal(fs.readFileSync(`${path}/x/z`, 'utf8'), 'hello, world') t.throws(() => fs.statSync(`${path}/x/link1`), { code: 'ENOENT' }) t.throws(() => fs.statSync(`${path}/x/link2`), { code: 'ENOENT' }) t.throws(() => fs.statSync(`${path}/x/link3`), { code: 'ENOENT' }) } const WARNINGS = [] t.test('async', t => { const dir = t.testdir({}) const u = new Unpack({ cwd: dir, onwarn: (code, msg, _er) => WARNINGS.push([code, msg]), }) u.on('end', () => { check(t, dir) t.end() }) u.end(data) }) t.test('sync', t => { const dir = t.testdir({}) const u = new UnpackSync({ cwd: dir, onwarn: (code, msg, _er) => WARNINGS.push([code, msg]), }) u.end(data) check(t, dir) t.end() }) t.end() }) t.test('close fd when error writing', t => { const data = makeTar([ { type: 'Directory', path: 'x', }, { type: 'File', size: 1, path: 'x/y', }, '.', '', '', ]) t.teardown(mutateFS.fail('write', new Error('nope'))) const CLOSES = [] const OPENS = {} const { open } = fs t.teardown(() => (fs.open = open)) fs.open = (...args) => { const cb = args.pop() args.push((er, fd) => { OPENS[args[0]] = fd cb(er, fd) }) return open.call(fs, ...args) } t.teardown( mutateFS.mutateArgs('close', ([fd]) => { CLOSES.push(fd) return [fd] }), ) const WARNINGS = [] const dir = t.testdir({}) const unpack = new Unpack({ cwd: dir, onwarn: (code, msg) => WARNINGS.push([code, msg]), }) unpack.on('end', () => { for (const [path, fd] of Object.entries(OPENS)) { t.equal(CLOSES.includes(fd), true, 'closed fd for ' + path) } t.end() }) unpack.end(data) }) t.test('close fd when error setting mtime', t => { const data = makeTar([ { type: 'Directory', path: 'x', }, { type: 'File', size: 1, path: 'x/y', atime: new Date('1979-07-01T19:10:00.000Z'), ctime: new Date('2011-03-27T22:16:31.000Z'), mtime: new Date('2011-03-27T22:16:31.000Z'), }, '.', '', '', ]) // have to clobber these both, because we fall back t.teardown(mutateFS.fail('futimes', new Error('nope'))) t.teardown(mutateFS.fail('utimes', new Error('nooooope'))) const CLOSES = [] const OPENS = {} const { open } = fs t.capture(fs, 'open', (...args) => { const cb = args.pop() args.push((er, fd) => { OPENS[args[0]] = fd cb(er, fd) }) return open.call(fs, ...args) }) t.teardown( mutateFS.mutateArgs('close', ([fd]) => { CLOSES.push(fd) return [fd] }), ) const WARNINGS = [] const dir = t.testdir({}) const unpack = new Unpack({ cwd: dir, onwarn: (code, msg) => WARNINGS.push([code, msg]), }) unpack.on('end', () => { for (const [path, fd] of Object.entries(OPENS)) { t.equal(CLOSES.includes(fd), true, 'closed fd for ' + path) } t.end() }) unpack.end(data) }) t.test('do not hang on large files that fail to open()', t => { const data = makeTar([ { type: 'Directory', path: 'x', }, { type: 'File', size: 31745, path: 'x/y', }, 'x'.repeat(31745), '', '', ]) t.teardown(mutateFS.fail('open', new Error('nope'))) const dir = t.testdir({}) const WARNINGS = [] const unpack = new Unpack({ cwd: dir, onwarn: (code, msg) => WARNINGS.push([code, msg]), }) unpack.on('end', () => { t.strictSame(WARNINGS, [['TAR_ENTRY_ERROR', 'nope']]) t.end() }) unpack.write(data.subarray(0, 2048)) setTimeout(() => { unpack.write(data.subarray(2048, 4096)) setTimeout(() => { unpack.write(data.subarray(4096)) setTimeout(() => { unpack.end() }) }) }) }) t.test('recognize C:.. as a dot path part', async t => { if (process.platform !== 'win32') { process.env.TESTING_TAR_FAKE_PLATFORM = 'win32' t.teardown(() => { delete process.env.TESTING_TAR_FAKE_PLATFORM }) } const { Unpack, UnpackSync } = await t.mockImport( '../dist/esm/unpack.js', { path: { ...path.win32, win32: path.win32, posix: path.posix, }, }, ) const data = makeTar([ { type: 'File', path: 'C:../x/y/z', size: 1, }, 'z', { type: 'File', path: 'x:..\\y\\z', size: 1, }, 'x', { type: 'File', path: 'Y:foo', size: 1, }, 'y', '', '', ]) const check = (path, warnings, t) => { t.equal(fs.readFileSync(`${path}/foo`, 'utf8'), 'y') t.strictSame(warnings, [ [ 'TAR_ENTRY_ERROR', "path contains '..'", 'C:../x/y/z', 'C:../x/y/z', ], ['TAR_ENTRY_ERROR', "path contains '..'", 'x:../y/z', 'x:../y/z'], [ 'TAR_ENTRY_INFO', 'stripping Y: from absolute path', 'Y:foo', 'foo', ], ]) t.end() } t.test('async', t => { const warnings = [] const path = t.testdir() new Unpack({ cwd: path, onwarn: (c, w, { entry, path }) => warnings.push([c, w, path, entry.path]), }) .on('close', () => check(path, warnings, t)) .end(data) }) t.test('sync', t => { const warnings = [] const path = t.testdir() new UnpackSync({ cwd: path, onwarn: (c, w, { entry, path }) => warnings.push([c, w, path, entry.path]), }).end(data) check(path, warnings, t) }) t.end() }) t.test('excessively deep subfolder nesting', async t => { const tf = path.resolve(fixtures, 'excessively-deep.tar') const data = fs.readFileSync(tf) const warnings = [] const onwarn = (c, w, { entry, path, depth, maxDepth }) => warnings.push([c, w, { entry, path, depth, maxDepth }]) const check = (t, maxDepth = 1024) => { t.match(warnings, [ [ 'TAR_ENTRY_ERROR', 'path excessively deep', { entry: ReadEntry, path: /^\.(\/a){1024,}\/foo.txt$/, depth: 222372, maxDepth, }, ], ]) warnings.length = 0 t.end() } t.test('async', t => { const cwd = t.testdir() new Unpack({ cwd, onwarn, }) .on('end', () => check(t)) .end(data) }) t.test('sync', t => { const cwd = t.testdir() new UnpackSync({ cwd, onwarn, }).end(data) check(t) }) t.test('async set md', t => { const cwd = t.testdir() new Unpack({ cwd, onwarn, maxDepth: 64, }) .on('end', () => check(t, 64)) .end(data) }) t.test('sync set md', t => { const cwd = t.testdir() new UnpackSync({ cwd, onwarn, maxDepth: 64, }).end(data) check(t, 64) }) }) t.test('ignore self-referential hardlinks', async t => { const data = makeTar([ { path: 'autolink', linkpath: './autolink', type: 'Link', }, ]) const check = (t, warnings) => { t.matchSnapshot(warnings) t.strictSame(fs.readdirSync(t.testdirName), [], 'nothing extracted') t.end() } t.test('async', t => { const cwd = t.testdir({}) const warnings = [] const u = new Unpack({ cwd, onwarn: (_, m) => warnings.push(m) }) u.on('end', () => check(t, warnings)) u.end(data) }) t.test('sync', t => { const cwd = t.testdir({}) const warnings = [] const u = new UnpackSync({ cwd, onwarn: (_, m) => warnings.push(m), }) u.end(data) check(t, warnings) }) }) t.test('valid relative symlink with .. should be extracted', async t => { const makeTar = () => { // foo/file.txt (regular file) // bar/link.txt -> ../foo/file.txt (valid relative symlink) const chunks = [] const fooDirHeader = Buffer.alloc(512) new Header({ path: 'foo/', type: 'Directory', mode: 0o755, }).encode(fooDirHeader, 0) chunks.push(fooDirHeader) const fileContent = 'hello world' const fileHeader = Buffer.alloc(512) new Header({ path: 'foo/file.txt', type: 'File', mode: 0o644, size: fileContent.length, }).encode(fileHeader, 0) chunks.push(fileHeader) const contentBuf = Buffer.alloc(512) contentBuf.write(fileContent) chunks.push(contentBuf) const barDirHeader = Buffer.alloc(512) new Header({ path: 'bar/', type: 'Directory', mode: 0o755, }).encode(barDirHeader, 0) chunks.push(barDirHeader) const symlinkHeader = Buffer.alloc(512) new Header({ path: 'bar/link.txt', type: 'SymbolicLink', linkpath: '../foo/file.txt', }).encode(symlinkHeader, 0) chunks.push(symlinkHeader) const escapedSymlinkHeader = Buffer.alloc(512) new Header({ path: 'bar/badlink.txt', type: 'SymbolicLink', linkpath: '../../oh/no', }).encode(escapedSymlinkHeader) chunks.push(escapedSymlinkHeader) chunks.push(Buffer.alloc(1024)) return Buffer.concat(chunks) } const dir = t.testdir({ 'test.tar': makeTar(), }) const warnings = [] await extract({ cwd: dir, file: dir + '/test.tar', onwarn: (c, m) => warnings.push([c, m]), }) t.ok(fs.lstatSync(dir + '/foo/file.txt').isFile()) t.ok(fs.lstatSync(dir + '/bar/link.txt').isSymbolicLink()) t.equal(fs.readlinkSync(dir + '/bar/link.txt'), '../foo/file.txt') t.equal(fs.readFileSync(dir + '/bar/link.txt', 'utf8'), 'hello world') t.throws(() => fs.statSync(dir + '/bar/badlink.txt')) t.match(warnings, [ ['TAR_ENTRY_ERROR', 'linkpath escapes extraction directory'], ]) }) t.test('no linking through a symlink', t => { const types = ['Link', 'SymbolicLink'] for (const type of types) { t.test(type, t => { const exploit = makeTar([ { type: 'SymbolicLink', path: 'a/b/up', linkpath: '../..', mode: 0o755, }, { type: 'SymbolicLink', path: 'a/b/escape', linkpath: 'up/..', mode: 0o755, }, { type, path: 'exploit', linkpath: 'a/b/escape/exploited-file', mode: 0o755, }, '', '', ]) const setup = t => t.testdir({ x: {}, 'exploited-file': 'original content', }) const check = t => { fs.writeFileSync(t.testdirName + '/x/exploit', 'pwned') t.equal( fs.readFileSync(t.testdirName + '/exploited-file', 'utf8'), 'original content', ) } t.test('sync', t => { const cwd = setup(t) t.throws( () => { new UnpackSync({ cwd, strict: true }).end(exploit) }, { name: 'SymlinkError', message: /^TAR_SYMLINK_ERROR/, path: /a.b.escape.exploited-file$/, symlink: /a.b.escape$/, }, ) check(t) t.end() }) t.test('async', async t => { const cwd = setup(t) await t.rejects( new Promise( (res, rej) => { new Unpack({ cwd, strict: true }) .on('finish', res) .on('error', rej) .end(exploit) }, { name: 'SymlinkError', message: /^TAR_SYMLINK_ERROR/, path: /a.b.escape.exploited-file$/, symlink: /a.b.escape$/, }, ), ) check(t) }) t.end() }) } t.end() }) t.test('numeric pax/entry name discernment', t => { const numericName = '12345' const alphaName = 'abcde' for (const strict of [true, false]) { t.test('strict=' + strict, t => { for (const paxName of [numericName, alphaName]) { t.test('paxName=' + paxName, t => { for (const entryName of [numericName, alphaName]) { t.test('entryName=' + entryName, t => { const paxHeader = new Pax( { path: paxName, size: '12345\n'.length, }, false, ) const paxData = paxHeader.encode() const data = makeTar([ paxData, { type: 'File', path: entryName, mode: 0o755, ctime: new Date('2000-01-01T00:00:00.000Z'), mtime: new Date('2000-01-01T00:00:00.000Z'), size: '12345\n'.length, }, '12345\n', '', '', ]) t.test('sync', t => { const dir = t.testdir({}) new UnpackSync({ strict, cwd: dir }).end(data) t.equal( readFileSync(dir + '/' + paxName, 'utf8'), '12345\n', ) t.end() }) t.test('async', async t => { const dir = t.testdir({}) await new Promise(r => { new Unpack({ strict, cwd: dir }).on('end', r).end(data) }) t.equal( readFileSync(dir + '/' + paxName, 'utf8'), '12345\n', ) t.end() }) t.end() }) } t.end() }) } t.end() }) t.end() } }) isaacs-node-tar-0a52f00/test/update.js000066400000000000000000000253651522005272700176170ustar00rootroot00000000000000import t from 'tap' import { update as u } from '../dist/esm/update.js' import path, { dirname } from 'path' import fs from 'fs' import mutateFS from 'mutate-fs' import { resolve } from 'path' import { fileURLToPath } from 'url' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const fixtures = path.resolve(__dirname, 'fixtures') const tars = path.resolve(fixtures, 'tars') import zlib from 'zlib' import { spawn } from 'child_process' const data = fs.readFileSync(tars + '/body-byte-counts.tar') const dataNoNulls = data.subarray(0, data.length - 1024) const fixtureDef = { 'body-byte-counts.tar': data, 'no-null-eof.tar': dataNoNulls, 'truncated-head.tar': Buffer.concat([ dataNoNulls, data.subarray(0, 500), ]), 'truncated-body.tar': Buffer.concat([ dataNoNulls, data.subarray(0, 700), ]), 'zero.tar': Buffer.from(''), 'empty.tar': Buffer.alloc(512), 'compressed.tgz': zlib.gzipSync(data), 'compressed.tbr': zlib.brotliCompressSync(data), 'compressed.tzst': zlib.zstdCompressSync(data), } t.test('basic file add to archive (good or truncated)', t => { const check = (file, t) => { const c = spawn('tar', ['tf', file]) const out = [] c.stdout.on('data', chunk => out.push(chunk)) c.on('close', (code, signal) => { t.equal(code, 0) t.equal(signal, null) const actual = Buffer.concat(out).toString().trim().split(/\r?\n/) t.same(actual, [ '1024-bytes.txt', '512-bytes.txt', 'one-byte.txt', 'zero-byte.txt', path.basename(__filename), ]) t.end() }) } const files = [ 'body-byte-counts.tar', 'no-null-eof.tar', 'truncated-head.tar', 'truncated-body.tar', ] const td = files .map(f => [f, fixtureDef[f]]) .reduce((s, [k, v]) => { s[k] = v return s }, {}) const fileList = [path.basename(__filename)] t.test('sync', t => { t.plan(files.length) const dir = t.testdir(td) for (const file of files) { t.test(file, t => { u( { sync: true, file: resolve(dir, file), cwd: __dirname, }, fileList, ) check(resolve(dir, file), t) }) } }) t.test('async cb', t => { t.plan(files.length) const dir = t.testdir(td) for (const file of files) { t.test(file, t => { u( { file: resolve(dir, file), cwd: __dirname, }, fileList, er => { if (er) { throw er } check(resolve(dir, file), t) }, ) }) } }) t.test('async', t => { t.plan(files.length) const dir = t.testdir(td) for (const file of files) { t.test(file, t => { u( { file: resolve(dir, file), cwd: __dirname, }, fileList, ).then(() => { check(resolve(dir, file), t) }) }) } }) t.end() }) t.test('add to empty archive', t => { const check = (file, t) => { const c = spawn('tar', ['tf', file]) const out = [] c.stdout.on('data', chunk => out.push(chunk)) c.on('close', (code, signal) => { t.equal(code, 0) t.equal(signal, null) const actual = Buffer.concat(out).toString().trim().split(/\r?\n/) t.same(actual, [path.basename(__filename)]) t.end() }) } const files = ['empty.tar', 'zero.tar'] const td = files .map(f => [f, fixtureDef[f]]) .reduce((s, [k, v]) => { s[k] = v return s }, {}) files.push('not-existing.tar') t.test('sync', t => { const dir = t.testdir(td) t.plan(files.length) for (const file of files) { t.test(file, t => { u( { sync: true, file: resolve(dir, file), cwd: __dirname, }, [path.basename(__filename)], ) check(resolve(dir, file), t) }) } }) t.test('async cb', t => { const dir = t.testdir(td) t.plan(files.length) for (const file of files) { t.test(file, t => { u( { file: resolve(dir, file), cwd: __dirname, }, [path.basename(__filename)], er => { if (er) { throw er } check(resolve(dir, file), t) }, ) }) } }) t.test('async', async t => { const dir = t.testdir(td) t.plan(files.length) for (const file of files) { t.test(file, t => { u( { file: resolve(dir, file), cwd: __dirname, }, [path.basename(__filename)], ).then(() => { check(resolve(dir, file), t) }) }) } }) t.end() }) t.test('cannot append to gzipped archives', t => { const dir = t.testdir({ 'compressed.tgz': fixtureDef['compressed.tgz'], }) const file = resolve(dir, 'compressed.tgz') const expect = new Error('cannot append to compressed archives') const expectT = new TypeError('cannot append to compressed archives') t.throws( _ => u( { file, cwd: __dirname, gzip: true, }, [path.basename(__filename)], ), expectT, ) t.throws( _ => u( { file, cwd: __dirname, sync: true, }, [path.basename(__filename)], ), expect, ) u( { file, cwd: __dirname, }, [path.basename(__filename)], er => { t.match(er, expect) t.end() }, ) }) t.test('cannot append to brotli archives', t => { const dir = t.testdir({ 'compressed.tbr': fixtureDef['compressed.tbr'], }) const file = resolve(dir, 'compressed.tbr') const expect = new Error('cannot append to compressed archives') const expectT = new TypeError('cannot append to compressed archives') t.throws( _ => u( { file, cwd: __dirname, brotli: true, }, [path.basename(__filename)], ), expectT, ) t.throws( _ => u( { file, cwd: __dirname, sync: true, }, [path.basename(__filename)], ), expect, ) t.end() }) t.test('cannot append to zstd archives', t => { const dir = t.testdir({ 'compressed.tbr': fixtureDef['compressed.tzst'], }) const file = resolve(dir, 'compressed.tzst') const expect = new Error('cannot append to compressed archives') const expectT = new TypeError('cannot append to compressed archives') t.throws( _ => u( { file, cwd: __dirname, zstd: true, }, [path.basename(__filename)], ), expectT, ) t.end() }) t.test('other throws', t => { t.throws(_ => u({}, ['asdf']), new TypeError('file is required')) t.throws( _ => u({ file: 'asdf' }, []), new TypeError('no paths specified to add/replace'), ) t.end() }) t.test('broken open', t => { const dir = t.testdir({ 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], }) const file = resolve(dir, 'body-byte-counts.tar') const poop = new Error('poop') t.teardown(mutateFS.fail('open', poop)) t.throws(_ => u({ sync: true, file: file }, ['README.md']), poop) u({ file }, ['README.md'], er => { t.match(er, poop) t.end() }) }) t.test('broken fstat', t => { const td = { 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], } const poop = new Error('poop') t.test('sync', t => { const dir = t.testdir(td) const file = resolve(dir, 'body-byte-counts.tar') t.teardown(mutateFS.fail('fstat', poop)) t.throws(_ => u({ sync: true, file }, ['README.md']), poop) t.end() }) t.test('async', t => { const dir = t.testdir(td) const file = resolve(dir, 'body-byte-counts.tar') t.teardown(mutateFS.fail('fstat', poop)) u({ file }, ['README.md'], async er => { t.match(er, poop) t.end() }) }) t.end() }) t.test('broken read', t => { const dir = t.testdir({ 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], }) const file = resolve(dir, 'body-byte-counts.tar') const poop = new Error('poop') t.teardown(mutateFS.fail('read', poop)) t.throws(_ => u({ sync: true, file }, ['README.md']), poop) u({ file }, ['README.md'], er => { t.match(er, poop) t.end() }) }) t.test('do not add older file', t => { const dir = t.testdir({ 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], '1024-bytes.txt': '.'.repeat(1024), foo: 'foo', }) const file = resolve(dir, 'body-byte-counts.tar') const f = resolve(dir, '1024-bytes.txt') const oldDate = new Date('1997-04-10T16:57:47.000Z') fs.utimesSync(f, oldDate, oldDate) // file size should not change const expect = fixtureDef['body-byte-counts.tar'].length const check = t => { t.equal(fs.statSync(file).size, expect) t.end() } t.test('sync', t => { u( { mtimeCache: new Map(), file, cwd: dir, sync: true, filter: path => path === '1024-bytes.txt', }, ['1024-bytes.txt', 'foo'], ) check(t) }) t.test('async', t => { u({ file, cwd: dir }, ['1024-bytes.txt']).then(_ => check(t)) }) t.test('async cb', t => { u({ file, cwd: dir }, ['1024-bytes.txt'], er => { if (er) { throw er } check(t) }) }) t.end() }) t.test('do add newer file', t => { const setup = t => { const dir = t.testdir({ 'body-byte-counts.tar': fixtureDef['body-byte-counts.tar'], '1024-bytes.txt': '.'.repeat(1024), foo: 'foo', }) const f = resolve(dir, '1024-bytes.txt') const newDate = new Date(Date.now() + 24 * 60 * 60 * 1000) fs.utimesSync(f, newDate, newDate) return dir } // a chunk for the header, then 2 for the body const expect = fixtureDef['body-byte-counts.tar'].length + 512 + 1024 const check = (file, t) => { t.equal(fs.statSync(file).size, expect) t.end() } t.test('sync', t => { const dir = setup(t) const file = resolve(dir, 'body-byte-counts.tar') u( { mtimeCache: new Map(), file, cwd: dir, sync: true, filter: path => path === '1024-bytes.txt', }, ['1024-bytes.txt', 'foo'], ) check(file, t) }) t.test('async', t => { const dir = setup(t) const file = resolve(dir, 'body-byte-counts.tar') u({ file, cwd: dir }, ['1024-bytes.txt']).then(_ => check(file, t)) }) t.test('async cb', t => { const dir = setup(t) const file = resolve(dir, 'body-byte-counts.tar') u({ file, cwd: dir }, ['1024-bytes.txt'], er => { if (er) { throw er } check(file, t) }) }) t.end() }) isaacs-node-tar-0a52f00/test/warn-method.js000066400000000000000000000022341522005272700205500ustar00rootroot00000000000000import t from 'tap' import EE from 'events' import { warnMethod } from '../dist/esm/warn-method.js' class Warner extends EE { warn(code, message, data = {}) { return warnMethod(this, code, message, data) } } const w = new Warner() t.type(w.warn, 'function') const warning = [] w.once('warn', (code, msg, data) => warning.push(code, msg, data)) w.warn('code', 'hello') t.same(warning, ['code', 'hello', { tarCode: 'code', code: 'code' }]) warning.length = 0 w.once('warn', (code, msg, data) => warning.push(code, msg, data)) w.warn('ok', new Error('this is fine'), { foo: 'bar' }) t.match(warning, [ 'ok', 'this is fine', { message: 'this is fine', foo: 'bar', }, ]) w.strict = true t.throws(_ => w.warn('code', 'hello', { data: 123 }), { message: 'hello', data: 123, }) const poop = new Error('poop') t.throws(_ => w.warn('ok', poop), poop) w.file = 'some/file' t.throws(_ => w.warn('ok', 'this is fine'), { file: 'some/file' }) w.cwd = 'some/dir' t.throws(_ => w.warn('ok', 'this is fine'), { cwd: 'some/dir' }) w.strict = false t.throws(_ => w.warn('ok', 'this is fine', { recoverable: false }), { cwd: 'some/dir', recoverable: false, }) isaacs-node-tar-0a52f00/test/winchars.js000066400000000000000000000003531522005272700201410ustar00rootroot00000000000000import t from 'tap' import * as wc from '../dist/esm/winchars.js' t.equal(wc.encode('<>'), '\uf03c\uf03e', 'encode') t.equal(wc.decode(wc.encode('<>')), '<>', 'decode') t.equal(wc.decode(wc.encode('\\|<>?:')), '\\|<>?:', 'all chars') isaacs-node-tar-0a52f00/test/writable-assignment-check.ts000066400000000000000000000006021522005272700233640ustar00rootroot00000000000000import { Unpack } from '../src/unpack.js' import { WriteEntry } from '../src/write-entry.js' import { Parser } from '../src/parse.js' import { fileURLToPath } from 'url' let tester: NodeJS.WritableStream tester = new Parser() tester = new Unpack() tester = new WriteEntry(fileURLToPath(import.meta.url)) tester import { pass } from 'tap' pass(`just making sure TS doesn't complain`) isaacs-node-tar-0a52f00/test/write-entry.js000066400000000000000000001257251522005272700206270ustar00rootroot00000000000000import t from 'tap' import { mkdirp } from 'mkdirp' import fs from 'fs' import { ReadEntry } from '../dist/esm/read-entry.js' import { makeTar } from './fixtures/make-tar.js' import { WriteEntry, WriteEntrySync, WriteEntryTar, } from '../dist/esm/write-entry.js' import path, { dirname } from 'path' import { Header } from '../dist/esm/header.js' import mutateFS from 'mutate-fs' import { Parser } from '../dist/esm/parse.js' import { rimraf } from 'rimraf' import { normalizeWindowsPath as normPath } from '../dist/esm/normalize-windows-path.js' import { fileURLToPath } from 'url' import { chmodrSync } from 'chmodr' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) // make our tests verify that windows link targets get turned into / paths const { readlink, readlinkSync } = fs fs.readlink = (path, cb) => { readlink(path, (er, path) => { if (er) { return cb(er) } else { cb(null, path.replace(/\//g, '\\')) } }) } fs.readlinkSync = path => readlinkSync(path).replace(/\//g, '\\') const fixtures = path.resolve(__dirname, 'fixtures') const files = path.resolve(fixtures, 'files') process.env.USER = 'isaacs' const isWindows = process.platform === 'win32' t.test('set up', t => { const one = fs.statSync(files + '/hardlink-1') const two = fs.statSync(files + '/hardlink-2') if (one.dev !== two.dev || one.ino !== two.ino) { fs.unlinkSync(files + '/hardlink-2') fs.linkSync(files + '/hardlink-1', files + '/hardlink-2') } chmodrSync(files, isWindows ? 0o666 : 0o644) t.end() }) t.test('100 byte filename', t => { // do this one twice, so we have it with and without cache let statCache = null let linkCache = null t.plan(2) const runTest = t => { const f = '100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' let entryInOWE = undefined const ws = new WriteEntry(f, { cwd: files, linkCache: linkCache, statCache: statCache, onWriteEntry: self => { entryInOWE = self t.equal(self.path, f) t.equal(self.header, undefined) }, }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(entryInOWE, ws) t.match(ws, { header: { cksumValid: true, needPax: false, path: '100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', mode: isWindows ? 0o666 : 0o644, size: 100, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }, }) const wss = new WriteEntrySync(f, { cwd: files, linkCache: linkCache, statCache: statCache, }) linkCache = ws.linkCache statCache = ws.statCache t.equal( out.slice(512).toString('hex'), wss.read().subarray(512).toString('hex'), ) t.equal(out.length, 1024) t.equal(out.slice(0, 100).toString(), f) const h = new Header(out.slice(0, 512)) t.match(h, { cksumValid: true, needPax: false, path: '100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', mode: isWindows ? 0o666 : 0o644, size: 100, linkpath: '', uname: 'isaacs', gname: '', devmaj: 0, devmin: 0, }) t.equal( out.slice(512).toString('hex'), '6363636363636363636363636363636363636363636363636363636363636363' + '6363636363636363636363636363636363636363636363636363636363636363' + '6363636363636363636363636363636363636363636363636363636363636363' + '6363636300000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000', ) t.end() }) } t.test('uncached', runTest) t.test('cached', runTest) }) t.test('directory', t => { const ws = new WriteEntry('dir', { cwd: files, }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.match(ws.header, { cksumValid: true, needPax: false, path: 'dir/', mode: isWindows ? 0o777 : 0o755, size: 0, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.equal(out.length, 512) const wss = new WriteEntrySync('dir', { cwd: files }) t.equal(wss.read().length, 512) t.match(wss.header, { cksumValid: true, needPax: false, path: 'dir/', mode: isWindows ? 0o777 : 0o755, size: 0, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) t.test('empty path for cwd', t => { const ws = new WriteEntry('') let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.match(ws.header, { cksumValid: true, needPax: false, path: './', mode: isWindows ? 0o777 : fs.statSync('./').mode & 0o7777, size: 0, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) t.test( 'symlink', { skip: isWindows && 'symlinks not fully supported', }, t => { const ws = new WriteEntry('symlink', { cwd: files }) let out = [] ws.on('data', c => out.push(c)) const header = { cksumValid: true, needPax: false, path: 'symlink', size: 0, linkpath: 'hardlink-2', uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, } const wss = new WriteEntrySync('symlink', { cwd: files }) t.match(wss.header, header) ws.on('end', _ => { out = Buffer.concat(out) t.equal(out.length, 512) t.match(ws.header, header) t.end() }) }, ) t.test('zero-byte file', t => { const ws = new WriteEntry('files/zero-byte.txt', { cwd: fixtures }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(out.length, 512) t.match(ws.header, { path: 'files/zero-byte.txt', cksumValid: true, needPax: false, mode: isWindows ? 0o666 : 0o644, size: 0, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) t.test('zero-byte file, but close fails', t => { const poop = new Error('poop') t.teardown(mutateFS.fail('close', poop)) const ws = new WriteEntry('files/1024-bytes.txt', { cwd: fixtures }) ws.on('end', _ => t.fail('should not get an end, because the close fails'), ) ws.on('error', er => { t.match(er, { message: 'poop' }) t.end() }) ws.resume() }) t.test('hardlinks', t => { const wss = new WriteEntrySync('hardlink-1', { cwd: files, }) const ws = new WriteEntry('files/hardlink-2', { cwd: fixtures, linkCache: wss.linkCache, }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(out.length, 512) t.match(ws.header, { type: 'Link', path: 'files/hardlink-2', cksumValid: true, needPax: false, mode: isWindows ? 0o666 : 0o644, size: 0, linkpath: 'files/hardlink-1', uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) t.test('hardlinks far away', t => { const h1 = 'hardlink-1' const f = path.resolve(files, h1) const stat = fs.statSync(f) const linkCache = new Map([[stat.dev + ':' + stat.ino, '/a/b/c/d/e']]) const ws = new WriteEntry('files/hardlink-2', { cwd: fixtures, linkCache: linkCache, }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(out.length, 1024) t.match(ws.header, { path: 'files/hardlink-2', cksumValid: true, needPax: false, mode: isWindows ? 0o666 : 0o644, size: 26, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) t.test('really deep path', t => { const f = 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' const ws = new WriteEntry(f, { cwd: files }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.match(ws.header, { cksumValid: true, needPax: true, path: 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', mode: isWindows ? 0o666 : 0o644, size: 100, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.equal(out.length, 2048) t.end() }) }) t.test('no pax', t => { const f = 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' const ws = new WriteEntry(f, { cwd: files, noPax: true }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.match(ws.header, { cksumValid: true, needPax: true, path: 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', mode: isWindows ? 0o666 : 0o644, size: 100, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.equal(out.length, 1024) t.end() }) }) t.test('nonexistent file', t => { const f = path.resolve(files, 'does not exist') const ws = new WriteEntry('does not exist', { cwd: files }) ws.on('error', er => { t.match(er, { message: "ENOENT: no such file or directory, lstat '" + f + "'", code: 'ENOENT', path: f, syscall: 'lstat', }) t.end() }) }) t.test('absolute path', t => { const absolute = path.resolve(files, '512-bytes.txt') const { root } = path.parse(absolute) const f = root + root + root + absolute const warn = normPath(isWindows ? root : root + root + root + root) t.test('preservePaths=false strict=false warn=' + warn, t => { const warnings = [] // on windows, c:\c:\c:\... is a valid path, so just use the // single-root absolute version of it. const ws = new WriteEntry(isWindows ? absolute : f, { cwd: files, onwarn: (c, m, p) => warnings.push([c, m, p]), }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(out.length, 1024) t.match(warnings, [ [ 'TAR_ENTRY_INFO', `stripping ${warn} from absolute path`, { path: normPath(isWindows ? absolute : f) }, ], ]) t.match(ws.header, { cksumValid: true, needPax: false, path: normPath(absolute.replace(/^(\/|[a-z]:[/\\])*/i, '')), mode: isWindows ? 0o666 : 0o644, size: 512, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) t.test('preservePaths=true', t => { t.plan(2) // with preservePaths, strictness doesn't matter ;[true, false].forEach(strict => { t.test('strict=' + strict, t => { const warnings = [] const ws = new WriteEntry(isWindows ? absolute : f, { cwd: files, strict: strict, preservePaths: true, onwarn: (c, m, p) => warnings.push([c, m, p]), }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(warnings.length, 0) t.match(ws.header, { cksumValid: true, needPax: false, path: normPath(isWindows ? absolute : f), mode: isWindows ? 0o666 : 0o644, size: 512, linkpath: null, uname: 'isaacs', gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) }) }) t.test('preservePaths=false strict=true', t => { t.throws( _ => { new WriteEntry(isWindows ? absolute : f, { strict: true, cwd: files, }) }, { message: /stripping .* from absolute path/, path: normPath(isWindows ? absolute : f), }, ) t.end() }) t.end() }) t.throws(() => new WriteEntry(null), TypeError) t.test('no user environ, sets uname to empty string', t => { delete process.env.USER const ws = new WriteEntry('512-bytes.txt', { cwd: files }) let out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(out.length, 1024) t.match(ws.header, { cksumValid: true, needPax: false, path: '512-bytes.txt', mode: isWindows ? 0o666 : 0o644, size: 512, uname: '', linkpath: null, gname: null, devmaj: 0, devmin: 0, }) t.end() }) }) t.test( 'an unsuppored type', { skip: isWindows && '/dev/random on windows', }, t => { const ws = new WriteEntry('/dev/random', { preservePaths: true }) ws.on('data', _chunk => { throw new Error('should not get data from random') }) ws.on('stat', stat => { t.match(stat, { dev: Number, mode: 0o020666, nlink: 1, rdev: Number, blksize: Number, ino: Number, size: 0, blocks: 0, }) t.ok(stat.isCharacterDevice(), 'random is a character device') }) ws.on('end', _ => { t.match(ws, { type: 'Unsupported', path: '/dev/random' }) t.end() }) }, ) t.test('readlink fail', t => { const expect = { syscall: 'readlink', path: String, } // pretend everything is a symbolic link, then read something that isn't t.teardown(mutateFS.statType('SymbolicLink')) t.throws(_ => { return new WriteEntrySync('write-entry.js', { cwd: __dirname }) }, expect) new WriteEntry('write-entry.js', { cwd: __dirname }).on('error', er => { t.match(er, expect) t.equal(normPath(er.path), normPath(__filename)) t.end() }) }) t.test('open fail', t => { t.teardown(mutateFS.fail('open', new Error('pwn'))) t.throws(_ => new WriteEntrySync('write-entry.js', { cwd: __dirname }), { message: 'pwn', }) new WriteEntry('write-entry.js', { cwd: __dirname }).on('error', er => { t.match(er, { message: 'pwn' }) t.end() }) }) t.test('read fail', t => { const expect = { message: 'EISDIR: illegal operation on a directory, read', code: 'EISDIR', syscall: 'read', } // pretend everything is a file, then read something that isn't t.teardown( mutateFS.statMutate((er, st) => { if (er) { return [er, st] } st.isFile = () => true st.size = 123 }), ) t.throws( _ => new WriteEntrySync('fixtures', { cwd: __dirname, }), expect, ) new WriteEntry('fixtures', { cwd: __dirname }).on('error', er => { t.match(er, expect) t.end() }) }) t.test('read invalid EOF', t => { t.teardown(mutateFS.mutate('read', (er, _bytesRead) => [er, 0])) const expect = { message: 'encountered unexpected EOF', path: normPath(__filename), syscall: 'read', code: 'EOF', } t.throws( _ => new WriteEntrySync('write-entry.js', { cwd: __dirname }), expect, ) new WriteEntry('write-entry.js', { cwd: __dirname }).on('error', er => { t.match(er, expect) t.end() }) }) t.test('read overflow expectation', t => { t.teardown( mutateFS.statMutate((_er, st) => { if (st) { st.size = 3 } }), ) const f = '512-bytes.txt' const expect = { message: 'did not encounter expected EOF', path: normPath(path.resolve(files, f)), syscall: 'read', code: 'EOF', } t.plan(2) t.throws( _ => new WriteEntrySync(f, { cwd: files, maxReadSize: 2 }), expect, ) new WriteEntry(f, { cwd: files, maxReadSize: 2 }) .on('error', er => { t.match(er, expect) }) .resume() }) t.test('short reads', t => { t.teardown(mutateFS.zenoRead()) const cases = { '1024-bytes.txt': new Array(1024).join('x') + '\n', '100-byte-filename-cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc': new Array(101).join('c'), } const maxReadSize = [null, 1024, 100, 111] Object.keys(cases).forEach(filename => { t.test(filename.split('byte').shift() + 'byte', t => { const contents = cases[filename] maxReadSize.forEach(mRS => { t.test('maxReadSize=' + mRS, t => { let out = [] const ws = new WriteEntry(filename, { maxReadSize: mRS, cwd: files, }) ws.on('data', c => out.push(c)) ws.on('end', _ => { out = Buffer.concat(out) t.equal(out.length, 512 * Math.ceil(1 + contents.length / 512)) t.equal( out.slice(512).toString().replace(/\0.*$/, ''), contents, ) const wss = new WriteEntrySync(filename, { cwd: files }) const syncOut = wss.read() t.equal(syncOut.length, out.length) t.equal( syncOut.subarray(512).toString(), out.slice(512).toString(), ) t.end() }) }) }) t.end() }) }) t.end() }) t.test( 'win32 path conversion', { skip: isWindows && 'no need to test on windows', }, t => { const ws = new WriteEntry('long-path\\r', { cwd: files, win32: true, }) t.equal(ws.path, 'long-path/r') t.end() }, ) t.test( 'win32 <|>? in paths', { skip: isWindows && 'do not create annoying junk on windows systems', }, t => { const file = path.resolve(fixtures, '<|>?.txt') const uglyName = Buffer.from( 'ef80bcef81bcef80beef80bf2e747874', 'hex', ).toString() const ugly = path.resolve(fixtures, uglyName) t.teardown(_ => { rimraf.sync(file) rimraf.sync(ugly) }) fs.writeFileSync(ugly, '<|>?') const wc = new WriteEntry(uglyName, { cwd: fixtures, win32: true, }) const out = [] wc.on('data', c => out.push(c)) wc.on('end', _ => { const data = Buffer.concat(out).toString() t.equal(data.slice(0, 4), '<|>?') t.end() }) t.equal(wc.path, '<|>?.txt') t.equal(wc.absolute, ugly) }, ) t.test('uid doesnt match, dont set uname', t => { t.teardown( mutateFS.statMutate((_er, st) => { if (st) { st.uid -= 1 } }), ) const ws = new WriteEntry('long-path/r', { cwd: files, }) t.notOk(ws.uname) t.end() }) t.test('override absolute to some other file', t => { const ws = new WriteEntry('blerg', { absolute: files + '/one-byte.txt', }) const out = [] ws.on('data', c => out.push(c)) ws.on('end', _ => { const data = Buffer.concat(out) t.equal(data.length, 1024) t.match(data.subarray(512).toString(), /^a\0{511}$/) t.match(ws, { path: 'blerg', header: { size: 1 }, }) const wss = new WriteEntrySync('blerg', { absolute: files + '/one-byte.txt', }) const sdata = wss.read() t.equal(sdata.length, 1024) t.match(sdata.subarray(512).toString(), /^a\0{511}$/) t.match(wss, { path: 'blerg', header: { size: 1 }, }) t.end() }) }) t.test('portable entries, nothing platform-specific', t => { const om = 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt' const ws = new WriteEntry(om, { cwd: files, portable: true, }) const pexpect = { atime: null, charset: null, comment: null, ctime: null, gid: null, gname: null, linkpath: null, path: 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', size: 2, uid: null, uname: null, dev: null, ino: null, nlink: null, } const hexpect = { size: 2, ctime: null, atime: null, uid: null, uname: '', gid: null, gname: '', } const ps = new Parser() const wss = new WriteEntrySync(om, { cwd: files, portable: true, }) ps.on('entry', entry => { t.match(entry.extended, pexpect) t.match(entry.header, hexpect) }) ps.end(wss.read()) const p = new Parser() ws.pipe(p) p.on('entry', entry => { t.match(entry.extended, pexpect) t.match(entry.header, hexpect) t.end() }) }) t.test('no mtime', t => { const om = 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt' const ws = new WriteEntry(om, { cwd: files, noMtime: true, portable: true, }) const pexpect = { atime: null, mtime: null, charset: null, comment: null, ctime: null, gid: null, gname: null, linkpath: null, path: 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', size: 2, uid: null, uname: null, dev: null, ino: null, nlink: null, } const hexpect = { size: 2, ctime: null, atime: null, mtime: null, uid: null, uname: '', gid: null, gname: '', } const ps = new Parser() const wss = new WriteEntrySync(om, { cwd: files, portable: true, noMtime: true, }) ps.on('entry', entry => { t.match(entry.extended, pexpect) t.match(entry.header, hexpect) }) ps.end(wss.read()) const p = new Parser() ws.pipe(p) p.on('entry', entry => { t.match(entry.extended, pexpect) t.match(entry.header, hexpect) t.end() }) }) t.test('force mtime', t => { const om = 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt' const date = new Date('1979-07-01T19:10:00.000Z') const ws = new WriteEntry(om, { cwd: files, mtime: date, portable: true, }) const pexpect = { atime: null, mtime: new Date('1979-07-01T19:10:00.000Z'), charset: null, comment: null, ctime: null, gid: null, gname: null, linkpath: null, path: 'long-path/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/Ω.txt', size: 2, uid: null, uname: null, dev: null, ino: null, nlink: null, } const hexpect = { size: 2, ctime: null, atime: null, mtime: new Date('1979-07-01T19:10:00.000Z'), uid: null, uname: '', gid: null, gname: '', } const ps = new Parser() const wss = new WriteEntrySync(om, { cwd: files, portable: true, mtime: new Date('1979-07-01T19:10:00.000Z'), }) ps.on('entry', entry => { t.match(entry.extended, pexpect) t.match(entry.header, hexpect) }) ps.end(wss.read()) const p = new Parser() ws.pipe(p) p.on('entry', entry => { t.match(entry.extended, pexpect) t.match(entry.header, hexpect) t.end() }) }) t.test('portable dir entries, no mtime', t => { const dir = 'long-path/' const ws = new WriteEntry(dir, { cwd: files, portable: true, }) const hexpect = { path: 'long-path/', ctime: null, atime: null, uid: null, uname: '', gid: null, gname: '', mtime: null, } const ps = new Parser() const wss = new WriteEntrySync(dir, { cwd: files, portable: true, }) ps.on('entry', entry => { t.match(entry.header, hexpect) }) ps.end(wss.read()) const p = new Parser() ws.pipe(p) p.on('entry', entry => { t.match(entry.header, hexpect) t.end() }) }) t.test('writing more data than is appropriate', t => { const path = t.testdir({ file: 'hello', }) const wss = new WriteEntry(`${path}/file`) wss.on('error', er => { t.match(er, { message: 'writing more data than expected', }) t.end() }) wss.on('stat', () => wss.write(Buffer.from('some more stuff'))) }) t.test('write entry from read entry', t => { const data = makeTar([ { path: '$', type: 'File', size: 10, mode: isWindows ? 0o777 : 0o755, uid: 123, gid: 321, ctime: new Date('1979-07-01'), atime: new Date('1980-08-17'), }, '$$$$$$$$$$', { path: 'blep', type: 'SymbolicLink', linkpath: 'xyz', }, '', '', ]) t.test('basic file', t => { const fileEntry = new ReadEntry(new Header(data)) const wetFile = new WriteEntryTar(fileEntry) const out = [] let wetFileEnded = false wetFile.on('data', c => out.push(c)) wetFile.on('end', _ => (wetFileEnded = true)) fileEntry.write(data.subarray(512, 550)) fileEntry.write(data.subarray(550, 1000)) fileEntry.end(data.subarray(1000, 1024)) t.equal(wetFileEnded, true) const result = Buffer.concat(out) t.equal(result.length, 1024) t.equal(result.toString().replace(/\0.*$/, ''), '$') const body = result.subarray(512).toString().replace(/\0*$/, '') t.equal(body, '$$$$$$$$$$') t.end() }) t.test('basic file', t => { const data = makeTar([ { path: '$', type: 'Directory', size: 0, mode: isWindows ? 0o777 : 0o755, uid: 123, gid: 321, ctime: new Date('1979-07-01'), atime: new Date('1980-08-17'), mtime: new Date('1997-06-21'), }, '', '', ]) const fileEntry = new ReadEntry(new Header(data)) let entryInOWE = undefined const wetFile = new WriteEntryTar(fileEntry, { portable: true, onWriteEntry: self => { entryInOWE = self t.equal(self.path, '$') t.equal(self.header, undefined) }, }) const out = [] let wetFileEnded = false wetFile.on('data', c => out.push(c)) wetFile.on('end', () => { wetFileEnded = true t.equal(entryInOWE, wetFile) }) fileEntry.end() t.equal(wetFileEnded, true) const result = Buffer.concat(out) t.match(new Header(result), { mtime: null }) t.end() }) t.test('with pax header', t => { const fileEntryPax = new ReadEntry(new Header(data)) fileEntryPax.path = new Array(200).join('$') const wetPax = new WriteEntryTar(fileEntryPax) let wetPaxEnded = false const out = [] wetPax.on('data', c => out.push(c)) wetPax.on('end', _ => (wetPaxEnded = true)) fileEntryPax.write(data.subarray(512, 550)) fileEntryPax.write(data.subarray(550, 1000)) fileEntryPax.end(data.subarray(1000, 1024)) t.equal(wetPaxEnded, true) const result = Buffer.concat(out) t.equal(result.length, 2048) t.match(result.subarray(1024, 1124).toString(), /^\$+\0?$/) const body = result.subarray(1536).toString().replace(/\0*$/, '') t.match(new Header(result), { type: 'ExtendedHeader' }) t.equal(body, '$$$$$$$$$$') t.end() }) t.test('pax and portable', t => { const fileEntryPax = new ReadEntry(new Header(data)) fileEntryPax.path = new Array(200).join('$') const wetPax = new WriteEntryTar(fileEntryPax, { portable: true, }) let wetPaxEnded = false const out = [] wetPax.on('data', c => out.push(c)) wetPax.on('end', _ => (wetPaxEnded = true)) fileEntryPax.write(data.subarray(512, 550)) fileEntryPax.write(data.subarray(550, 1000)) fileEntryPax.end(data.subarray(1000, 1024)) t.equal(wetPaxEnded, true) const result = Buffer.concat(out) t.equal(result.length, 2048) t.match(result.subarray(1024, 1124).toString(), /^\$+\0?$/) t.match(new Header(result), { type: 'ExtendedHeader' }) t.match(new Header(result.subarray(1024)), { ctime: null, atime: null, uname: '', gname: '', }) const body = result.subarray(1536).toString().replace(/\0*$/, '') t.equal(body, '$$$$$$$$$$') t.end() }) t.test('pax, portable, and noMtime', t => { const fileEntryPax = new ReadEntry(new Header(data)) fileEntryPax.path = new Array(200).join('$') const wetPax = new WriteEntryTar(fileEntryPax, { noMtime: true, portable: true, }) let wetPaxEnded = false const out = [] wetPax.on('data', c => out.push(c)) wetPax.on('end', _ => (wetPaxEnded = true)) fileEntryPax.write(data.subarray(512, 550)) fileEntryPax.write(data.subarray(550, 1000)) fileEntryPax.end(data.subarray(1000, 1024)) t.equal(wetPaxEnded, true) const result = Buffer.concat(out) t.equal(result.length, 2048) t.match(result.subarray(1024, 1124).toString(), /^\$+\0?$/) t.match(new Header(result), { type: 'ExtendedHeader' }) t.match(new Header(result.subarray(1024)), { mtime: null, ctime: null, atime: null, uname: '', gname: '', }) const body = result.subarray(1536).toString().replace(/\0*$/, '') t.equal(body, '$$$$$$$$$$') t.end() }) t.test('abs path', t => { const fileEntry = new ReadEntry(new Header(data)) fileEntry.path = '/a/b/c' t.test('warn', t => { const warnings = [] new WriteEntryTar(fileEntry, { onwarn: (code, msg, data) => warnings.push(code, msg, data), }) t.match(warnings, [ 'TAR_ENTRY_INFO', 'stripping / from absolute path', { path: '/a/b/c', }, ]) t.end() }) t.test('preserve', t => { const warnings = [] new WriteEntryTar(fileEntry, { onwarn: (code, msg, data) => warnings.push(code, msg, data), preservePaths: true, }) t.same(warnings, []) t.end() }) t.test('throw', t => { t.throws( _ => new WriteEntryTar(fileEntry, { strict: true, }), ) t.end() }) t.end() }) t.test('no block remain', t => { const readEntry = new ReadEntry( new Header({ size: 512, type: 'File', path: 'x', }), ) const wet = new WriteEntryTar(readEntry) const out = [] wet.on('data', c => out.push(c)) let wetEnded = false wet.on('end', _ => (wetEnded = true)) t.equal(wetEnded, false) readEntry.end(Buffer.from(new Array(513).join('@'))) t.equal(wetEnded, true) const res = Buffer.concat(out) t.equal(res.length, 1024) t.match(res.subarray(512).toString(), /^@+$/) t.end() }) t.test('write more than appropriate', t => { const readEntry = new ReadEntry( new Header({ path: 'x', type: 'File', size: '1', }), ) const wet = new WriteEntryTar(readEntry) t.throws(_ => wet.write(Buffer.from(new Array(1024).join('x')))) t.end() }) t.end() }) // https://github.com/npm/node-tar/issues/284 t.test('prefix and hard links', t => { const dir = path.resolve(fixtures, 'writeentry-prefix-hardlinks') rimraf.sync(dir) t.teardown(_ => rimraf.sync(dir)) mkdirp.sync(dir + '/in/z/b/c') fs.writeFileSync(dir + '/in/target', 'ddd') fs.linkSync(dir + '/in/target', dir + '/in/z/b/c/d') fs.linkSync(dir + '/in/target', dir + '/in/z/b/d') fs.linkSync(dir + '/in/target', dir + '/in/z/d') fs.linkSync(dir + '/in/target', dir + '/in/y') const long = 'y'.repeat(250) fs.linkSync(dir + '/in/target', dir + '/in/' + long) const expect = [ { type: 'Directory', path: 'out/x/', }, { type: 'File', size: 3, path: 'out/x/target', }, 'ddd\0', { path: 'out/x/y', type: 'Link', linkpath: 'out/x/target', }, { path: 'PaxHeader/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy', type: 'ExtendedHeader', }, new RegExp( '^266 path=out.x.' + long + '[\\w\\W]*linkpath=out.x.target', ), { path: 'out/x/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy', type: 'Link', linkpath: 'out/x/target', }, { type: 'Directory', path: 'out/x/z/', }, { type: 'Directory', path: 'out/x/z/b/', }, { path: 'out/x/z/d', type: 'Link', linkpath: 'out/x/target', }, { type: 'Directory', path: 'out/x/z/b/c/', }, { path: 'out/x/z/b/d', type: 'Link', linkpath: 'out/x/target', }, { path: 'out/x/z/b/c/d', type: 'Link', linkpath: 'out/x/target', }, ] const check = (out, t) => { const data = Buffer.concat(out) expect.forEach((e, i) => { if (typeof e === 'string') { t.equal(data.subarray(i * 512, i * 512 + e.length).toString(), e) } else if (e instanceof RegExp) { t.match(data.subarray(i * 512, (i + 1) * 512).toString(), e) } else { t.match(new Header(data.subarray(i * 512, (i + 1) * 512)), e) } }) } const runTest = async (t, path, Class) => { const linkCache = new Map() const statCache = new Map() const opt = { cwd: dir + '/in', prefix: 'out/x', noDirRecurse: true, linkCache, statCache, } const out = [] const entry = path => new Promise(resolve => { const p = new Class(path, opt) p.on('end', resolve) p.on('data', d => out.push(d)) }) await entry(path) if (path === '.') { path = './' } await entry(`${path}target`) await entry(`${path}y`) await entry(`${path}${long}`) await entry(`${path}z`) await entry(`${path}z/b`) await entry(`${path}z/d`) await entry(`${path}z/b/c`) await entry(`${path}z/b/d`) await entry(`${path}z/b/c/d`) check(out, t) } t.test('async', t => { t.test('.', t => runTest(t, '.', WriteEntry)) return t.test('./', t => runTest(t, './', WriteEntry)) }) t.test('sync', t => { t.test('.', t => runTest(t, '.', WriteEntrySync)) return t.test('./', t => runTest(t, './', WriteEntrySync)) }) t.end() }) t.test('prefix and hard links from tar entries', t => { const long = 'y'.repeat(250) const expect = [ { type: 'Directory', path: 'out/x/', }, { type: 'File', size: 3, path: 'out/x/target', }, 'ddd\0', { path: 'out/x/y', type: 'Link', linkpath: 'out/x/target', }, { path: 'PaxHeader/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy', type: 'ExtendedHeader', }, new RegExp( '^266 path=out.x.' + long + '[\\w\\W]*linkpath=out.x.target', ), { path: 'out/x/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy', type: 'Link', linkpath: 'out/x/target', }, { type: 'Directory', path: 'out/x/z/', }, { type: 'Directory', path: 'out/x/z/b/', }, { path: 'out/x/z/d', type: 'Link', linkpath: 'out/x/target', }, { type: 'Directory', path: 'out/x/z/b/c/', }, { path: 'out/x/z/b/d', type: 'Link', linkpath: 'out/x/target', }, { path: 'out/x/z/b/c/d', type: 'Link', linkpath: 'out/x/target', }, ] const data = makeTar([ { type: 'Directory', path: './', }, { type: 'File', size: 3, path: 'target', }, 'ddd\0', { path: 'y', type: 'Link', linkpath: 'target', }, { path: 'PaxHeader/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy', type: 'ExtendedHeader', size: ('260 path=' + long + '\n19 linkpath=target\n').length, }, '260 path=' + long + '\n19 linkpath=target\n', { path: 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/', }, { type: 'Directory', path: 'z/b/', }, { path: 'z/d', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/b/c/', }, { path: 'z/b/d', type: 'Link', linkpath: 'target', }, { path: 'z/b/c/d', type: 'Link', linkpath: 'target', }, '', '', ]) const check = (out, t) => { const data = Buffer.concat(out) expect.forEach((e, i) => { if (typeof e === 'string') { t.equal(data.subarray(i * 512, i * 512 + e.length).toString(), e) } else if (e instanceof RegExp) { t.match(data.subarray(i * 512, (i + 1) * 512).toString(), e) } else { t.match(new Header(data.subarray(i * 512, (i + 1) * 512)), e) } }) } const runTest = async (t, _path) => { const linkCache = new Map() const statCache = new Map() const opt = { prefix: 'out/x', noDirRecurse: true, linkCache, statCache, } const out = [] const parser = new Parser({ strict: true, onReadEntry: readEntry => { const p = new WriteEntryTar(readEntry, opt) p.on('data', d => out.push(d)) }, }) parser.on('end', () => check(out, t)) parser.end(data) } t.test('.', t => runTest(t, '.')) t.test('./', t => runTest(t, './')) t.end() }) t.test('hard links and no prefix', t => { const dir = path.resolve(fixtures, 'writeentry-prefix-hardlinks') t.teardown(_ => rimraf.sync(dir)) mkdirp.sync(dir + '/in/z/b/c') fs.writeFileSync(dir + '/in/target', 'ddd') fs.linkSync(dir + '/in/target', dir + '/in/z/b/c/d') fs.linkSync(dir + '/in/target', dir + '/in/z/b/d') fs.linkSync(dir + '/in/target', dir + '/in/z/d') fs.linkSync(dir + '/in/target', dir + '/in/y') const expect = [ { type: 'Directory', path: './', }, { type: 'File', size: 3, path: 'target', }, 'ddd\0', { path: 'y', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/', }, { type: 'Directory', path: 'z/b/', }, { path: 'z/d', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/b/c/', }, { path: 'z/b/d', type: 'Link', linkpath: 'target', }, { path: 'z/b/c/d', type: 'Link', linkpath: 'target', }, ] const check = (out, t) => { const data = Buffer.concat(out) expect.forEach((e, i) => { if (typeof e === 'string') { t.equal(data.subarray(i * 512, i * 512 + e.length).toString(), e) } else { t.match(new Header(data.subarray(i * 512, (i + 1) * 512)), e) } }) } const runTest = async (t, path, Class) => { const linkCache = new Map() const statCache = new Map() const opt = { cwd: dir + '/in', linkCache, statCache, } const out = [] const entry = path => new Promise(resolve => { const p = new Class(path, opt) p.on('end', resolve) p.on('data', d => out.push(d)) }) await entry(path) if (path === '.') { path = './' } await entry(`${path}target`) await entry(`${path}y`) await entry(`${path}z`) await entry(`${path}z/b`) await entry(`${path}z/d`) await entry(`${path}z/b/c`) await entry(`${path}z/b/d`) await entry(`${path}z/b/c/d`) check(out, t) } t.test('async', t => { t.test('.', t => runTest(t, '.', WriteEntry)) return t.test('./', t => runTest(t, './', WriteEntry)) }) t.test('sync', t => { t.test('.', t => runTest(t, '.', WriteEntrySync)) return t.test('./', t => runTest(t, './', WriteEntrySync)) }) t.end() }) t.test('hard links from tar entries and no prefix', t => { const expect = [ { type: 'Directory', path: './', }, { type: 'File', size: 3, path: 'target', }, 'ddd\0', { path: 'y', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/', }, { type: 'Directory', path: 'z/b/', }, { path: 'z/d', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/b/c/', }, { path: 'z/b/d', type: 'Link', linkpath: 'target', }, { path: 'z/b/c/d', type: 'Link', linkpath: 'target', }, ] const data = makeTar([ { type: 'Directory', path: './', }, { type: 'File', size: 3, path: 'target', }, 'ddd\0', { path: 'y', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/', }, { type: 'Directory', path: 'z/b/', }, { path: 'z/d', type: 'Link', linkpath: 'target', }, { type: 'Directory', path: 'z/b/c/', }, { path: 'z/b/d', type: 'Link', linkpath: 'target', }, { path: 'z/b/c/d', type: 'Link', linkpath: 'target', }, ]) const check = (out, t) => { const data = Buffer.concat(out) expect.forEach((e, i) => { if (typeof e === 'string') { t.equal(data.subarray(i * 512, i * 512 + e.length).toString(), e) } else if (e instanceof RegExp) { t.match(data.subarray(i * 512, (i + 1) * 512).toString(), e) } else { t.match(new Header(data.subarray(i * 512, (i + 1) * 512)), e) } }) } const runTest = async (t, _path) => { const linkCache = new Map() const statCache = new Map() const opt = { noDirRecurse: true, linkCache, statCache, } const out = [] const parser = new Parser({ onReadEntry: readEntry => { const p = new WriteEntryTar(readEntry, opt) p.on('data', d => out.push(d)) }, }) parser.on('end', () => check(out, t)) parser.end(data) } t.test('.', t => runTest(t, '.')) t.test('./', t => runTest(t, './')) t.end() }) t.test('myuid set by getuid() if available, otherwise 0', t => { const { getuid } = process process.getuid = null const noUid = new WriteEntry(__filename) t.equal(noUid.myuid, 0, 'set to zero if no getuid function') process.getuid = () => 123456789 const hasUid = new WriteEntry(__filename) t.equal(hasUid.myuid, 123456789, 'set to process.getuid()') process.getuid = getuid t.end() }) isaacs-node-tar-0a52f00/tsconfig.json000066400000000000000000000007451522005272700175220ustar00rootroot00000000000000{ "compilerOptions": { "types": [ "node" ], "rootDir": "./", "declaration": true, "declarationMap": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "inlineSources": true, "jsx": "react", "module": "nodenext", "moduleResolution": "nodenext", "noUncheckedIndexedAccess": true, "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": true, "strict": true, "target": "es2022" } }