├── .gitignore ├── .npmignore ├── .travis.yml ├── collaborators.md ├── lib ├── crc.js ├── extract.js ├── headers.js ├── index.js ├── newc.js ├── odc.js └── pack.js ├── package-lock.json ├── package.json ├── readme.md └── test ├── both.js ├── extract.js ├── fixtures ├── crc │ └── crc.cpio ├── newc │ ├── a.cpio │ ├── hello.cpio │ ├── multiple.cpio │ └── onefile.cpio └── odc │ ├── a.cpio │ ├── link.cpio │ ├── multiple.cpio │ └── onefile.cpio ├── newc.js ├── pack.js └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test/ 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '5.2' 4 | - '0.12' 5 | - '0.10' 6 | sudo: false 7 | -------------------------------------------------------------------------------- /collaborators.md: -------------------------------------------------------------------------------- 1 | ## Collaborators 2 | 3 | cpio-stream is only possible due to the excellent work of the following collaborators: 4 | 5 | 6 | 7 |
pirannaGitHub/piranna
finnpGitHub/finnp
8 | -------------------------------------------------------------------------------- /lib/crc.js: -------------------------------------------------------------------------------- 1 | var newc = require('./newc') 2 | 3 | exports.size = newc.size 4 | 5 | exports.decode = function (buf) { 6 | var check = newc.decodeHex(buf, 96) 7 | var header = newc.decode(buf) 8 | 9 | header.checksum = check 10 | 11 | return header 12 | } 13 | -------------------------------------------------------------------------------- /lib/extract.js: -------------------------------------------------------------------------------- 1 | var constants = require('constants') 2 | var util = require('util') 3 | var bl = require('bl') 4 | var headers = require('./headers') 5 | 6 | var Writable = require('readable-stream').Writable 7 | var PassThrough = require('readable-stream').PassThrough 8 | 9 | var noop = function () {} 10 | 11 | var emptyStream = function (self, offset) { 12 | var s = new Source(self, offset) 13 | s.end() 14 | return s 15 | } 16 | 17 | var Source = function (self, offset) { 18 | this._parent = self 19 | this.offset = offset 20 | PassThrough.call(this, { autoDestroy: false}) 21 | } 22 | 23 | util.inherits(Source, PassThrough) 24 | 25 | Source.prototype.destroy = function (err) { 26 | this._parent.destroy(err) 27 | } 28 | 29 | var Extract = function (opts) { 30 | if (!(this instanceof Extract)) return new Extract(opts) 31 | Writable.call(this, opts) 32 | 33 | var type 34 | 35 | this._offset = 0 36 | this._buffer = bl() 37 | this._strike = 0 38 | this._missing = 0 39 | this._onparse = noop 40 | this._header = null 41 | this._stream = null 42 | this._overflow = null 43 | this._cb = null 44 | this._locked = false 45 | this._destroyed = false 46 | this._end = false 47 | 48 | var self = this 49 | 50 | function oncontinue () { 51 | self._continue() 52 | } 53 | 54 | function onunlock (err) { 55 | self._locked = false 56 | if (err) return self.destroy(err) 57 | if (!self._stream) oncontinue() 58 | } 59 | 60 | function ontype () { 61 | try { 62 | type = headers.type(self._buffer) 63 | } catch (err) { 64 | self.emit('error', err) 65 | } 66 | 67 | if (type) this._parse(type.size, onheader) 68 | else this._parse(6, ontype) 69 | 70 | oncontinue() 71 | } 72 | 73 | function onheader () { 74 | try { 75 | var header = self._header = type.decode(self._buffer) 76 | } catch (err) { 77 | self.emit('error', err) 78 | } 79 | 80 | if (header) { 81 | header.type = typeFromMode(header.mode) 82 | this._parse(header._nameStrike, onname) 83 | } else { 84 | this._parse(type.size, onheader) 85 | } 86 | 87 | oncontinue() 88 | } 89 | 90 | function onsymlink () { 91 | var b = self._buffer 92 | var header = self._header 93 | var data = b.slice(0, header.size) 94 | try { 95 | header.linkname = data.toString() 96 | b.consume(header.size) 97 | } catch (err) { 98 | self.emit('error', err) 99 | } 100 | self.emit('entry', header, emptyStream(self, self._offset), function () { 101 | self._parse(6, ontype) 102 | oncontinue() 103 | }) 104 | } 105 | 106 | function onname () { 107 | var header = self._header 108 | var b = self._buffer 109 | 110 | try { 111 | header.name = b.slice(0, header._nameLength - 1).toString('ascii') 112 | b.consume(header._nameStrike) 113 | } catch (err) { 114 | self.emit('error', err) 115 | } 116 | 117 | if (header.name === 'TRAILER!!!') { 118 | self._onparse = noop 119 | self._end = true 120 | return oncontinue() 121 | } 122 | 123 | if (header.size === 0) { 124 | self.emit('entry', header, emptyStream(self, self._offset), onunlock) 125 | return self._parse(6, ontype) 126 | } 127 | 128 | if (header.type === 'symlink') { 129 | self._parse(header._sizeStrike, onsymlink, header.size) 130 | return oncontinue() 131 | } 132 | 133 | self._stream = new Source(self, self._offset) 134 | self.emit('entry', header, self._stream, onunlock) 135 | 136 | self._locked = true 137 | self._parse(header._sizeStrike, onstreamend, header.size) 138 | oncontinue() 139 | } 140 | 141 | function onstreamend () { 142 | self._stream = null 143 | 144 | self._parse(6, ontype) 145 | if (!self._locked) oncontinue() 146 | } 147 | 148 | this._parse(6, ontype) 149 | } 150 | util.inherits(Extract, Writable) 151 | 152 | Extract.prototype.destroy = function (err) { 153 | if (this._destroyed) return 154 | this._destroyed = true 155 | 156 | if (err) this.emit('error', err) 157 | this.emit('close') 158 | if (this._stream) this._stream.emit('close') 159 | } 160 | 161 | Extract.prototype._parse = function (strike, onparse, size) { 162 | if (this._destroyed) return 163 | this._offset += strike 164 | this._strike = strike 165 | this._missing = size || strike 166 | this._onparse = onparse 167 | } 168 | 169 | Extract.prototype._continue = function () { 170 | if (this._destroyed) return 171 | var cb = this._cb 172 | this._cb = noop 173 | if (this._overflow) this._write(this._overflow, undefined, cb) 174 | else cb() 175 | } 176 | 177 | Extract.prototype._write = function (data, enc, cb) { 178 | if (this._destroyed) return 179 | if (this._end) return cb() // ignore write after end 180 | 181 | var s = this._stream 182 | var b = this._buffer 183 | 184 | var strike = this._strike 185 | var missing = this._missing 186 | 187 | this._overflow = null 188 | 189 | // we do not reach end-of-chunk now. just forward it 190 | if (data.length < missing) { 191 | this._strike -= data.length 192 | this._missing -= data.length 193 | 194 | if (s) { 195 | s.write(data, cb) 196 | } else { 197 | b.append(data) 198 | cb() 199 | } 200 | 201 | return 202 | } 203 | 204 | // end-of-chunk. the parser should call cb. 205 | this._cb = cb 206 | this._missing = 0 207 | 208 | if (missing) { 209 | var data2 = data.slice(0, missing) 210 | 211 | if (s) s.end(data2) 212 | else b.append(data2) 213 | } 214 | 215 | // we did not reach strike padding 216 | if (data.length < strike) { 217 | this._strike -= data.length 218 | 219 | return 220 | } 221 | 222 | // end of entry file 223 | this._strike = 0 224 | 225 | this._overflow = data.slice(strike) 226 | 227 | this._onparse() 228 | } 229 | 230 | function typeFromMode (mode) { 231 | var cmpValue = mode & constants.S_IFMT 232 | if (cmpValue === constants.S_IFREG) return 'file' 233 | if (cmpValue === constants.S_IFDIR) return 'directory' 234 | if (cmpValue === constants.S_IFLNK) return 'symlink' 235 | if (cmpValue === constants.S_IFSOCK) return 'socket' 236 | if (cmpValue === constants.S_IFBLK) return 'block-device' 237 | if (cmpValue === constants.S_IFCHR) return 'character-device' 238 | if (cmpValue === constants.S_IFIFO) return 'fifo' 239 | return false 240 | } 241 | 242 | module.exports = Extract 243 | -------------------------------------------------------------------------------- /lib/headers.js: -------------------------------------------------------------------------------- 1 | var crc = require('./crc') 2 | var newc = require('./newc') 3 | var odc = require('./odc') 4 | 5 | exports.type = function (buf) { 6 | var type 7 | 8 | if (parseInt(buf.toString('ascii', 0, 2), 256) === parseInt(70707, 8)) { 9 | throw new Error('Old Binary format is not supported') 10 | } 11 | 12 | var magic = buf.toString('ascii', 0, 6) 13 | switch (magic) { 14 | // Big endianess 15 | 16 | case '070707': // Portable ASCII format 17 | type = odc 18 | break 19 | 20 | case '070701': // New ASCII format 21 | type = newc 22 | break 23 | 24 | case '070702': // New CRC format, same as new ASCII format but with check 25 | type = crc 26 | break 27 | 28 | // Small endianess 29 | 30 | case '707070': // Portable ASCII format 31 | case '707010': // New ASCII format 32 | case '707020': // New CRC format, same as new ASCII format but with check 33 | throw new Error('Small endianess not supported') 34 | 35 | // Unknown magic number 36 | 37 | default: 38 | throw new Error('Not a cpio (magic = "' + magic + '")') 39 | } 40 | 41 | buf.consume(6) 42 | return type 43 | } 44 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | exports.pack = require('./pack.js') 2 | exports.extract = require('./extract.js') 3 | -------------------------------------------------------------------------------- /lib/newc.js: -------------------------------------------------------------------------------- 1 | exports.size = 104 2 | 3 | exports.encode = function (opts) { 4 | if (opts.name[opts.name.length - 1] !== '\0') { 5 | opts.name += '\0' 6 | } 7 | var paddedName = padName(opts.name) 8 | 9 | var buf = new Buffer(110 + paddedName.length) 10 | if (opts.mtime instanceof Date) { 11 | opts.mtime = Math.round(opts.mtime.getTime() / 1000) 12 | } 13 | 14 | buf.write('070701', 0) 15 | buf.write(encodeHex(opts.ino, 8), 6) 16 | buf.write(encodeHex(opts.mode, 8), 14) 17 | buf.write(encodeHex(opts.uid, 8), 22) 18 | buf.write(encodeHex(opts.gid, 8), 30) 19 | buf.write(encodeHex(opts.nlink, 8), 38) 20 | buf.write(encodeHex(opts.mtime, 8), 46) 21 | buf.write(encodeHex(opts.size, 8), 54) 22 | buf.write(encodeHex(opts.devmajor, 8), 62) 23 | buf.write(encodeHex(opts.devminor, 8), 70) 24 | buf.write(encodeHex(opts.rdevmajor, 8), 78) 25 | buf.write(encodeHex(opts.rdevminor, 8), 86) 26 | buf.write(encodeHex(opts.name.length, 8), 94) 27 | buf.write(encodeHex(0, 8), 102) // check 28 | buf.write(paddedName, 110) 29 | 30 | return buf 31 | } 32 | 33 | exports.decode = function (buf) { 34 | var header = {} 35 | 36 | header.ino = decodeHex(buf) 37 | header.mode = decodeHex(buf, 8) 38 | header.uid = decodeHex(buf, 16) 39 | header.gid = decodeHex(buf, 24) 40 | header.nlink = decodeHex(buf, 32) 41 | header.mtime = new Date(decodeHex(buf, 40) * 1000) 42 | header.size = decodeHex(buf, 48) 43 | header.devmajor = decodeHex(buf, 56) 44 | header.devminor = decodeHex(buf, 64) 45 | header.rdevmajor = decodeHex(buf, 72) 46 | header.rdevminor = decodeHex(buf, 80) 47 | header._nameLength = decodeHex(buf, 88) 48 | 49 | header._sizeStrike = header.size + 4 - (header.size % 4 || 4) 50 | header._nameStrike = header._nameLength + 4 - ((6 + exports.size + header._nameLength) % 4 || 4) 51 | 52 | buf.consume(exports.size) 53 | return header 54 | } 55 | 56 | function decodeHex (buf, pos, n) { 57 | pos = pos || 0 58 | n = n || 8 59 | return parseInt(buf.toString('ascii', pos, pos + n), 16) 60 | } 61 | 62 | function encodeHex (number, bytes) { 63 | number = number || 0 64 | var str = (Math.min(number, Math.pow(16, bytes) - 1)).toString(16) 65 | str = str.toUpperCase() 66 | str = Array(bytes - str.length + 1).join('0') + str 67 | return str 68 | } 69 | 70 | function padName (name) { 71 | var modulo = (name.length + 2) % 4 72 | var padding = (4 - modulo) % 4 73 | return name + Array(padding + 1).join('\0') 74 | } 75 | 76 | exports.decodeHex = decodeHex 77 | -------------------------------------------------------------------------------- /lib/odc.js: -------------------------------------------------------------------------------- 1 | exports.size = 70 2 | 3 | exports.encode = function (opts) { 4 | if (opts.name[opts.name.length - 1] !== '\0') { 5 | opts.name += '\0' 6 | } 7 | 8 | var buf = new Buffer(54 + 22 + opts.name.length) 9 | if (opts.mtime instanceof Date) { 10 | opts.mtime = Math.round(opts.mtime.getTime() / 1000) 11 | } 12 | 13 | buf.write('070707', 0) 14 | buf.write(encodeOct(opts.dev, 6), 6) 15 | buf.write(encodeOct(opts.ino, 6), 12) 16 | buf.write(encodeOct(opts.mode, 6), 18) 17 | buf.write(encodeOct(opts.uid, 6), 24) 18 | buf.write(encodeOct(opts.gid, 6), 30) 19 | buf.write(encodeOct(opts.nlink, 6), 36) 20 | buf.write(encodeOct(opts.rdev, 6), 42) 21 | buf.write(encodeOct(opts.mtime, 11), 48) 22 | buf.write(encodeOct(opts.name.length, 6), 59) 23 | buf.write(encodeOct(opts.size, 11), 65) 24 | buf.write(opts.name, 76) 25 | 26 | return buf 27 | } 28 | 29 | exports.decode = function (buf) { 30 | var header = {} 31 | 32 | header.dev = decodeOct(buf) 33 | header.ino = decodeOct(buf, 6) 34 | header.mode = decodeOct(buf, 12) 35 | header.uid = decodeOct(buf, 18) 36 | header.gid = decodeOct(buf, 24) 37 | header.nlink = decodeOct(buf, 30) 38 | header.rdev = decodeOct(buf, 36) 39 | header.mtime = new Date(decodeOct(buf, 42, 11) * 1000) 40 | header._nameLength = decodeOct(buf, 53) 41 | header.size = decodeOct(buf, 59, 11) 42 | 43 | header._sizeStrike = header.size 44 | header._nameStrike = header._nameLength 45 | 46 | buf.consume(exports.size) 47 | return header 48 | } 49 | 50 | function decodeOct (buf, pos, n) { 51 | pos = pos || 0 52 | n = n || 6 53 | return parseInt(buf.toString('ascii', pos, pos + n), 8) 54 | } 55 | 56 | function encodeOct (number, bytes) { 57 | number = number || 0 58 | var str = (Math.min(number, Math.pow(8, bytes) - 1)).toString(8) 59 | str = Array(bytes - str.length + 1).join('0') + str 60 | return str 61 | } 62 | -------------------------------------------------------------------------------- /lib/pack.js: -------------------------------------------------------------------------------- 1 | var util = require('util') 2 | var constants = require('constants') 3 | var eos = require('end-of-stream') 4 | var Readable = require('stream').Readable 5 | var Writable = require('stream').Writable 6 | 7 | var END_OF_CPIO = {name: 'TRAILER!!!', nlink: 1} 8 | 9 | module.exports = Pack 10 | 11 | var Sink = function (to) { 12 | Writable.call(this) 13 | this.written = 0 14 | this._to = to 15 | this._destroyed = false 16 | } 17 | 18 | util.inherits(Sink, Writable) 19 | 20 | Sink.prototype._write = function (data, enc, cb) { 21 | this.written += data.length 22 | if (this._to._push(data)) return cb() 23 | this._to._drain = cb 24 | } 25 | 26 | Sink.prototype.destroy = function () { 27 | if (this._destroyed) return 28 | this._destroyed = true 29 | this.emit('close') 30 | } 31 | 32 | function Pack (opts) { 33 | if (!(this instanceof Pack)) return new Pack(opts) 34 | Readable.call(this, opts) 35 | 36 | this.newc = opts && opts.format === 'newc' 37 | 38 | if (this.newc) { 39 | this._encode = require('./newc').encode 40 | } else { 41 | this._encode = require('./odc').encode 42 | } 43 | 44 | this.padding = 512 45 | this._ino = 1 // cpio on mac just increases this one every time 46 | 47 | this._stream = null 48 | this._finalized = false 49 | this._finalizing = false 50 | this._destroyed = false 51 | this._drain = noop 52 | this._size = 0 53 | } 54 | 55 | util.inherits(Pack, Readable) 56 | 57 | Pack.prototype.entry = function (header, buffer, callback) { 58 | if (this._stream) throw new Error('already piping an entry') 59 | if (this._finalized || this._destroyed) return 60 | 61 | if (typeof buffer === 'function') { 62 | callback = buffer 63 | buffer = null 64 | } 65 | 66 | if (header.linkname) buffer = new Buffer(header.linkname) 67 | 68 | var self = this 69 | 70 | if (!callback) callback = noop 71 | 72 | if (!header.dev) header.dev = parseInt(777777, 8) 73 | if (!header.ino) header.ino = this._ino++ 74 | if (!header.mode) header.mode = parseInt(100644, 8) 75 | if (!header.nlink) header.nlink = 1 76 | if (!header.mtime) header.mtime = new Date() 77 | if (!header.rdevminor) header.rdevminor = header.rdev 78 | if (!header.devminor) header.devminor = header.dev 79 | 80 | if (header.type) header.mode = typeToMode(header.type, header.mode) 81 | 82 | if (typeof buffer === 'string') buffer = new Buffer(buffer) 83 | if (Buffer.isBuffer(buffer)) { 84 | header.size = buffer.length 85 | 86 | this._push(this._encode(header)) 87 | this._push(buffer) 88 | // if(buffer.length % 2 !== 0) this._push(new Buffer('\0')) 89 | if (this.newc) { 90 | var mod4 = buffer.length % 4 91 | var paddinglength = (4 - mod4) % 4 92 | this._push(new Buffer(new Array(paddinglength + 1).join('\0'))) 93 | } 94 | 95 | process.nextTick(callback) 96 | return new Void() 97 | } 98 | 99 | this._push(this._encode(header)) 100 | 101 | if ((header.mode & constants.S_IFMT) !== constants.S_IFREG) { 102 | process.nextTick(callback) 103 | return new Void() 104 | } 105 | 106 | var sink = new Sink(this) 107 | 108 | this._stream = sink 109 | 110 | eos(sink, function (err) { 111 | self._stream = null 112 | 113 | if (err) { 114 | self.destroy() 115 | return callback(err) 116 | } 117 | 118 | if (sink.written !== header.size) { 119 | self.destroy() 120 | return callback(new Error('size mismatch')) 121 | } 122 | 123 | // if(sink.written % 2 !== 0) self._push(new Buffer('\0')) 124 | if (self.newc) { 125 | var mod4 = sink.written % 4 126 | var paddinglength = (4 - mod4) % 4 127 | self._push(new Buffer(new Array(paddinglength + 1).join('\0'))) 128 | } 129 | 130 | if (self._finalizing) self.finalize() 131 | callback() 132 | }) 133 | 134 | return sink 135 | } 136 | 137 | var Void = function () { 138 | Writable.call(this) 139 | this._destroyed = false 140 | } 141 | 142 | util.inherits(Void, Writable) 143 | 144 | Void.prototype._write = function (data, enc, cb) { 145 | cb(new Error('No body allowed for this entry')) 146 | } 147 | 148 | Void.prototype.destroy = function () { 149 | if (this._destroyed) return 150 | this._destroyed = true 151 | this.emit('close') 152 | } 153 | 154 | Pack.prototype.finalize = function () { 155 | if (this._stream) { 156 | this._finalizing = true 157 | return 158 | } 159 | 160 | if (this._finalized) return 161 | 162 | this._push(this._encode(END_OF_CPIO)) 163 | 164 | var fill = new Buffer(this.padding) 165 | fill.fill(0) 166 | this.push(fill.slice(0, this.padding - this._size)) 167 | 168 | this.push(null) 169 | } 170 | 171 | Pack.prototype._push = function (data) { 172 | this._size += data.length 173 | if (this._size >= this.padding) this._push = this.push 174 | 175 | return this.push(data) 176 | } 177 | 178 | Pack.prototype.destroy = function (err) { 179 | if (this._destroyed) return 180 | this._destroyed = true 181 | 182 | if (err) this.emit('error', err) 183 | this.emit('close') 184 | if (this._stream && this._stream.destroy) this._stream.destroy() 185 | } 186 | 187 | Pack.prototype._read = function (size) { 188 | var drain = this._drain 189 | this._drain = noop 190 | drain() 191 | } 192 | 193 | function noop () {} 194 | 195 | var MASK = parseInt(7777, 8) 196 | 197 | function typeToMode (type, mode) { 198 | var value = 0 199 | if (type === 'file') value = constants.S_IFREG 200 | if (type === 'directory') value = constants.S_IFDIR 201 | if (type === 'symlink') value = constants.S_IFLNK 202 | if (type === 'socket') value = constants.S_IFSOCK 203 | if (type === 'block-device') value = constants.S_IFBLK 204 | if (type === 'character-device') value = constants.S_IFCHR 205 | if (type === 'fifo') value = constants.S_IFIFO 206 | return (value || (constants.S_IFMT & mode)) | (MASK & mode) 207 | } 208 | 209 | ['file', 'directory', 'symlink', 'socket', 'fifo'].forEach(function (type) { 210 | Pack.prototype[type] = function (header, buffer, callback) { 211 | header.type = type 212 | return this.entry(header, buffer, callback) 213 | } 214 | }) 215 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cpio-stream", 3 | "version": "1.4.3", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "cpio-stream", 9 | "version": "1.4.3", 10 | "license": "MIT", 11 | "dependencies": { 12 | "bl": "^1.0.0", 13 | "end-of-stream": "^1.1.0", 14 | "readable-stream": "^3.1.1" 15 | }, 16 | "devDependencies": { 17 | "concat-stream": "^2.0.0", 18 | "tape": "^4.9.2" 19 | } 20 | }, 21 | "node_modules/balanced-match": { 22 | "version": "1.0.2", 23 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 24 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 25 | "dev": true 26 | }, 27 | "node_modules/bl": { 28 | "version": "1.2.3", 29 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 30 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 31 | "dependencies": { 32 | "readable-stream": "^2.3.5", 33 | "safe-buffer": "^5.1.1" 34 | } 35 | }, 36 | "node_modules/bl/node_modules/readable-stream": { 37 | "version": "2.3.7", 38 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 39 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 40 | "dependencies": { 41 | "core-util-is": "~1.0.0", 42 | "inherits": "~2.0.3", 43 | "isarray": "~1.0.0", 44 | "process-nextick-args": "~2.0.0", 45 | "safe-buffer": "~5.1.1", 46 | "string_decoder": "~1.1.1", 47 | "util-deprecate": "~1.0.1" 48 | } 49 | }, 50 | "node_modules/bl/node_modules/safe-buffer": { 51 | "version": "5.1.2", 52 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 53 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 54 | }, 55 | "node_modules/bl/node_modules/string_decoder": { 56 | "version": "1.1.1", 57 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 58 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 59 | "dependencies": { 60 | "safe-buffer": "~5.1.0" 61 | } 62 | }, 63 | "node_modules/brace-expansion": { 64 | "version": "1.1.11", 65 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 66 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 67 | "dev": true, 68 | "dependencies": { 69 | "balanced-match": "^1.0.0", 70 | "concat-map": "0.0.1" 71 | } 72 | }, 73 | "node_modules/buffer-from": { 74 | "version": "1.1.2", 75 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 76 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 77 | "dev": true 78 | }, 79 | "node_modules/call-bind": { 80 | "version": "1.0.2", 81 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 82 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 83 | "dev": true, 84 | "dependencies": { 85 | "function-bind": "^1.1.1", 86 | "get-intrinsic": "^1.0.2" 87 | }, 88 | "funding": { 89 | "url": "https://github.com/sponsors/ljharb" 90 | } 91 | }, 92 | "node_modules/concat-map": { 93 | "version": "0.0.1", 94 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 95 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 96 | "dev": true 97 | }, 98 | "node_modules/concat-stream": { 99 | "version": "2.0.0", 100 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 101 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 102 | "dev": true, 103 | "engines": [ 104 | "node >= 6.0" 105 | ], 106 | "dependencies": { 107 | "buffer-from": "^1.0.0", 108 | "inherits": "^2.0.3", 109 | "readable-stream": "^3.0.2", 110 | "typedarray": "^0.0.6" 111 | } 112 | }, 113 | "node_modules/core-util-is": { 114 | "version": "1.0.3", 115 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 116 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 117 | }, 118 | "node_modules/deep-equal": { 119 | "version": "1.1.1", 120 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", 121 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", 122 | "dev": true, 123 | "dependencies": { 124 | "is-arguments": "^1.0.4", 125 | "is-date-object": "^1.0.1", 126 | "is-regex": "^1.0.4", 127 | "object-is": "^1.0.1", 128 | "object-keys": "^1.1.1", 129 | "regexp.prototype.flags": "^1.2.0" 130 | }, 131 | "funding": { 132 | "url": "https://github.com/sponsors/ljharb" 133 | } 134 | }, 135 | "node_modules/define-properties": { 136 | "version": "1.1.3", 137 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 138 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 139 | "dev": true, 140 | "dependencies": { 141 | "object-keys": "^1.0.12" 142 | }, 143 | "engines": { 144 | "node": ">= 0.4" 145 | } 146 | }, 147 | "node_modules/defined": { 148 | "version": "1.0.0", 149 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 150 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 151 | "dev": true 152 | }, 153 | "node_modules/dotignore": { 154 | "version": "0.1.2", 155 | "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", 156 | "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", 157 | "dev": true, 158 | "dependencies": { 159 | "minimatch": "^3.0.4" 160 | }, 161 | "bin": { 162 | "ignored": "bin/ignored" 163 | } 164 | }, 165 | "node_modules/end-of-stream": { 166 | "version": "1.4.4", 167 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 168 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 169 | "dependencies": { 170 | "once": "^1.4.0" 171 | } 172 | }, 173 | "node_modules/es-abstract": { 174 | "version": "1.19.1", 175 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", 176 | "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", 177 | "dev": true, 178 | "dependencies": { 179 | "call-bind": "^1.0.2", 180 | "es-to-primitive": "^1.2.1", 181 | "function-bind": "^1.1.1", 182 | "get-intrinsic": "^1.1.1", 183 | "get-symbol-description": "^1.0.0", 184 | "has": "^1.0.3", 185 | "has-symbols": "^1.0.2", 186 | "internal-slot": "^1.0.3", 187 | "is-callable": "^1.2.4", 188 | "is-negative-zero": "^2.0.1", 189 | "is-regex": "^1.1.4", 190 | "is-shared-array-buffer": "^1.0.1", 191 | "is-string": "^1.0.7", 192 | "is-weakref": "^1.0.1", 193 | "object-inspect": "^1.11.0", 194 | "object-keys": "^1.1.1", 195 | "object.assign": "^4.1.2", 196 | "string.prototype.trimend": "^1.0.4", 197 | "string.prototype.trimstart": "^1.0.4", 198 | "unbox-primitive": "^1.0.1" 199 | }, 200 | "engines": { 201 | "node": ">= 0.4" 202 | }, 203 | "funding": { 204 | "url": "https://github.com/sponsors/ljharb" 205 | } 206 | }, 207 | "node_modules/es-to-primitive": { 208 | "version": "1.2.1", 209 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 210 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 211 | "dev": true, 212 | "dependencies": { 213 | "is-callable": "^1.1.4", 214 | "is-date-object": "^1.0.1", 215 | "is-symbol": "^1.0.2" 216 | }, 217 | "engines": { 218 | "node": ">= 0.4" 219 | }, 220 | "funding": { 221 | "url": "https://github.com/sponsors/ljharb" 222 | } 223 | }, 224 | "node_modules/for-each": { 225 | "version": "0.3.3", 226 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 227 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 228 | "dev": true, 229 | "dependencies": { 230 | "is-callable": "^1.1.3" 231 | } 232 | }, 233 | "node_modules/fs.realpath": { 234 | "version": "1.0.0", 235 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 236 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 237 | "dev": true 238 | }, 239 | "node_modules/function-bind": { 240 | "version": "1.1.1", 241 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 242 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 243 | "dev": true 244 | }, 245 | "node_modules/get-intrinsic": { 246 | "version": "1.1.1", 247 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 248 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 249 | "dev": true, 250 | "dependencies": { 251 | "function-bind": "^1.1.1", 252 | "has": "^1.0.3", 253 | "has-symbols": "^1.0.1" 254 | }, 255 | "funding": { 256 | "url": "https://github.com/sponsors/ljharb" 257 | } 258 | }, 259 | "node_modules/get-symbol-description": { 260 | "version": "1.0.0", 261 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 262 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 263 | "dev": true, 264 | "dependencies": { 265 | "call-bind": "^1.0.2", 266 | "get-intrinsic": "^1.1.1" 267 | }, 268 | "engines": { 269 | "node": ">= 0.4" 270 | }, 271 | "funding": { 272 | "url": "https://github.com/sponsors/ljharb" 273 | } 274 | }, 275 | "node_modules/glob": { 276 | "version": "7.2.0", 277 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 278 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 279 | "dev": true, 280 | "dependencies": { 281 | "fs.realpath": "^1.0.0", 282 | "inflight": "^1.0.4", 283 | "inherits": "2", 284 | "minimatch": "^3.0.4", 285 | "once": "^1.3.0", 286 | "path-is-absolute": "^1.0.0" 287 | }, 288 | "engines": { 289 | "node": "*" 290 | }, 291 | "funding": { 292 | "url": "https://github.com/sponsors/isaacs" 293 | } 294 | }, 295 | "node_modules/has": { 296 | "version": "1.0.3", 297 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 298 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 299 | "dev": true, 300 | "dependencies": { 301 | "function-bind": "^1.1.1" 302 | }, 303 | "engines": { 304 | "node": ">= 0.4.0" 305 | } 306 | }, 307 | "node_modules/has-bigints": { 308 | "version": "1.0.1", 309 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", 310 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", 311 | "dev": true, 312 | "funding": { 313 | "url": "https://github.com/sponsors/ljharb" 314 | } 315 | }, 316 | "node_modules/has-symbols": { 317 | "version": "1.0.3", 318 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 319 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 320 | "dev": true, 321 | "engines": { 322 | "node": ">= 0.4" 323 | }, 324 | "funding": { 325 | "url": "https://github.com/sponsors/ljharb" 326 | } 327 | }, 328 | "node_modules/has-tostringtag": { 329 | "version": "1.0.0", 330 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 331 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 332 | "dev": true, 333 | "dependencies": { 334 | "has-symbols": "^1.0.2" 335 | }, 336 | "engines": { 337 | "node": ">= 0.4" 338 | }, 339 | "funding": { 340 | "url": "https://github.com/sponsors/ljharb" 341 | } 342 | }, 343 | "node_modules/inflight": { 344 | "version": "1.0.6", 345 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 346 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 347 | "dev": true, 348 | "dependencies": { 349 | "once": "^1.3.0", 350 | "wrappy": "1" 351 | } 352 | }, 353 | "node_modules/inherits": { 354 | "version": "2.0.4", 355 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 356 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 357 | }, 358 | "node_modules/internal-slot": { 359 | "version": "1.0.3", 360 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", 361 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", 362 | "dev": true, 363 | "dependencies": { 364 | "get-intrinsic": "^1.1.0", 365 | "has": "^1.0.3", 366 | "side-channel": "^1.0.4" 367 | }, 368 | "engines": { 369 | "node": ">= 0.4" 370 | } 371 | }, 372 | "node_modules/is-arguments": { 373 | "version": "1.1.1", 374 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 375 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 376 | "dev": true, 377 | "dependencies": { 378 | "call-bind": "^1.0.2", 379 | "has-tostringtag": "^1.0.0" 380 | }, 381 | "engines": { 382 | "node": ">= 0.4" 383 | }, 384 | "funding": { 385 | "url": "https://github.com/sponsors/ljharb" 386 | } 387 | }, 388 | "node_modules/is-bigint": { 389 | "version": "1.0.4", 390 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 391 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 392 | "dev": true, 393 | "dependencies": { 394 | "has-bigints": "^1.0.1" 395 | }, 396 | "funding": { 397 | "url": "https://github.com/sponsors/ljharb" 398 | } 399 | }, 400 | "node_modules/is-boolean-object": { 401 | "version": "1.1.2", 402 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 403 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 404 | "dev": true, 405 | "dependencies": { 406 | "call-bind": "^1.0.2", 407 | "has-tostringtag": "^1.0.0" 408 | }, 409 | "engines": { 410 | "node": ">= 0.4" 411 | }, 412 | "funding": { 413 | "url": "https://github.com/sponsors/ljharb" 414 | } 415 | }, 416 | "node_modules/is-callable": { 417 | "version": "1.2.4", 418 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", 419 | "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", 420 | "dev": true, 421 | "engines": { 422 | "node": ">= 0.4" 423 | }, 424 | "funding": { 425 | "url": "https://github.com/sponsors/ljharb" 426 | } 427 | }, 428 | "node_modules/is-core-module": { 429 | "version": "2.8.1", 430 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 431 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 432 | "dev": true, 433 | "dependencies": { 434 | "has": "^1.0.3" 435 | }, 436 | "funding": { 437 | "url": "https://github.com/sponsors/ljharb" 438 | } 439 | }, 440 | "node_modules/is-date-object": { 441 | "version": "1.0.5", 442 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 443 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 444 | "dev": true, 445 | "dependencies": { 446 | "has-tostringtag": "^1.0.0" 447 | }, 448 | "engines": { 449 | "node": ">= 0.4" 450 | }, 451 | "funding": { 452 | "url": "https://github.com/sponsors/ljharb" 453 | } 454 | }, 455 | "node_modules/is-negative-zero": { 456 | "version": "2.0.2", 457 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 458 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 459 | "dev": true, 460 | "engines": { 461 | "node": ">= 0.4" 462 | }, 463 | "funding": { 464 | "url": "https://github.com/sponsors/ljharb" 465 | } 466 | }, 467 | "node_modules/is-number-object": { 468 | "version": "1.0.6", 469 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", 470 | "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", 471 | "dev": true, 472 | "dependencies": { 473 | "has-tostringtag": "^1.0.0" 474 | }, 475 | "engines": { 476 | "node": ">= 0.4" 477 | }, 478 | "funding": { 479 | "url": "https://github.com/sponsors/ljharb" 480 | } 481 | }, 482 | "node_modules/is-regex": { 483 | "version": "1.1.4", 484 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 485 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 486 | "dev": true, 487 | "dependencies": { 488 | "call-bind": "^1.0.2", 489 | "has-tostringtag": "^1.0.0" 490 | }, 491 | "engines": { 492 | "node": ">= 0.4" 493 | }, 494 | "funding": { 495 | "url": "https://github.com/sponsors/ljharb" 496 | } 497 | }, 498 | "node_modules/is-shared-array-buffer": { 499 | "version": "1.0.1", 500 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", 501 | "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", 502 | "dev": true, 503 | "funding": { 504 | "url": "https://github.com/sponsors/ljharb" 505 | } 506 | }, 507 | "node_modules/is-string": { 508 | "version": "1.0.7", 509 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 510 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 511 | "dev": true, 512 | "dependencies": { 513 | "has-tostringtag": "^1.0.0" 514 | }, 515 | "engines": { 516 | "node": ">= 0.4" 517 | }, 518 | "funding": { 519 | "url": "https://github.com/sponsors/ljharb" 520 | } 521 | }, 522 | "node_modules/is-symbol": { 523 | "version": "1.0.4", 524 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 525 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 526 | "dev": true, 527 | "dependencies": { 528 | "has-symbols": "^1.0.2" 529 | }, 530 | "engines": { 531 | "node": ">= 0.4" 532 | }, 533 | "funding": { 534 | "url": "https://github.com/sponsors/ljharb" 535 | } 536 | }, 537 | "node_modules/is-weakref": { 538 | "version": "1.0.2", 539 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 540 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 541 | "dev": true, 542 | "dependencies": { 543 | "call-bind": "^1.0.2" 544 | }, 545 | "funding": { 546 | "url": "https://github.com/sponsors/ljharb" 547 | } 548 | }, 549 | "node_modules/isarray": { 550 | "version": "1.0.0", 551 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 552 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 553 | }, 554 | "node_modules/minimatch": { 555 | "version": "3.1.2", 556 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 557 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 558 | "dev": true, 559 | "dependencies": { 560 | "brace-expansion": "^1.1.7" 561 | }, 562 | "engines": { 563 | "node": "*" 564 | } 565 | }, 566 | "node_modules/minimist": { 567 | "version": "1.2.5", 568 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 569 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 570 | "dev": true 571 | }, 572 | "node_modules/object-inspect": { 573 | "version": "1.12.0", 574 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", 575 | "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", 576 | "dev": true, 577 | "funding": { 578 | "url": "https://github.com/sponsors/ljharb" 579 | } 580 | }, 581 | "node_modules/object-is": { 582 | "version": "1.1.5", 583 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", 584 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", 585 | "dev": true, 586 | "dependencies": { 587 | "call-bind": "^1.0.2", 588 | "define-properties": "^1.1.3" 589 | }, 590 | "engines": { 591 | "node": ">= 0.4" 592 | }, 593 | "funding": { 594 | "url": "https://github.com/sponsors/ljharb" 595 | } 596 | }, 597 | "node_modules/object-keys": { 598 | "version": "1.1.1", 599 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 600 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 601 | "dev": true, 602 | "engines": { 603 | "node": ">= 0.4" 604 | } 605 | }, 606 | "node_modules/object.assign": { 607 | "version": "4.1.2", 608 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 609 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 610 | "dev": true, 611 | "dependencies": { 612 | "call-bind": "^1.0.0", 613 | "define-properties": "^1.1.3", 614 | "has-symbols": "^1.0.1", 615 | "object-keys": "^1.1.1" 616 | }, 617 | "engines": { 618 | "node": ">= 0.4" 619 | }, 620 | "funding": { 621 | "url": "https://github.com/sponsors/ljharb" 622 | } 623 | }, 624 | "node_modules/once": { 625 | "version": "1.4.0", 626 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 627 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 628 | "dependencies": { 629 | "wrappy": "1" 630 | } 631 | }, 632 | "node_modules/path-is-absolute": { 633 | "version": "1.0.1", 634 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 635 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 636 | "dev": true, 637 | "engines": { 638 | "node": ">=0.10.0" 639 | } 640 | }, 641 | "node_modules/path-parse": { 642 | "version": "1.0.7", 643 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 644 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 645 | "dev": true 646 | }, 647 | "node_modules/process-nextick-args": { 648 | "version": "2.0.1", 649 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 650 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 651 | }, 652 | "node_modules/readable-stream": { 653 | "version": "3.6.0", 654 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 655 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 656 | "dependencies": { 657 | "inherits": "^2.0.3", 658 | "string_decoder": "^1.1.1", 659 | "util-deprecate": "^1.0.1" 660 | }, 661 | "engines": { 662 | "node": ">= 6" 663 | } 664 | }, 665 | "node_modules/regexp.prototype.flags": { 666 | "version": "1.4.1", 667 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", 668 | "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", 669 | "dev": true, 670 | "dependencies": { 671 | "call-bind": "^1.0.2", 672 | "define-properties": "^1.1.3" 673 | }, 674 | "engines": { 675 | "node": ">= 0.4" 676 | }, 677 | "funding": { 678 | "url": "https://github.com/sponsors/ljharb" 679 | } 680 | }, 681 | "node_modules/resolve": { 682 | "version": "1.22.0", 683 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 684 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 685 | "dev": true, 686 | "dependencies": { 687 | "is-core-module": "^2.8.1", 688 | "path-parse": "^1.0.7", 689 | "supports-preserve-symlinks-flag": "^1.0.0" 690 | }, 691 | "bin": { 692 | "resolve": "bin/resolve" 693 | }, 694 | "funding": { 695 | "url": "https://github.com/sponsors/ljharb" 696 | } 697 | }, 698 | "node_modules/resumer": { 699 | "version": "0.0.0", 700 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", 701 | "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", 702 | "dev": true, 703 | "dependencies": { 704 | "through": "~2.3.4" 705 | } 706 | }, 707 | "node_modules/safe-buffer": { 708 | "version": "5.2.1", 709 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 710 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 711 | "funding": [ 712 | { 713 | "type": "github", 714 | "url": "https://github.com/sponsors/feross" 715 | }, 716 | { 717 | "type": "patreon", 718 | "url": "https://www.patreon.com/feross" 719 | }, 720 | { 721 | "type": "consulting", 722 | "url": "https://feross.org/support" 723 | } 724 | ] 725 | }, 726 | "node_modules/side-channel": { 727 | "version": "1.0.4", 728 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 729 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 730 | "dev": true, 731 | "dependencies": { 732 | "call-bind": "^1.0.0", 733 | "get-intrinsic": "^1.0.2", 734 | "object-inspect": "^1.9.0" 735 | }, 736 | "funding": { 737 | "url": "https://github.com/sponsors/ljharb" 738 | } 739 | }, 740 | "node_modules/string_decoder": { 741 | "version": "1.3.0", 742 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 743 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 744 | "dependencies": { 745 | "safe-buffer": "~5.2.0" 746 | } 747 | }, 748 | "node_modules/string.prototype.trim": { 749 | "version": "1.2.5", 750 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", 751 | "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", 752 | "dev": true, 753 | "dependencies": { 754 | "call-bind": "^1.0.2", 755 | "define-properties": "^1.1.3", 756 | "es-abstract": "^1.19.1" 757 | }, 758 | "engines": { 759 | "node": ">= 0.4" 760 | }, 761 | "funding": { 762 | "url": "https://github.com/sponsors/ljharb" 763 | } 764 | }, 765 | "node_modules/string.prototype.trimend": { 766 | "version": "1.0.4", 767 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", 768 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", 769 | "dev": true, 770 | "dependencies": { 771 | "call-bind": "^1.0.2", 772 | "define-properties": "^1.1.3" 773 | }, 774 | "funding": { 775 | "url": "https://github.com/sponsors/ljharb" 776 | } 777 | }, 778 | "node_modules/string.prototype.trimstart": { 779 | "version": "1.0.4", 780 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", 781 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", 782 | "dev": true, 783 | "dependencies": { 784 | "call-bind": "^1.0.2", 785 | "define-properties": "^1.1.3" 786 | }, 787 | "funding": { 788 | "url": "https://github.com/sponsors/ljharb" 789 | } 790 | }, 791 | "node_modules/supports-preserve-symlinks-flag": { 792 | "version": "1.0.0", 793 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 794 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 795 | "dev": true, 796 | "engines": { 797 | "node": ">= 0.4" 798 | }, 799 | "funding": { 800 | "url": "https://github.com/sponsors/ljharb" 801 | } 802 | }, 803 | "node_modules/tape": { 804 | "version": "4.15.0", 805 | "resolved": "https://registry.npmjs.org/tape/-/tape-4.15.0.tgz", 806 | "integrity": "sha512-SfRmG2I8QGGgJE/MCiLH8c11L5XxyUXxwK9xLRD0uiK5fehRkkSZGmR6Y1pxOt8vJ19m3sY+POTQpiaVv45/LQ==", 807 | "dev": true, 808 | "dependencies": { 809 | "call-bind": "~1.0.2", 810 | "deep-equal": "~1.1.1", 811 | "defined": "~1.0.0", 812 | "dotignore": "~0.1.2", 813 | "for-each": "~0.3.3", 814 | "glob": "~7.2.0", 815 | "has": "~1.0.3", 816 | "inherits": "~2.0.4", 817 | "is-regex": "~1.1.4", 818 | "minimist": "~1.2.5", 819 | "object-inspect": "~1.12.0", 820 | "resolve": "~1.22.0", 821 | "resumer": "~0.0.0", 822 | "string.prototype.trim": "~1.2.5", 823 | "through": "~2.3.8" 824 | }, 825 | "bin": { 826 | "tape": "bin/tape" 827 | } 828 | }, 829 | "node_modules/through": { 830 | "version": "2.3.8", 831 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 832 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 833 | "dev": true 834 | }, 835 | "node_modules/typedarray": { 836 | "version": "0.0.6", 837 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 838 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 839 | "dev": true 840 | }, 841 | "node_modules/unbox-primitive": { 842 | "version": "1.0.1", 843 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", 844 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", 845 | "dev": true, 846 | "dependencies": { 847 | "function-bind": "^1.1.1", 848 | "has-bigints": "^1.0.1", 849 | "has-symbols": "^1.0.2", 850 | "which-boxed-primitive": "^1.0.2" 851 | }, 852 | "funding": { 853 | "url": "https://github.com/sponsors/ljharb" 854 | } 855 | }, 856 | "node_modules/util-deprecate": { 857 | "version": "1.0.2", 858 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 859 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 860 | }, 861 | "node_modules/which-boxed-primitive": { 862 | "version": "1.0.2", 863 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 864 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 865 | "dev": true, 866 | "dependencies": { 867 | "is-bigint": "^1.0.1", 868 | "is-boolean-object": "^1.1.0", 869 | "is-number-object": "^1.0.4", 870 | "is-string": "^1.0.5", 871 | "is-symbol": "^1.0.3" 872 | }, 873 | "funding": { 874 | "url": "https://github.com/sponsors/ljharb" 875 | } 876 | }, 877 | "node_modules/wrappy": { 878 | "version": "1.0.2", 879 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 880 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 881 | } 882 | }, 883 | "dependencies": { 884 | "balanced-match": { 885 | "version": "1.0.2", 886 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 887 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 888 | "dev": true 889 | }, 890 | "bl": { 891 | "version": "1.2.3", 892 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 893 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 894 | "requires": { 895 | "readable-stream": "^2.3.5", 896 | "safe-buffer": "^5.1.1" 897 | }, 898 | "dependencies": { 899 | "readable-stream": { 900 | "version": "2.3.7", 901 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 902 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 903 | "requires": { 904 | "core-util-is": "~1.0.0", 905 | "inherits": "~2.0.3", 906 | "isarray": "~1.0.0", 907 | "process-nextick-args": "~2.0.0", 908 | "safe-buffer": "~5.1.1", 909 | "string_decoder": "~1.1.1", 910 | "util-deprecate": "~1.0.1" 911 | } 912 | }, 913 | "safe-buffer": { 914 | "version": "5.1.2", 915 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 916 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 917 | }, 918 | "string_decoder": { 919 | "version": "1.1.1", 920 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 921 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 922 | "requires": { 923 | "safe-buffer": "~5.1.0" 924 | } 925 | } 926 | } 927 | }, 928 | "brace-expansion": { 929 | "version": "1.1.11", 930 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 931 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 932 | "dev": true, 933 | "requires": { 934 | "balanced-match": "^1.0.0", 935 | "concat-map": "0.0.1" 936 | } 937 | }, 938 | "buffer-from": { 939 | "version": "1.1.2", 940 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 941 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 942 | "dev": true 943 | }, 944 | "call-bind": { 945 | "version": "1.0.2", 946 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 947 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 948 | "dev": true, 949 | "requires": { 950 | "function-bind": "^1.1.1", 951 | "get-intrinsic": "^1.0.2" 952 | } 953 | }, 954 | "concat-map": { 955 | "version": "0.0.1", 956 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 957 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 958 | "dev": true 959 | }, 960 | "concat-stream": { 961 | "version": "2.0.0", 962 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 963 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 964 | "dev": true, 965 | "requires": { 966 | "buffer-from": "^1.0.0", 967 | "inherits": "^2.0.3", 968 | "readable-stream": "^3.0.2", 969 | "typedarray": "^0.0.6" 970 | } 971 | }, 972 | "core-util-is": { 973 | "version": "1.0.3", 974 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 975 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 976 | }, 977 | "deep-equal": { 978 | "version": "1.1.1", 979 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", 980 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", 981 | "dev": true, 982 | "requires": { 983 | "is-arguments": "^1.0.4", 984 | "is-date-object": "^1.0.1", 985 | "is-regex": "^1.0.4", 986 | "object-is": "^1.0.1", 987 | "object-keys": "^1.1.1", 988 | "regexp.prototype.flags": "^1.2.0" 989 | } 990 | }, 991 | "define-properties": { 992 | "version": "1.1.3", 993 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 994 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 995 | "dev": true, 996 | "requires": { 997 | "object-keys": "^1.0.12" 998 | } 999 | }, 1000 | "defined": { 1001 | "version": "1.0.0", 1002 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 1003 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 1004 | "dev": true 1005 | }, 1006 | "dotignore": { 1007 | "version": "0.1.2", 1008 | "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", 1009 | "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", 1010 | "dev": true, 1011 | "requires": { 1012 | "minimatch": "^3.0.4" 1013 | } 1014 | }, 1015 | "end-of-stream": { 1016 | "version": "1.4.4", 1017 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1018 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1019 | "requires": { 1020 | "once": "^1.4.0" 1021 | } 1022 | }, 1023 | "es-abstract": { 1024 | "version": "1.19.1", 1025 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", 1026 | "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", 1027 | "dev": true, 1028 | "requires": { 1029 | "call-bind": "^1.0.2", 1030 | "es-to-primitive": "^1.2.1", 1031 | "function-bind": "^1.1.1", 1032 | "get-intrinsic": "^1.1.1", 1033 | "get-symbol-description": "^1.0.0", 1034 | "has": "^1.0.3", 1035 | "has-symbols": "^1.0.2", 1036 | "internal-slot": "^1.0.3", 1037 | "is-callable": "^1.2.4", 1038 | "is-negative-zero": "^2.0.1", 1039 | "is-regex": "^1.1.4", 1040 | "is-shared-array-buffer": "^1.0.1", 1041 | "is-string": "^1.0.7", 1042 | "is-weakref": "^1.0.1", 1043 | "object-inspect": "^1.11.0", 1044 | "object-keys": "^1.1.1", 1045 | "object.assign": "^4.1.2", 1046 | "string.prototype.trimend": "^1.0.4", 1047 | "string.prototype.trimstart": "^1.0.4", 1048 | "unbox-primitive": "^1.0.1" 1049 | } 1050 | }, 1051 | "es-to-primitive": { 1052 | "version": "1.2.1", 1053 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1054 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1055 | "dev": true, 1056 | "requires": { 1057 | "is-callable": "^1.1.4", 1058 | "is-date-object": "^1.0.1", 1059 | "is-symbol": "^1.0.2" 1060 | } 1061 | }, 1062 | "for-each": { 1063 | "version": "0.3.3", 1064 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 1065 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 1066 | "dev": true, 1067 | "requires": { 1068 | "is-callable": "^1.1.3" 1069 | } 1070 | }, 1071 | "fs.realpath": { 1072 | "version": "1.0.0", 1073 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1074 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1075 | "dev": true 1076 | }, 1077 | "function-bind": { 1078 | "version": "1.1.1", 1079 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1080 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1081 | "dev": true 1082 | }, 1083 | "get-intrinsic": { 1084 | "version": "1.1.1", 1085 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1086 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1087 | "dev": true, 1088 | "requires": { 1089 | "function-bind": "^1.1.1", 1090 | "has": "^1.0.3", 1091 | "has-symbols": "^1.0.1" 1092 | } 1093 | }, 1094 | "get-symbol-description": { 1095 | "version": "1.0.0", 1096 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 1097 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 1098 | "dev": true, 1099 | "requires": { 1100 | "call-bind": "^1.0.2", 1101 | "get-intrinsic": "^1.1.1" 1102 | } 1103 | }, 1104 | "glob": { 1105 | "version": "7.2.0", 1106 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1107 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1108 | "dev": true, 1109 | "requires": { 1110 | "fs.realpath": "^1.0.0", 1111 | "inflight": "^1.0.4", 1112 | "inherits": "2", 1113 | "minimatch": "^3.0.4", 1114 | "once": "^1.3.0", 1115 | "path-is-absolute": "^1.0.0" 1116 | } 1117 | }, 1118 | "has": { 1119 | "version": "1.0.3", 1120 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1121 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1122 | "dev": true, 1123 | "requires": { 1124 | "function-bind": "^1.1.1" 1125 | } 1126 | }, 1127 | "has-bigints": { 1128 | "version": "1.0.1", 1129 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", 1130 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", 1131 | "dev": true 1132 | }, 1133 | "has-symbols": { 1134 | "version": "1.0.3", 1135 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1136 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1137 | "dev": true 1138 | }, 1139 | "has-tostringtag": { 1140 | "version": "1.0.0", 1141 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1142 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1143 | "dev": true, 1144 | "requires": { 1145 | "has-symbols": "^1.0.2" 1146 | } 1147 | }, 1148 | "inflight": { 1149 | "version": "1.0.6", 1150 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1151 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1152 | "dev": true, 1153 | "requires": { 1154 | "once": "^1.3.0", 1155 | "wrappy": "1" 1156 | } 1157 | }, 1158 | "inherits": { 1159 | "version": "2.0.4", 1160 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1161 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1162 | }, 1163 | "internal-slot": { 1164 | "version": "1.0.3", 1165 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", 1166 | "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", 1167 | "dev": true, 1168 | "requires": { 1169 | "get-intrinsic": "^1.1.0", 1170 | "has": "^1.0.3", 1171 | "side-channel": "^1.0.4" 1172 | } 1173 | }, 1174 | "is-arguments": { 1175 | "version": "1.1.1", 1176 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 1177 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 1178 | "dev": true, 1179 | "requires": { 1180 | "call-bind": "^1.0.2", 1181 | "has-tostringtag": "^1.0.0" 1182 | } 1183 | }, 1184 | "is-bigint": { 1185 | "version": "1.0.4", 1186 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 1187 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 1188 | "dev": true, 1189 | "requires": { 1190 | "has-bigints": "^1.0.1" 1191 | } 1192 | }, 1193 | "is-boolean-object": { 1194 | "version": "1.1.2", 1195 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 1196 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 1197 | "dev": true, 1198 | "requires": { 1199 | "call-bind": "^1.0.2", 1200 | "has-tostringtag": "^1.0.0" 1201 | } 1202 | }, 1203 | "is-callable": { 1204 | "version": "1.2.4", 1205 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", 1206 | "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", 1207 | "dev": true 1208 | }, 1209 | "is-core-module": { 1210 | "version": "2.8.1", 1211 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 1212 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 1213 | "dev": true, 1214 | "requires": { 1215 | "has": "^1.0.3" 1216 | } 1217 | }, 1218 | "is-date-object": { 1219 | "version": "1.0.5", 1220 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 1221 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 1222 | "dev": true, 1223 | "requires": { 1224 | "has-tostringtag": "^1.0.0" 1225 | } 1226 | }, 1227 | "is-negative-zero": { 1228 | "version": "2.0.2", 1229 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 1230 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 1231 | "dev": true 1232 | }, 1233 | "is-number-object": { 1234 | "version": "1.0.6", 1235 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", 1236 | "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", 1237 | "dev": true, 1238 | "requires": { 1239 | "has-tostringtag": "^1.0.0" 1240 | } 1241 | }, 1242 | "is-regex": { 1243 | "version": "1.1.4", 1244 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1245 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1246 | "dev": true, 1247 | "requires": { 1248 | "call-bind": "^1.0.2", 1249 | "has-tostringtag": "^1.0.0" 1250 | } 1251 | }, 1252 | "is-shared-array-buffer": { 1253 | "version": "1.0.1", 1254 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", 1255 | "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", 1256 | "dev": true 1257 | }, 1258 | "is-string": { 1259 | "version": "1.0.7", 1260 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 1261 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 1262 | "dev": true, 1263 | "requires": { 1264 | "has-tostringtag": "^1.0.0" 1265 | } 1266 | }, 1267 | "is-symbol": { 1268 | "version": "1.0.4", 1269 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1270 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1271 | "dev": true, 1272 | "requires": { 1273 | "has-symbols": "^1.0.2" 1274 | } 1275 | }, 1276 | "is-weakref": { 1277 | "version": "1.0.2", 1278 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 1279 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 1280 | "dev": true, 1281 | "requires": { 1282 | "call-bind": "^1.0.2" 1283 | } 1284 | }, 1285 | "isarray": { 1286 | "version": "1.0.0", 1287 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1288 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1289 | }, 1290 | "minimatch": { 1291 | "version": "3.1.2", 1292 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1293 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1294 | "dev": true, 1295 | "requires": { 1296 | "brace-expansion": "^1.1.7" 1297 | } 1298 | }, 1299 | "minimist": { 1300 | "version": "1.2.5", 1301 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1302 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1303 | "dev": true 1304 | }, 1305 | "object-inspect": { 1306 | "version": "1.12.0", 1307 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", 1308 | "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", 1309 | "dev": true 1310 | }, 1311 | "object-is": { 1312 | "version": "1.1.5", 1313 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", 1314 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", 1315 | "dev": true, 1316 | "requires": { 1317 | "call-bind": "^1.0.2", 1318 | "define-properties": "^1.1.3" 1319 | } 1320 | }, 1321 | "object-keys": { 1322 | "version": "1.1.1", 1323 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1324 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1325 | "dev": true 1326 | }, 1327 | "object.assign": { 1328 | "version": "4.1.2", 1329 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 1330 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 1331 | "dev": true, 1332 | "requires": { 1333 | "call-bind": "^1.0.0", 1334 | "define-properties": "^1.1.3", 1335 | "has-symbols": "^1.0.1", 1336 | "object-keys": "^1.1.1" 1337 | } 1338 | }, 1339 | "once": { 1340 | "version": "1.4.0", 1341 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1342 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1343 | "requires": { 1344 | "wrappy": "1" 1345 | } 1346 | }, 1347 | "path-is-absolute": { 1348 | "version": "1.0.1", 1349 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1350 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1351 | "dev": true 1352 | }, 1353 | "path-parse": { 1354 | "version": "1.0.7", 1355 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1356 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1357 | "dev": true 1358 | }, 1359 | "process-nextick-args": { 1360 | "version": "2.0.1", 1361 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1362 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1363 | }, 1364 | "readable-stream": { 1365 | "version": "3.6.0", 1366 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1367 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1368 | "requires": { 1369 | "inherits": "^2.0.3", 1370 | "string_decoder": "^1.1.1", 1371 | "util-deprecate": "^1.0.1" 1372 | } 1373 | }, 1374 | "regexp.prototype.flags": { 1375 | "version": "1.4.1", 1376 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", 1377 | "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", 1378 | "dev": true, 1379 | "requires": { 1380 | "call-bind": "^1.0.2", 1381 | "define-properties": "^1.1.3" 1382 | } 1383 | }, 1384 | "resolve": { 1385 | "version": "1.22.0", 1386 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1387 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1388 | "dev": true, 1389 | "requires": { 1390 | "is-core-module": "^2.8.1", 1391 | "path-parse": "^1.0.7", 1392 | "supports-preserve-symlinks-flag": "^1.0.0" 1393 | } 1394 | }, 1395 | "resumer": { 1396 | "version": "0.0.0", 1397 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", 1398 | "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", 1399 | "dev": true, 1400 | "requires": { 1401 | "through": "~2.3.4" 1402 | } 1403 | }, 1404 | "safe-buffer": { 1405 | "version": "5.2.1", 1406 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1407 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1408 | }, 1409 | "side-channel": { 1410 | "version": "1.0.4", 1411 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1412 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1413 | "dev": true, 1414 | "requires": { 1415 | "call-bind": "^1.0.0", 1416 | "get-intrinsic": "^1.0.2", 1417 | "object-inspect": "^1.9.0" 1418 | } 1419 | }, 1420 | "string_decoder": { 1421 | "version": "1.3.0", 1422 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1423 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1424 | "requires": { 1425 | "safe-buffer": "~5.2.0" 1426 | } 1427 | }, 1428 | "string.prototype.trim": { 1429 | "version": "1.2.5", 1430 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", 1431 | "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", 1432 | "dev": true, 1433 | "requires": { 1434 | "call-bind": "^1.0.2", 1435 | "define-properties": "^1.1.3", 1436 | "es-abstract": "^1.19.1" 1437 | } 1438 | }, 1439 | "string.prototype.trimend": { 1440 | "version": "1.0.4", 1441 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", 1442 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", 1443 | "dev": true, 1444 | "requires": { 1445 | "call-bind": "^1.0.2", 1446 | "define-properties": "^1.1.3" 1447 | } 1448 | }, 1449 | "string.prototype.trimstart": { 1450 | "version": "1.0.4", 1451 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", 1452 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", 1453 | "dev": true, 1454 | "requires": { 1455 | "call-bind": "^1.0.2", 1456 | "define-properties": "^1.1.3" 1457 | } 1458 | }, 1459 | "supports-preserve-symlinks-flag": { 1460 | "version": "1.0.0", 1461 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1462 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1463 | "dev": true 1464 | }, 1465 | "tape": { 1466 | "version": "4.15.0", 1467 | "resolved": "https://registry.npmjs.org/tape/-/tape-4.15.0.tgz", 1468 | "integrity": "sha512-SfRmG2I8QGGgJE/MCiLH8c11L5XxyUXxwK9xLRD0uiK5fehRkkSZGmR6Y1pxOt8vJ19m3sY+POTQpiaVv45/LQ==", 1469 | "dev": true, 1470 | "requires": { 1471 | "call-bind": "~1.0.2", 1472 | "deep-equal": "~1.1.1", 1473 | "defined": "~1.0.0", 1474 | "dotignore": "~0.1.2", 1475 | "for-each": "~0.3.3", 1476 | "glob": "~7.2.0", 1477 | "has": "~1.0.3", 1478 | "inherits": "~2.0.4", 1479 | "is-regex": "~1.1.4", 1480 | "minimist": "~1.2.5", 1481 | "object-inspect": "~1.12.0", 1482 | "resolve": "~1.22.0", 1483 | "resumer": "~0.0.0", 1484 | "string.prototype.trim": "~1.2.5", 1485 | "through": "~2.3.8" 1486 | } 1487 | }, 1488 | "through": { 1489 | "version": "2.3.8", 1490 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1491 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1492 | "dev": true 1493 | }, 1494 | "typedarray": { 1495 | "version": "0.0.6", 1496 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1497 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1498 | "dev": true 1499 | }, 1500 | "unbox-primitive": { 1501 | "version": "1.0.1", 1502 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", 1503 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", 1504 | "dev": true, 1505 | "requires": { 1506 | "function-bind": "^1.1.1", 1507 | "has-bigints": "^1.0.1", 1508 | "has-symbols": "^1.0.2", 1509 | "which-boxed-primitive": "^1.0.2" 1510 | } 1511 | }, 1512 | "util-deprecate": { 1513 | "version": "1.0.2", 1514 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1515 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1516 | }, 1517 | "which-boxed-primitive": { 1518 | "version": "1.0.2", 1519 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 1520 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 1521 | "dev": true, 1522 | "requires": { 1523 | "is-bigint": "^1.0.1", 1524 | "is-boolean-object": "^1.1.0", 1525 | "is-number-object": "^1.0.4", 1526 | "is-string": "^1.0.5", 1527 | "is-symbol": "^1.0.3" 1528 | } 1529 | }, 1530 | "wrappy": { 1531 | "version": "1.0.2", 1532 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1533 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1534 | } 1535 | } 1536 | } 1537 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cpio-stream", 3 | "version": "1.4.3", 4 | "description": "streaming cpio parser and packer", 5 | "main": "lib", 6 | "scripts": { 7 | "test": "node test/test.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/finnp/cpio-stream.git" 12 | }, 13 | "author": "Finn Pauls", 14 | "contributors": [ 15 | "Jesús Leganés Combarro 'piranna' ", 16 | "Kristian Jerpetjøn " 17 | ], 18 | "license": "MIT", 19 | "bugs": { 20 | "url": "https://github.com/finnp/cpio-stream/issues" 21 | }, 22 | "homepage": "https://github.com/finnp/cpio-stream", 23 | "dependencies": { 24 | "bl": "^1.0.0", 25 | "end-of-stream": "^1.1.0", 26 | "readable-stream": "^3.1.1" 27 | }, 28 | "devDependencies": { 29 | "concat-stream": "^2.0.0", 30 | "tape": "^4.9.2" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # cpio-stream [![Build Status](https://travis-ci.org/finnp/cpio-stream.svg?branch=master)](https://travis-ci.org/finnp/cpio-stream) 2 | [![NPM](https://nodei.co/npm/cpio-stream.png)](https://nodei.co/npm/cpio-stream) [![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) 3 | 4 | `cpio-stream` is a streaming cpio packer. It is basically the `cpio` version on 5 | [tar-stream](https://github.com/mafintosh/tar-stream). 6 | 7 | ## Support 8 | Extraction 9 | - `odc` / `old character` 10 | - `newc` / `new character` 11 | - `crc` / `new crc` *note: checksum will not be tested nor rejected!* 12 | 13 | Packing 14 | - `odc` / `old character` 15 | 16 | Mostly following the [libarchive documentation](http://people.freebsd.org/~kientzle/libarchive/man/cpio.5.txt) documentation. 17 | Feel free to create pull requests to add additional format support! 18 | 19 | ## Packing 20 | 21 | ```js 22 | var cpio = require('cpio-stream') 23 | var pack = cpio.pack() 24 | 25 | pack.entry({name: 'my-test.txt'}, 'hello, world\n') 26 | 27 | var entry = pack.entry({'my-stream-test.txt', size: 11}, function (err) { 28 | // stream was added 29 | // no more entries 30 | pack.finalize() 31 | }) 32 | 33 | entry.write('hello') 34 | entry.write(' world') 35 | entry.end() 36 | 37 | // pipe the archive somewhere 38 | pack.pipe(process.stdout) 39 | 40 | ``` 41 | 42 | ## Extracting 43 | 44 | ```js 45 | var extract = cpio.extract() 46 | 47 | extract.on('entry', function (header, stream, callback) { 48 | stream.on('end', function () { 49 | callback() 50 | }) 51 | 52 | stream.resume() // auto drain 53 | }) 54 | 55 | extract.on('finish', function () { 56 | // all entries read 57 | }) 58 | 59 | pack.pipe(extract) 60 | ``` 61 | 62 | ## License 63 | MIT, with some of the code taken from the `tar-stream` module by @mafintosh 64 | -------------------------------------------------------------------------------- /test/both.js: -------------------------------------------------------------------------------- 1 | var concat = require('concat-stream') 2 | var cpio = require('../') 3 | 4 | var pack = cpio.pack() 5 | var unpack = cpio.extract() 6 | 7 | var entry1 = {'name': '.', 'mode': 16877, 'mtime': new Date('2015-12-30T14:53:10.000Z'), 'size': 0, 'type': 'directory', 'uid': 0, 'gid': 80} 8 | var entry2 = {'name': 'test.txt', 'mode': 33188, 'mtime': new Date('2015-12-30T14:38:36.000Z'), 'size': 5, 'type': 'file', 'uid': 0, 'gid': 80} 9 | 10 | module.exports = function (test) { 11 | test('odc: both pack and extract', function (t) { 12 | pack.entry(entry1, function () { 13 | var entry = pack.entry(entry2, function () { 14 | pack.finalize() 15 | }) 16 | entry.end('test\n') 17 | }) 18 | 19 | pack.pipe(unpack) 20 | t.plan(5) 21 | unpack.on('entry', function (header, stream, cb) { 22 | if (header.name === 'test.txt') { 23 | t.equals(header.mtime.getTime(), new Date('2015-12-30T14:38:36.000Z').getTime()) 24 | t.equals(header.size, 5) 25 | stream.pipe(concat(function (content) { 26 | t.equals(content.toString(), 'test\n', 'test.txt content') 27 | })) 28 | } else { 29 | t.equals(header.mtime.getTime(), new Date('2015-12-30T14:53:10.000Z').getTime()) 30 | stream.resume() 31 | } 32 | stream.on('end', function () { 33 | cb() 34 | }) 35 | }) 36 | unpack.on('finish', function () { 37 | t.pass('Finished') 38 | }) 39 | }) 40 | } 41 | -------------------------------------------------------------------------------- /test/extract.js: -------------------------------------------------------------------------------- 1 | var cpio = require('../') 2 | var fs = require('fs') 3 | var path = require('path') 4 | var concat = require('concat-stream') 5 | 6 | module.exports = function (test) { 7 | test('odc: simple unpack', function (t) { 8 | var unpack = cpio.extract() 9 | t.plan(12) 10 | unpack.on('entry', function (header, stream, cb) { 11 | t.equal(header.dev, 262143, 'dev') 12 | t.equal(header.ino, 1, 'ino') 13 | t.equal(header.mode, 33188, 'mode') 14 | t.equal(header.uid, 501, 'uid') 15 | t.equal(header.gid, 20, 'gid') 16 | t.equal(header.nlink, 1, 'nlink') 17 | t.equal(header.rdev, 0, 'rdev') 18 | t.equal(header.mtime.getTime(), (new Date(1419354218000)).getTime(), 'mtime') 19 | t.equal(header.name, 'test.txt', 'name') 20 | t.equal(header.size, 12, 'size') 21 | t.equal(header.type, 'file', 'type') 22 | stream.on('end', function () { 23 | cb() 24 | }) 25 | // stream.pipe(process.stdout) 26 | stream.pipe(concat(function (content) { 27 | t.equal(content.toString(), 'hello world\n') 28 | })) 29 | }) 30 | 31 | fs.createReadStream(path.join(__dirname, 'fixtures/odc/onefile.cpio')).pipe(unpack) 32 | }) 33 | 34 | test('odc: multiple files', function (t) { 35 | var unpack = cpio.extract() 36 | 37 | var list = [ 38 | './blub', 39 | './blub/blubber', 40 | './blub/blubber/empty.txt', 41 | './blub/blubber/what.txt', 42 | './blub/what.txt' 43 | ] 44 | 45 | unpack.on('entry', function (header, stream, cb) { 46 | list = list.filter(function (name) { 47 | return name !== header.name 48 | }) 49 | 50 | stream.on('end', function () { 51 | cb() 52 | }) 53 | stream.resume() 54 | }) 55 | 56 | unpack.on('finish', function () { 57 | t.equal(list.length, 0, 'all files present') 58 | t.end() 59 | }) 60 | 61 | fs.createReadStream(path.join(__dirname, 'fixtures/odc/multiple.cpio')).pipe(unpack) 62 | }) 63 | 64 | test('odc: symlink', function (t) { 65 | t.plan(6) 66 | var unpack = cpio.extract() 67 | unpack.on('entry', function (header, stream, cb) { 68 | t.pass('file received') 69 | if (header.name === './link') { 70 | t.equals(header.type, 'symlink', 'symlink type') 71 | t.equals(header.linkname, '.gitignore', 'linkname') 72 | } 73 | stream.on('end', function () { 74 | cb() 75 | }) 76 | stream.resume() 77 | }) 78 | fs.createReadStream(path.join(__dirname, 'fixtures/odc/link.cpio')).pipe(unpack) 79 | }) 80 | 81 | test('newc: simple unpack', function (t) { 82 | var unpack = cpio.extract() 83 | t.plan(14) 84 | unpack.on('entry', function (header, stream, cb) { 85 | t.equal(header.ino, 18522521, 'ino') 86 | t.equal(header.mode, 33188, 'mode') 87 | t.equal(header.uid, 1000, 'uid') 88 | t.equal(header.gid, 1000, 'gid') 89 | t.equal(header.nlink, 1, 'nlink') 90 | t.equal(header.mtime.getTime(), (new Date(1444378311000)).getTime(), 'mtime') 91 | t.equal(header.size, 12, 'size') 92 | t.equal(header.devmajor, 8, 'devmajor') 93 | t.equal(header.devminor, 5, 'devminor') 94 | t.equal(header.rdevmajor, 0, 'rdevmajor') 95 | t.equal(header.rdevminor, 0, 'rdevminor') 96 | t.equal(header.name, 'test.txt', 'name') 97 | t.equal(header.type, 'file', 'type') 98 | stream.on('end', function () { 99 | cb() 100 | }) 101 | // stream.pipe(process.stdout) 102 | stream.pipe(concat(function (content) { 103 | t.equal(content.toString(), 'hello world\n') 104 | })) 105 | }) 106 | 107 | fs.createReadStream(path.join(__dirname, 'fixtures/newc/onefile.cpio')).pipe(unpack) 108 | }) 109 | 110 | test('newc: unpack with strike', function (t) { 111 | var name = 'hello.txt' 112 | var expected = 'hello\n' 113 | 114 | var unpack = cpio.extract() 115 | t.plan(12) 116 | unpack.on('entry', function (header, stream, cb) { 117 | t.equal(header.size, 6, 'size') 118 | t.equal(header._nameLength, 10, 'name length') 119 | t.equal(header._sizeStrike, 8, 'size strike') 120 | t.equal(header._nameStrike, 10, 'name strike') 121 | t.equal(header.name, name, 'name') 122 | stream.on('end', function () { 123 | name = 'world.txt' 124 | 125 | cb() 126 | }) 127 | stream.pipe(concat(function (content) { 128 | t.equal(content.toString(), expected) 129 | 130 | expected = 'world\n' 131 | })) 132 | }) 133 | 134 | fs.createReadStream(path.join(__dirname, 'fixtures/newc/hello.cpio')).pipe(unpack) 135 | }) 136 | 137 | test('newc: multiple files', function (t) { 138 | var unpack = cpio.extract() 139 | 140 | var list = [ 141 | 'blub', 142 | 'blub/blubber', 143 | 'blub/blubber/empty.txt', 144 | 'blub/blubber/what.txt', 145 | 'blub/what.txt' 146 | ] 147 | 148 | unpack.on('entry', function (header, stream, cb) { 149 | list = list.filter(function (name) { 150 | return name !== header.name 151 | }) 152 | 153 | stream.on('end', function () { 154 | cb() 155 | }) 156 | stream.resume() 157 | }) 158 | 159 | unpack.on('finish', function () { 160 | t.equal(list.length, 0, 'all files present') 161 | t.end() 162 | }) 163 | 164 | fs.createReadStream(path.join(__dirname, 'fixtures/newc/multiple.cpio')).pipe(unpack) 165 | }) 166 | 167 | test('crc: dir + file + symlink', function (t) { 168 | var unpack = cpio.extract() 169 | t.plan(7) 170 | unpack.on('entry', function (header, stream, cb) { 171 | stream.pipe(concat(function (content) { 172 | t.pass(header.name) 173 | if (header.name === 'test/b') { 174 | t.same(header.type, 'symlink', 'symlink type') 175 | t.same(header.linkname, 'a', 'symlink linkname') 176 | } 177 | if (header.name === 'test/a') { 178 | var cksum = 0 179 | for (var i = 0; i < content.length; i++) cksum += content.readUInt8(i) 180 | t.same(cksum, header.checksum, 'checksum test') 181 | t.same(content.toString(), 'test\n') 182 | } 183 | })) 184 | stream.on('end', function () { 185 | cb() 186 | }) 187 | }) 188 | fs.createReadStream(path.join(__dirname, 'fixtures/crc/crc.cpio')).pipe(unpack) 189 | }) 190 | } 191 | -------------------------------------------------------------------------------- /test/fixtures/crc/crc.cpio: -------------------------------------------------------------------------------- 1 | 0707020D2E1329000041ED0003B6EA000027240000000256706D2200000000000000000000002A00000000000000000000000500000000test0707020D2E1345000081A40003B6EA000027240000000156706B9200000005000000000000002A000000000000000000000007000001CAtest/atest 2 | 0707020D2E13520000A1FF0003B6EA000027240000000156706D2200000001000000000000002A00000000000000000000000700000000test/ba07070200000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/newc/a.cpio: -------------------------------------------------------------------------------- 1 | 07070100000001000041ED000001F50000001400000003566F19BF00000000000000000003FFFF00000000000000000000000200000000b07070100000002000041ED000001F50000001400000003566F19BF00000000000000000003FFFF00000000000000000000000400000000b/a07070100000003000081A4000001F50000001400000001566F19BF00000005000000000003FFFF00000000000000000000000D00000000b/a/test.txttest 2 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/newc/hello.cpio: -------------------------------------------------------------------------------- 1 | 07070101103A03000081B4000003E8000003E8000000015839741400000006000000080000000300000000000000000000000A00000000hello.txthello 2 | 07070101103A05000081B4000003E8000003E8000000015839741D00000006000000080000000300000000000000000000000A00000000world.txtworld 3 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/newc/multiple.cpio: -------------------------------------------------------------------------------- 1 | 070701012E1280000041ED000003E8000003E8000000035617789200000000000000080000000500000000000000000000000500000000blub070701013013E5000041ED000003E8000003E8000000025617789200000000000000080000000500000000000000000000000D00000000blub/blubber070701013013E6000081A4000003E8000003E8000000015617789200000000000000080000000500000000000000000000001700000000blub/blubber/empty.txt070701013013E7000081A4000003E8000003E8000000015617789200000005000000080000000500000000000000000000001600000000blub/blubber/what.txtmöp 2 | 070701012E1281000081A4000003E8000003E8000000015617789200000006000000080000000500000000000000000000000E00000000blub/what.txthello 3 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/newc/onefile.cpio: -------------------------------------------------------------------------------- 1 | 070701011AA199000081A4000003E8000003E800000001561776C70000000C000000080000000500000000000000000000000900000000test.txthello world 2 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/odc/a.cpio: -------------------------------------------------------------------------------- 1 | 0707077777770000010407550007650000240000030000001263361467700000200000000000b0707077777770000020407550007650000240000030000001263361467700000400000000000b/a0707077777770000031006440007650000240000010000001263361467700001500000000005b/a/test.txttest 2 | 0707070000000000000000000000000000000000010000000000000000000001300000000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/odc/link.cpio: -------------------------------------------------------------------------------- 1 | 0707077777770000010407550007650000240000060000001263377577600000200000000000.0707077777770000021006440007650000240000010000001263361467700001500000000005./.gitignorelink 2 | 0707077777770000031207550007650000240000010000001263366350200000700000000012./link.gitignore0707077777770000041006440007650000240000010000001263377576700000400000000000./x0707070000000000000000000000000000000000010000000000000000000001300000000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/odc/multiple.cpio: -------------------------------------------------------------------------------- 1 | 0707077777770000010407550007650000240000040000001245035604300000700000000000./blub0707077777770000020407550007650000240000040000001245035607400001700000000000./blub/blubber0707077777770000031006440007650000240000010000001245035607400003100000000000./blub/blubber/empty.txt0707077777770000041006440007650000240000010000001245035605700003000000000005./blub/blubber/what.txtmöp 2 | 0707077777770000051006440007650000240000010000001245035604300002000000000006./blub/what.txthello 3 | 0707070000000000000000000000000000000000010000000000000000000001300000000000TRAILER!!! -------------------------------------------------------------------------------- /test/fixtures/odc/onefile.cpio: -------------------------------------------------------------------------------- 1 | 0707077777770000011006440007650000240000010000001244632015200001100000000014test.txthello world 2 | 0707070000000000000000000000000000000000010000000000000000000001300000000000TRAILER!!! -------------------------------------------------------------------------------- /test/newc.js: -------------------------------------------------------------------------------- 1 | var cpio = require('../') 2 | var fs = require('fs') 3 | var concat = require('concat-stream') 4 | var path = require('path') 5 | 6 | module.exports = function (test) { 7 | test('newc: pack file', function (t) { 8 | t.plan(1) 9 | 10 | var pack = cpio.pack({format: 'newc'}) 11 | 12 | pack.entry({ 13 | ino: 18522521, 14 | devmajor: 8, 15 | devminor: 5, 16 | name: 'test.txt', 17 | mtime: new Date(1444378311000), 18 | mode: 33188, 19 | uid: 1000, 20 | gid: 1000 21 | }, 'hello world\n') 22 | 23 | pack.finalize() 24 | 25 | pack.pipe(concat(function (data) { 26 | var expected = fs.readFileSync(path.join(__dirname, 'fixtures/newc/onefile.cpio')) 27 | t.deepEqual(data, expected) 28 | })) 29 | }) 30 | 31 | test('newc: pack file stream', function (t) { 32 | t.plan(2) 33 | 34 | var pack = cpio.pack({format: 'newc'}) 35 | 36 | var entry = pack.entry({ 37 | ino: 18522521, 38 | devmajor: 8, 39 | devminor: 5, 40 | name: 'test.txt', 41 | mtime: new Date(1444378311000), 42 | mode: 33188, 43 | uid: 1000, 44 | gid: 1000, 45 | size: 12 46 | }, function (err) { 47 | t.ok(!err) 48 | pack.finalize() 49 | }) 50 | 51 | entry.write('hello ') 52 | entry.write('world\n') 53 | entry.end() 54 | 55 | pack.pipe(concat(function (data) { 56 | var expected = fs.readFileSync(path.join(__dirname, 'fixtures/newc/onefile.cpio')) 57 | t.deepEqual(data, expected) 58 | })) 59 | }) 60 | 61 | test('newc: directories and file', function (t) { 62 | t.plan(4) 63 | 64 | var pack = cpio.pack({format: 'newc'}) 65 | 66 | pack.entry({ 67 | name: 'b', 68 | mtime: new Date(1450121663000), 69 | mode: 16877, 70 | uid: 501, 71 | gid: 20, 72 | nlink: 3 73 | }, function (err) { 74 | t.ok(!err, 'err dir .') 75 | pack.entry({ 76 | name: 'b/a', 77 | mtime: new Date(1450121663000), 78 | mode: 16877, 79 | uid: 501, 80 | gid: 20, 81 | nlink: 3 82 | }, function (err) { 83 | t.ok(!err, 'err dir ./') 84 | var entry = pack.entry({ 85 | name: 'b/a/test.txt', 86 | mode: 33188, 87 | mtime: new Date(1450121663000), 88 | size: 5, 89 | uid: 501, 90 | gid: 20 91 | }, function (err) { 92 | t.ok(!err, 'err file') 93 | pack.finalize() 94 | }) 95 | 96 | entry.write('test\n') 97 | entry.end() 98 | }) 99 | }) 100 | pack.pipe(concat(function (data) { 101 | var expected = fs.readFileSync(path.join(__dirname, 'fixtures/newc/a.cpio')) 102 | t.deepEqual(expected, data, 'equivalent cpio') 103 | })) 104 | }) 105 | } 106 | -------------------------------------------------------------------------------- /test/pack.js: -------------------------------------------------------------------------------- 1 | var cpio = require('../') 2 | var fs = require('fs') 3 | var concat = require('concat-stream') 4 | var path = require('path') 5 | 6 | module.exports = function (test) { 7 | test('odc: pack file', function (t) { 8 | t.plan(1) 9 | 10 | var pack = cpio.pack() 11 | 12 | pack.entry({ 13 | name: 'test.txt', 14 | mtime: new Date(1419354218000), 15 | mode: 33188, 16 | uid: 501, 17 | gid: 20 18 | }, 'hello world\n') 19 | 20 | pack.finalize() 21 | 22 | pack.pipe(concat(function (data) { 23 | var expected = fs.readFileSync(path.join(__dirname, 'fixtures/odc/onefile.cpio')) 24 | t.deepEqual(data, expected) 25 | })) 26 | }) 27 | 28 | test('odc: pack file stream', function (t) { 29 | t.plan(2) 30 | 31 | var pack = cpio.pack() 32 | 33 | var entry = pack.entry({ 34 | name: 'test.txt', 35 | mtime: new Date(1419354218000), 36 | mode: 33188, 37 | uid: 501, 38 | gid: 20, 39 | size: 12 40 | }, function (err) { 41 | t.ok(!err) 42 | pack.finalize() 43 | }) 44 | 45 | entry.write('hello ') 46 | entry.write('world\n') 47 | entry.end() 48 | 49 | pack.pipe(concat(function (data) { 50 | var expected = fs.readFileSync(path.join(__dirname, 'fixtures/odc/onefile.cpio')) 51 | t.deepEqual(data, expected) 52 | })) 53 | }) 54 | 55 | test('odc: directories and file', function (t) { 56 | t.plan(4) 57 | 58 | var pack = cpio.pack() 59 | 60 | pack.entry({ 61 | name: 'b', 62 | mtime: new Date(1450121663000), 63 | mode: 16877, 64 | uid: 501, 65 | gid: 20, 66 | nlink: 3 67 | }, function (err) { 68 | t.ok(!err, 'err dir .') 69 | pack.entry({ 70 | name: 'b/a', 71 | mtime: new Date(1450121663000), 72 | mode: 16877, 73 | uid: 501, 74 | gid: 20, 75 | nlink: 3 76 | }, function (err) { 77 | t.ok(!err, 'err dir ./') 78 | var entry = pack.entry({ 79 | name: 'b/a/test.txt', 80 | mode: 33188, 81 | mtime: new Date(1450121663000), 82 | size: 5, 83 | uid: 501, 84 | gid: 20 85 | }, function (err) { 86 | t.ok(!err, 'err file') 87 | pack.finalize() 88 | }) 89 | 90 | entry.write('test\n') 91 | entry.end() 92 | }) 93 | }) 94 | pack.pipe(concat(function (data) { 95 | var expected = fs.readFileSync(path.join(__dirname, 'fixtures/odc/a.cpio')) 96 | t.deepEqual(expected, data, 'equivalent cpio') 97 | })) 98 | }) 99 | test('odc: file helper', function (t) { 100 | t.plan(1) 101 | 102 | var pack1 = cpio.pack() 103 | pack1.entry({ 104 | name: 'test.txt', 105 | mtime: new Date(1419354218000), 106 | mode: 33188, 107 | uid: 501, 108 | gid: 20 109 | }, 'hello world\n') 110 | pack1.finalize() 111 | 112 | var pack2 = cpio.pack() 113 | pack2.file({ 114 | name: 'test.txt', 115 | mtime: new Date(1419354218000), 116 | mode: 420, 117 | uid: 501, 118 | gid: 20 119 | }, 'hello world\n') 120 | pack2.finalize() 121 | 122 | 123 | pack1.pipe(concat(function (result1) { 124 | pack2.pipe(concat(function (result2) { 125 | t.deepEqual(result1, result2) 126 | })) 127 | })) 128 | }) 129 | test('odc: streamed entries', function (t) { 130 | t.plan(1) 131 | 132 | var pack1 = cpio.pack() 133 | var f1 = pack1.file({name: 'test.txt', size:11}, writeFile2) 134 | writeFile1() 135 | function writeFile1() { 136 | f1.write('hello') 137 | f1.write(' world') 138 | f1.end() 139 | } 140 | function writeFile2(err) { 141 | var f2 = pack1.file({name: 'test2.txt', size:3}, donePack1) 142 | f2.write('foo') 143 | f2.end() 144 | } 145 | function donePack1(err) { 146 | pack1.finalize() 147 | } 148 | 149 | var pack2 = cpio.pack() 150 | pack2.file({name: 'test.txt'}, 'hello world') 151 | pack2.file({name: 'test2.txt'}, 'foo') 152 | pack2.finalize() 153 | 154 | pack1.pipe(concat(function (result1) { 155 | pack2.pipe(concat(function (result2) { 156 | t.deepEqual(result1, result2) 157 | })) 158 | })) 159 | }) 160 | } 161 | // vim: et:ts=2:sw=2 162 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var test = require('tape') 2 | 3 | var pack = require('./pack.js') 4 | var extract = require('./extract.js') 5 | var both = require('./both.js') 6 | var newc = require('./newc.js') 7 | 8 | pack(test) 9 | extract(test) 10 | both(test) 11 | newc(test) 12 | --------------------------------------------------------------------------------