├── .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 |
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 [](https://travis-ci.org/finnp/cpio-stream)
2 | [](https://nodei.co/npm/cpio-stream) [](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 | 0707020D2E1329000041ED0003B6EA000027240000000256706D2200000000000000000000002A00000000000000000000000500000000test 0707020D2E1345000081A40003B6EA000027240000000156706B9200000005000000000000002A000000000000000000000007000001CAtest/a test
2 | 0707020D2E13520000A1FF0003B6EA000027240000000156706D2200000001000000000000002A00000000000000000000000700000000test/b a 07070200000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/newc/a.cpio:
--------------------------------------------------------------------------------
1 | 07070100000001000041ED000001F50000001400000003566F19BF00000000000000000003FFFF00000000000000000000000200000000b 07070100000002000041ED000001F50000001400000003566F19BF00000000000000000003FFFF00000000000000000000000400000000b/a 07070100000003000081A4000001F50000001400000001566F19BF00000005000000000003FFFF00000000000000000000000D00000000b/a/test.txt test
2 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/newc/hello.cpio:
--------------------------------------------------------------------------------
1 | 07070101103A03000081B4000003E8000003E8000000015839741400000006000000080000000300000000000000000000000A00000000hello.txt hello
2 | 07070101103A05000081B4000003E8000003E8000000015839741D00000006000000080000000300000000000000000000000A00000000world.txt world
3 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/newc/multiple.cpio:
--------------------------------------------------------------------------------
1 | 070701012E1280000041ED000003E8000003E8000000035617789200000000000000080000000500000000000000000000000500000000blub 070701013013E5000041ED000003E8000003E8000000025617789200000000000000080000000500000000000000000000000D00000000blub/blubber 070701013013E6000081A4000003E8000003E8000000015617789200000000000000080000000500000000000000000000001700000000blub/blubber/empty.txt 070701013013E7000081A4000003E8000003E8000000015617789200000005000000080000000500000000000000000000001600000000blub/blubber/what.txt möp
2 | 070701012E1281000081A4000003E8000003E8000000015617789200000006000000080000000500000000000000000000000E00000000blub/what.txt hello
3 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/newc/onefile.cpio:
--------------------------------------------------------------------------------
1 | 070701011AA199000081A4000003E8000003E800000001561776C70000000C000000080000000500000000000000000000000900000000test.txt hello world
2 | 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/odc/a.cpio:
--------------------------------------------------------------------------------
1 | 0707077777770000010407550007650000240000030000001263361467700000200000000000b 0707077777770000020407550007650000240000030000001263361467700000400000000000b/a 0707077777770000031006440007650000240000010000001263361467700001500000000005b/a/test.txt test
2 | 0707070000000000000000000000000000000000010000000000000000000001300000000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/odc/link.cpio:
--------------------------------------------------------------------------------
1 | 0707077777770000010407550007650000240000060000001263377577600000200000000000. 0707077777770000021006440007650000240000010000001263361467700001500000000005./.gitignore link
2 | 0707077777770000031207550007650000240000010000001263366350200000700000000012./link .gitignore0707077777770000041006440007650000240000010000001263377576700000400000000000./x 0707070000000000000000000000000000000000010000000000000000000001300000000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/odc/multiple.cpio:
--------------------------------------------------------------------------------
1 | 0707077777770000010407550007650000240000040000001245035604300000700000000000./blub 0707077777770000020407550007650000240000040000001245035607400001700000000000./blub/blubber 0707077777770000031006440007650000240000010000001245035607400003100000000000./blub/blubber/empty.txt 0707077777770000041006440007650000240000010000001245035605700003000000000005./blub/blubber/what.txt möp
2 | 0707077777770000051006440007650000240000010000001245035604300002000000000006./blub/what.txt hello
3 | 0707070000000000000000000000000000000000010000000000000000000001300000000000TRAILER!!!
--------------------------------------------------------------------------------
/test/fixtures/odc/onefile.cpio:
--------------------------------------------------------------------------------
1 | 0707077777770000011006440007650000240000010000001244632015200001100000000014test.txt hello 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 |
--------------------------------------------------------------------------------