Bump @actions/artifact to version 0.5.1 (#189)
* Bump @actions/artifact to version 0.5.1 * Update license versions
This commit is contained in:
		
							parent
							
								
									bcd44ad93d
								
							
						
					
					
						commit
						ee69f02b3d
					
				
							
								
								
									
										
											BIN
										
									
								
								.licenses/npm/@actions/artifact.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.licenses/npm/@actions/artifact.dep.yml
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								.licenses/npm/@actions/http-client.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.licenses/npm/@actions/http-client.dep.yml
									
									
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2990
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2990
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -1446,803 +1446,6 @@ exports.realpath = function realpath(p, cache, cb) { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), |  | ||||||
| 
 |  | ||||||
| /***/ 120: |  | ||||||
| /***/ (function(module, __unusedexports, __webpack_require__) { |  | ||||||
| 
 |  | ||||||
| // Approach:
 |  | ||||||
| //
 |  | ||||||
| // 1. Get the minimatch set
 |  | ||||||
| // 2. For each pattern in the set, PROCESS(pattern, false)
 |  | ||||||
| // 3. Store matches per-set, then uniq them
 |  | ||||||
| //
 |  | ||||||
| // PROCESS(pattern, inGlobStar)
 |  | ||||||
| // Get the first [n] items from pattern that are all strings
 |  | ||||||
| // Join these together.  This is PREFIX.
 |  | ||||||
| //   If there is no more remaining, then stat(PREFIX) and
 |  | ||||||
| //   add to matches if it succeeds.  END.
 |  | ||||||
| //
 |  | ||||||
| // If inGlobStar and PREFIX is symlink and points to dir
 |  | ||||||
| //   set ENTRIES = []
 |  | ||||||
| // else readdir(PREFIX) as ENTRIES
 |  | ||||||
| //   If fail, END
 |  | ||||||
| //
 |  | ||||||
| // with ENTRIES
 |  | ||||||
| //   If pattern[n] is GLOBSTAR
 |  | ||||||
| //     // handle the case where the globstar match is empty
 |  | ||||||
| //     // by pruning it out, and testing the resulting pattern
 |  | ||||||
| //     PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
 |  | ||||||
| //     // handle other cases.
 |  | ||||||
| //     for ENTRY in ENTRIES (not dotfiles)
 |  | ||||||
| //       // attach globstar + tail onto the entry
 |  | ||||||
| //       // Mark that this entry is a globstar match
 |  | ||||||
| //       PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
 |  | ||||||
| //
 |  | ||||||
| //   else // not globstar
 |  | ||||||
| //     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
 |  | ||||||
| //       Test ENTRY against pattern[n]
 |  | ||||||
| //       If fails, continue
 |  | ||||||
| //       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
 |  | ||||||
| //
 |  | ||||||
| // Caveat:
 |  | ||||||
| //   Cache all stats and readdirs results to minimize syscall.  Since all
 |  | ||||||
| //   we ever care about is existence and directory-ness, we can just keep
 |  | ||||||
| //   `true` for files, and [children,...] for directories, or `false` for
 |  | ||||||
| //   things that don't exist.
 |  | ||||||
| 
 |  | ||||||
| module.exports = glob |  | ||||||
| 
 |  | ||||||
| var fs = __webpack_require__(747) |  | ||||||
| var rp = __webpack_require__(302) |  | ||||||
| var minimatch = __webpack_require__(93) |  | ||||||
| var Minimatch = minimatch.Minimatch |  | ||||||
| var inherits = __webpack_require__(689) |  | ||||||
| var EE = __webpack_require__(614).EventEmitter |  | ||||||
| var path = __webpack_require__(622) |  | ||||||
| var assert = __webpack_require__(357) |  | ||||||
| var isAbsolute = __webpack_require__(681) |  | ||||||
| var globSync = __webpack_require__(245) |  | ||||||
| var common = __webpack_require__(856) |  | ||||||
| var alphasort = common.alphasort |  | ||||||
| var alphasorti = common.alphasorti |  | ||||||
| var setopts = common.setopts |  | ||||||
| var ownProp = common.ownProp |  | ||||||
| var inflight = __webpack_require__(674) |  | ||||||
| var util = __webpack_require__(669) |  | ||||||
| var childrenIgnored = common.childrenIgnored |  | ||||||
| var isIgnored = common.isIgnored |  | ||||||
| 
 |  | ||||||
| var once = __webpack_require__(49) |  | ||||||
| 
 |  | ||||||
| function glob (pattern, options, cb) { |  | ||||||
|   if (typeof options === 'function') cb = options, options = {} |  | ||||||
|   if (!options) options = {} |  | ||||||
| 
 |  | ||||||
|   if (options.sync) { |  | ||||||
|     if (cb) |  | ||||||
|       throw new TypeError('callback provided to sync glob') |  | ||||||
|     return globSync(pattern, options) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   return new Glob(pattern, options, cb) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| glob.sync = globSync |  | ||||||
| var GlobSync = glob.GlobSync = globSync.GlobSync |  | ||||||
| 
 |  | ||||||
| // old api surface
 |  | ||||||
| glob.glob = glob |  | ||||||
| 
 |  | ||||||
| function extend (origin, add) { |  | ||||||
|   if (add === null || typeof add !== 'object') { |  | ||||||
|     return origin |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var keys = Object.keys(add) |  | ||||||
|   var i = keys.length |  | ||||||
|   while (i--) { |  | ||||||
|     origin[keys[i]] = add[keys[i]] |  | ||||||
|   } |  | ||||||
|   return origin |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| glob.hasMagic = function (pattern, options_) { |  | ||||||
|   var options = extend({}, options_) |  | ||||||
|   options.noprocess = true |  | ||||||
| 
 |  | ||||||
|   var g = new Glob(pattern, options) |  | ||||||
|   var set = g.minimatch.set |  | ||||||
| 
 |  | ||||||
|   if (!pattern) |  | ||||||
|     return false |  | ||||||
| 
 |  | ||||||
|   if (set.length > 1) |  | ||||||
|     return true |  | ||||||
| 
 |  | ||||||
|   for (var j = 0; j < set[0].length; j++) { |  | ||||||
|     if (typeof set[0][j] !== 'string') |  | ||||||
|       return true |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   return false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| glob.Glob = Glob |  | ||||||
| inherits(Glob, EE) |  | ||||||
| function Glob (pattern, options, cb) { |  | ||||||
|   if (typeof options === 'function') { |  | ||||||
|     cb = options |  | ||||||
|     options = null |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (options && options.sync) { |  | ||||||
|     if (cb) |  | ||||||
|       throw new TypeError('callback provided to sync glob') |  | ||||||
|     return new GlobSync(pattern, options) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (!(this instanceof Glob)) |  | ||||||
|     return new Glob(pattern, options, cb) |  | ||||||
| 
 |  | ||||||
|   setopts(this, pattern, options) |  | ||||||
|   this._didRealPath = false |  | ||||||
| 
 |  | ||||||
|   // process each pattern in the minimatch set
 |  | ||||||
|   var n = this.minimatch.set.length |  | ||||||
| 
 |  | ||||||
|   // The matches are stored as {<filename>: true,...} so that
 |  | ||||||
|   // duplicates are automagically pruned.
 |  | ||||||
|   // Later, we do an Object.keys() on these.
 |  | ||||||
|   // Keep them as a list so we can fill in when nonull is set.
 |  | ||||||
|   this.matches = new Array(n) |  | ||||||
| 
 |  | ||||||
|   if (typeof cb === 'function') { |  | ||||||
|     cb = once(cb) |  | ||||||
|     this.on('error', cb) |  | ||||||
|     this.on('end', function (matches) { |  | ||||||
|       cb(null, matches) |  | ||||||
|     }) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var self = this |  | ||||||
|   this._processing = 0 |  | ||||||
| 
 |  | ||||||
|   this._emitQueue = [] |  | ||||||
|   this._processQueue = [] |  | ||||||
|   this.paused = false |  | ||||||
| 
 |  | ||||||
|   if (this.noprocess) |  | ||||||
|     return this |  | ||||||
| 
 |  | ||||||
|   if (n === 0) |  | ||||||
|     return done() |  | ||||||
| 
 |  | ||||||
|   var sync = true |  | ||||||
|   for (var i = 0; i < n; i ++) { |  | ||||||
|     this._process(this.minimatch.set[i], i, false, done) |  | ||||||
|   } |  | ||||||
|   sync = false |  | ||||||
| 
 |  | ||||||
|   function done () { |  | ||||||
|     --self._processing |  | ||||||
|     if (self._processing <= 0) { |  | ||||||
|       if (sync) { |  | ||||||
|         process.nextTick(function () { |  | ||||||
|           self._finish() |  | ||||||
|         }) |  | ||||||
|       } else { |  | ||||||
|         self._finish() |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._finish = function () { |  | ||||||
|   assert(this instanceof Glob) |  | ||||||
|   if (this.aborted) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   if (this.realpath && !this._didRealpath) |  | ||||||
|     return this._realpath() |  | ||||||
| 
 |  | ||||||
|   common.finish(this) |  | ||||||
|   this.emit('end', this.found) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._realpath = function () { |  | ||||||
|   if (this._didRealpath) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   this._didRealpath = true |  | ||||||
| 
 |  | ||||||
|   var n = this.matches.length |  | ||||||
|   if (n === 0) |  | ||||||
|     return this._finish() |  | ||||||
| 
 |  | ||||||
|   var self = this |  | ||||||
|   for (var i = 0; i < this.matches.length; i++) |  | ||||||
|     this._realpathSet(i, next) |  | ||||||
| 
 |  | ||||||
|   function next () { |  | ||||||
|     if (--n === 0) |  | ||||||
|       self._finish() |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._realpathSet = function (index, cb) { |  | ||||||
|   var matchset = this.matches[index] |  | ||||||
|   if (!matchset) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   var found = Object.keys(matchset) |  | ||||||
|   var self = this |  | ||||||
|   var n = found.length |  | ||||||
| 
 |  | ||||||
|   if (n === 0) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   var set = this.matches[index] = Object.create(null) |  | ||||||
|   found.forEach(function (p, i) { |  | ||||||
|     // If there's a problem with the stat, then it means that
 |  | ||||||
|     // one or more of the links in the realpath couldn't be
 |  | ||||||
|     // resolved.  just return the abs value in that case.
 |  | ||||||
|     p = self._makeAbs(p) |  | ||||||
|     rp.realpath(p, self.realpathCache, function (er, real) { |  | ||||||
|       if (!er) |  | ||||||
|         set[real] = true |  | ||||||
|       else if (er.syscall === 'stat') |  | ||||||
|         set[p] = true |  | ||||||
|       else |  | ||||||
|         self.emit('error', er) // srsly wtf right here
 |  | ||||||
| 
 |  | ||||||
|       if (--n === 0) { |  | ||||||
|         self.matches[index] = set |  | ||||||
|         cb() |  | ||||||
|       } |  | ||||||
|     }) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._mark = function (p) { |  | ||||||
|   return common.mark(this, p) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._makeAbs = function (f) { |  | ||||||
|   return common.makeAbs(this, f) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype.abort = function () { |  | ||||||
|   this.aborted = true |  | ||||||
|   this.emit('abort') |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype.pause = function () { |  | ||||||
|   if (!this.paused) { |  | ||||||
|     this.paused = true |  | ||||||
|     this.emit('pause') |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype.resume = function () { |  | ||||||
|   if (this.paused) { |  | ||||||
|     this.emit('resume') |  | ||||||
|     this.paused = false |  | ||||||
|     if (this._emitQueue.length) { |  | ||||||
|       var eq = this._emitQueue.slice(0) |  | ||||||
|       this._emitQueue.length = 0 |  | ||||||
|       for (var i = 0; i < eq.length; i ++) { |  | ||||||
|         var e = eq[i] |  | ||||||
|         this._emitMatch(e[0], e[1]) |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     if (this._processQueue.length) { |  | ||||||
|       var pq = this._processQueue.slice(0) |  | ||||||
|       this._processQueue.length = 0 |  | ||||||
|       for (var i = 0; i < pq.length; i ++) { |  | ||||||
|         var p = pq[i] |  | ||||||
|         this._processing-- |  | ||||||
|         this._process(p[0], p[1], p[2], p[3]) |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._process = function (pattern, index, inGlobStar, cb) { |  | ||||||
|   assert(this instanceof Glob) |  | ||||||
|   assert(typeof cb === 'function') |  | ||||||
| 
 |  | ||||||
|   if (this.aborted) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   this._processing++ |  | ||||||
|   if (this.paused) { |  | ||||||
|     this._processQueue.push([pattern, index, inGlobStar, cb]) |  | ||||||
|     return |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   //console.error('PROCESS %d', this._processing, pattern)
 |  | ||||||
| 
 |  | ||||||
|   // Get the first [n] parts of pattern that are all strings.
 |  | ||||||
|   var n = 0 |  | ||||||
|   while (typeof pattern[n] === 'string') { |  | ||||||
|     n ++ |  | ||||||
|   } |  | ||||||
|   // now n is the index of the first one that is *not* a string.
 |  | ||||||
| 
 |  | ||||||
|   // see if there's anything else
 |  | ||||||
|   var prefix |  | ||||||
|   switch (n) { |  | ||||||
|     // if not, then this is rather simple
 |  | ||||||
|     case pattern.length: |  | ||||||
|       this._processSimple(pattern.join('/'), index, cb) |  | ||||||
|       return |  | ||||||
| 
 |  | ||||||
|     case 0: |  | ||||||
|       // pattern *starts* with some non-trivial item.
 |  | ||||||
|       // going to readdir(cwd), but not include the prefix in matches.
 |  | ||||||
|       prefix = null |  | ||||||
|       break |  | ||||||
| 
 |  | ||||||
|     default: |  | ||||||
|       // pattern has some string bits in the front.
 |  | ||||||
|       // whatever it starts with, whether that's 'absolute' like /foo/bar,
 |  | ||||||
|       // or 'relative' like '../baz'
 |  | ||||||
|       prefix = pattern.slice(0, n).join('/') |  | ||||||
|       break |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var remain = pattern.slice(n) |  | ||||||
| 
 |  | ||||||
|   // get the list of entries.
 |  | ||||||
|   var read |  | ||||||
|   if (prefix === null) |  | ||||||
|     read = '.' |  | ||||||
|   else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { |  | ||||||
|     if (!prefix || !isAbsolute(prefix)) |  | ||||||
|       prefix = '/' + prefix |  | ||||||
|     read = prefix |  | ||||||
|   } else |  | ||||||
|     read = prefix |  | ||||||
| 
 |  | ||||||
|   var abs = this._makeAbs(read) |  | ||||||
| 
 |  | ||||||
|   //if ignored, skip _processing
 |  | ||||||
|   if (childrenIgnored(this, read)) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   var isGlobStar = remain[0] === minimatch.GLOBSTAR |  | ||||||
|   if (isGlobStar) |  | ||||||
|     this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) |  | ||||||
|   else |  | ||||||
|     this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { |  | ||||||
|   var self = this |  | ||||||
|   this._readdir(abs, inGlobStar, function (er, entries) { |  | ||||||
|     return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { |  | ||||||
| 
 |  | ||||||
|   // if the abs isn't a dir, then nothing can match!
 |  | ||||||
|   if (!entries) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   // It will only match dot entries if it starts with a dot, or if
 |  | ||||||
|   // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
 |  | ||||||
|   var pn = remain[0] |  | ||||||
|   var negate = !!this.minimatch.negate |  | ||||||
|   var rawGlob = pn._glob |  | ||||||
|   var dotOk = this.dot || rawGlob.charAt(0) === '.' |  | ||||||
| 
 |  | ||||||
|   var matchedEntries = [] |  | ||||||
|   for (var i = 0; i < entries.length; i++) { |  | ||||||
|     var e = entries[i] |  | ||||||
|     if (e.charAt(0) !== '.' || dotOk) { |  | ||||||
|       var m |  | ||||||
|       if (negate && !prefix) { |  | ||||||
|         m = !e.match(pn) |  | ||||||
|       } else { |  | ||||||
|         m = e.match(pn) |  | ||||||
|       } |  | ||||||
|       if (m) |  | ||||||
|         matchedEntries.push(e) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
 |  | ||||||
| 
 |  | ||||||
|   var len = matchedEntries.length |  | ||||||
|   // If there are no matched entries, then nothing matches.
 |  | ||||||
|   if (len === 0) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   // if this is the last remaining pattern bit, then no need for
 |  | ||||||
|   // an additional stat *unless* the user has specified mark or
 |  | ||||||
|   // stat explicitly.  We know they exist, since readdir returned
 |  | ||||||
|   // them.
 |  | ||||||
| 
 |  | ||||||
|   if (remain.length === 1 && !this.mark && !this.stat) { |  | ||||||
|     if (!this.matches[index]) |  | ||||||
|       this.matches[index] = Object.create(null) |  | ||||||
| 
 |  | ||||||
|     for (var i = 0; i < len; i ++) { |  | ||||||
|       var e = matchedEntries[i] |  | ||||||
|       if (prefix) { |  | ||||||
|         if (prefix !== '/') |  | ||||||
|           e = prefix + '/' + e |  | ||||||
|         else |  | ||||||
|           e = prefix + e |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       if (e.charAt(0) === '/' && !this.nomount) { |  | ||||||
|         e = path.join(this.root, e) |  | ||||||
|       } |  | ||||||
|       this._emitMatch(index, e) |  | ||||||
|     } |  | ||||||
|     // This was the last one, and no stats were needed
 |  | ||||||
|     return cb() |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // now test all matched entries as stand-ins for that part
 |  | ||||||
|   // of the pattern.
 |  | ||||||
|   remain.shift() |  | ||||||
|   for (var i = 0; i < len; i ++) { |  | ||||||
|     var e = matchedEntries[i] |  | ||||||
|     var newPattern |  | ||||||
|     if (prefix) { |  | ||||||
|       if (prefix !== '/') |  | ||||||
|         e = prefix + '/' + e |  | ||||||
|       else |  | ||||||
|         e = prefix + e |  | ||||||
|     } |  | ||||||
|     this._process([e].concat(remain), index, inGlobStar, cb) |  | ||||||
|   } |  | ||||||
|   cb() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._emitMatch = function (index, e) { |  | ||||||
|   if (this.aborted) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   if (isIgnored(this, e)) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   if (this.paused) { |  | ||||||
|     this._emitQueue.push([index, e]) |  | ||||||
|     return |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var abs = isAbsolute(e) ? e : this._makeAbs(e) |  | ||||||
| 
 |  | ||||||
|   if (this.mark) |  | ||||||
|     e = this._mark(e) |  | ||||||
| 
 |  | ||||||
|   if (this.absolute) |  | ||||||
|     e = abs |  | ||||||
| 
 |  | ||||||
|   if (this.matches[index][e]) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   if (this.nodir) { |  | ||||||
|     var c = this.cache[abs] |  | ||||||
|     if (c === 'DIR' || Array.isArray(c)) |  | ||||||
|       return |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this.matches[index][e] = true |  | ||||||
| 
 |  | ||||||
|   var st = this.statCache[abs] |  | ||||||
|   if (st) |  | ||||||
|     this.emit('stat', e, st) |  | ||||||
| 
 |  | ||||||
|   this.emit('match', e) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._readdirInGlobStar = function (abs, cb) { |  | ||||||
|   if (this.aborted) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   // follow all symlinked directories forever
 |  | ||||||
|   // just proceed as if this is a non-globstar situation
 |  | ||||||
|   if (this.follow) |  | ||||||
|     return this._readdir(abs, false, cb) |  | ||||||
| 
 |  | ||||||
|   var lstatkey = 'lstat\0' + abs |  | ||||||
|   var self = this |  | ||||||
|   var lstatcb = inflight(lstatkey, lstatcb_) |  | ||||||
| 
 |  | ||||||
|   if (lstatcb) |  | ||||||
|     fs.lstat(abs, lstatcb) |  | ||||||
| 
 |  | ||||||
|   function lstatcb_ (er, lstat) { |  | ||||||
|     if (er && er.code === 'ENOENT') |  | ||||||
|       return cb() |  | ||||||
| 
 |  | ||||||
|     var isSym = lstat && lstat.isSymbolicLink() |  | ||||||
|     self.symlinks[abs] = isSym |  | ||||||
| 
 |  | ||||||
|     // If it's not a symlink or a dir, then it's definitely a regular file.
 |  | ||||||
|     // don't bother doing a readdir in that case.
 |  | ||||||
|     if (!isSym && lstat && !lstat.isDirectory()) { |  | ||||||
|       self.cache[abs] = 'FILE' |  | ||||||
|       cb() |  | ||||||
|     } else |  | ||||||
|       self._readdir(abs, false, cb) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._readdir = function (abs, inGlobStar, cb) { |  | ||||||
|   if (this.aborted) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) |  | ||||||
|   if (!cb) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   //console.error('RD %j %j', +inGlobStar, abs)
 |  | ||||||
|   if (inGlobStar && !ownProp(this.symlinks, abs)) |  | ||||||
|     return this._readdirInGlobStar(abs, cb) |  | ||||||
| 
 |  | ||||||
|   if (ownProp(this.cache, abs)) { |  | ||||||
|     var c = this.cache[abs] |  | ||||||
|     if (!c || c === 'FILE') |  | ||||||
|       return cb() |  | ||||||
| 
 |  | ||||||
|     if (Array.isArray(c)) |  | ||||||
|       return cb(null, c) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var self = this |  | ||||||
|   fs.readdir(abs, readdirCb(this, abs, cb)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function readdirCb (self, abs, cb) { |  | ||||||
|   return function (er, entries) { |  | ||||||
|     if (er) |  | ||||||
|       self._readdirError(abs, er, cb) |  | ||||||
|     else |  | ||||||
|       self._readdirEntries(abs, entries, cb) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._readdirEntries = function (abs, entries, cb) { |  | ||||||
|   if (this.aborted) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   // if we haven't asked to stat everything, then just
 |  | ||||||
|   // assume that everything in there exists, so we can avoid
 |  | ||||||
|   // having to stat it a second time.
 |  | ||||||
|   if (!this.mark && !this.stat) { |  | ||||||
|     for (var i = 0; i < entries.length; i ++) { |  | ||||||
|       var e = entries[i] |  | ||||||
|       if (abs === '/') |  | ||||||
|         e = abs + e |  | ||||||
|       else |  | ||||||
|         e = abs + '/' + e |  | ||||||
|       this.cache[e] = true |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   this.cache[abs] = entries |  | ||||||
|   return cb(null, entries) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._readdirError = function (f, er, cb) { |  | ||||||
|   if (this.aborted) |  | ||||||
|     return |  | ||||||
| 
 |  | ||||||
|   // handle errors, and cache the information
 |  | ||||||
|   switch (er.code) { |  | ||||||
|     case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
 |  | ||||||
|     case 'ENOTDIR': // totally normal. means it *does* exist.
 |  | ||||||
|       var abs = this._makeAbs(f) |  | ||||||
|       this.cache[abs] = 'FILE' |  | ||||||
|       if (abs === this.cwdAbs) { |  | ||||||
|         var error = new Error(er.code + ' invalid cwd ' + this.cwd) |  | ||||||
|         error.path = this.cwd |  | ||||||
|         error.code = er.code |  | ||||||
|         this.emit('error', error) |  | ||||||
|         this.abort() |  | ||||||
|       } |  | ||||||
|       break |  | ||||||
| 
 |  | ||||||
|     case 'ENOENT': // not terribly unusual
 |  | ||||||
|     case 'ELOOP': |  | ||||||
|     case 'ENAMETOOLONG': |  | ||||||
|     case 'UNKNOWN': |  | ||||||
|       this.cache[this._makeAbs(f)] = false |  | ||||||
|       break |  | ||||||
| 
 |  | ||||||
|     default: // some unusual error.  Treat as failure.
 |  | ||||||
|       this.cache[this._makeAbs(f)] = false |  | ||||||
|       if (this.strict) { |  | ||||||
|         this.emit('error', er) |  | ||||||
|         // If the error is handled, then we abort
 |  | ||||||
|         // if not, we threw out of here
 |  | ||||||
|         this.abort() |  | ||||||
|       } |  | ||||||
|       if (!this.silent) |  | ||||||
|         console.error('glob error', er) |  | ||||||
|       break |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   return cb() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { |  | ||||||
|   var self = this |  | ||||||
|   this._readdir(abs, inGlobStar, function (er, entries) { |  | ||||||
|     self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { |  | ||||||
|   //console.error('pgs2', prefix, remain[0], entries)
 |  | ||||||
| 
 |  | ||||||
|   // no entries means not a dir, so it can never have matches
 |  | ||||||
|   // foo.txt/** doesn't match foo.txt
 |  | ||||||
|   if (!entries) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   // test without the globstar, and with every child both below
 |  | ||||||
|   // and replacing the globstar.
 |  | ||||||
|   var remainWithoutGlobStar = remain.slice(1) |  | ||||||
|   var gspref = prefix ? [ prefix ] : [] |  | ||||||
|   var noGlobStar = gspref.concat(remainWithoutGlobStar) |  | ||||||
| 
 |  | ||||||
|   // the noGlobStar pattern exits the inGlobStar state
 |  | ||||||
|   this._process(noGlobStar, index, false, cb) |  | ||||||
| 
 |  | ||||||
|   var isSym = this.symlinks[abs] |  | ||||||
|   var len = entries.length |  | ||||||
| 
 |  | ||||||
|   // If it's a symlink, and we're in a globstar, then stop
 |  | ||||||
|   if (isSym && inGlobStar) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   for (var i = 0; i < len; i++) { |  | ||||||
|     var e = entries[i] |  | ||||||
|     if (e.charAt(0) === '.' && !this.dot) |  | ||||||
|       continue |  | ||||||
| 
 |  | ||||||
|     // these two cases enter the inGlobStar state
 |  | ||||||
|     var instead = gspref.concat(entries[i], remainWithoutGlobStar) |  | ||||||
|     this._process(instead, index, true, cb) |  | ||||||
| 
 |  | ||||||
|     var below = gspref.concat(entries[i], remain) |  | ||||||
|     this._process(below, index, true, cb) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   cb() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._processSimple = function (prefix, index, cb) { |  | ||||||
|   // XXX review this.  Shouldn't it be doing the mounting etc
 |  | ||||||
|   // before doing stat?  kinda weird?
 |  | ||||||
|   var self = this |  | ||||||
|   this._stat(prefix, function (er, exists) { |  | ||||||
|     self._processSimple2(prefix, index, er, exists, cb) |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
| Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { |  | ||||||
| 
 |  | ||||||
|   //console.error('ps2', prefix, exists)
 |  | ||||||
| 
 |  | ||||||
|   if (!this.matches[index]) |  | ||||||
|     this.matches[index] = Object.create(null) |  | ||||||
| 
 |  | ||||||
|   // If it doesn't exist, then just mark the lack of results
 |  | ||||||
|   if (!exists) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   if (prefix && isAbsolute(prefix) && !this.nomount) { |  | ||||||
|     var trail = /[\/\\]$/.test(prefix) |  | ||||||
|     if (prefix.charAt(0) === '/') { |  | ||||||
|       prefix = path.join(this.root, prefix) |  | ||||||
|     } else { |  | ||||||
|       prefix = path.resolve(this.root, prefix) |  | ||||||
|       if (trail) |  | ||||||
|         prefix += '/' |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (process.platform === 'win32') |  | ||||||
|     prefix = prefix.replace(/\\/g, '/') |  | ||||||
| 
 |  | ||||||
|   // Mark this as a match
 |  | ||||||
|   this._emitMatch(index, prefix) |  | ||||||
|   cb() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Returns either 'DIR', 'FILE', or false
 |  | ||||||
| Glob.prototype._stat = function (f, cb) { |  | ||||||
|   var abs = this._makeAbs(f) |  | ||||||
|   var needDir = f.slice(-1) === '/' |  | ||||||
| 
 |  | ||||||
|   if (f.length > this.maxLength) |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   if (!this.stat && ownProp(this.cache, abs)) { |  | ||||||
|     var c = this.cache[abs] |  | ||||||
| 
 |  | ||||||
|     if (Array.isArray(c)) |  | ||||||
|       c = 'DIR' |  | ||||||
| 
 |  | ||||||
|     // It exists, but maybe not how we need it
 |  | ||||||
|     if (!needDir || c === 'DIR') |  | ||||||
|       return cb(null, c) |  | ||||||
| 
 |  | ||||||
|     if (needDir && c === 'FILE') |  | ||||||
|       return cb() |  | ||||||
| 
 |  | ||||||
|     // otherwise we have to stat, because maybe c=true
 |  | ||||||
|     // if we know it exists, but not what it is.
 |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var exists |  | ||||||
|   var stat = this.statCache[abs] |  | ||||||
|   if (stat !== undefined) { |  | ||||||
|     if (stat === false) |  | ||||||
|       return cb(null, stat) |  | ||||||
|     else { |  | ||||||
|       var type = stat.isDirectory() ? 'DIR' : 'FILE' |  | ||||||
|       if (needDir && type === 'FILE') |  | ||||||
|         return cb() |  | ||||||
|       else |  | ||||||
|         return cb(null, type, stat) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var self = this |  | ||||||
|   var statcb = inflight('stat\0' + abs, lstatcb_) |  | ||||||
|   if (statcb) |  | ||||||
|     fs.lstat(abs, statcb) |  | ||||||
| 
 |  | ||||||
|   function lstatcb_ (er, lstat) { |  | ||||||
|     if (lstat && lstat.isSymbolicLink()) { |  | ||||||
|       // If it's a symlink, then treat it as the target, unless
 |  | ||||||
|       // the target does not exist, then treat it as a file.
 |  | ||||||
|       return fs.stat(abs, function (er, stat) { |  | ||||||
|         if (er) |  | ||||||
|           self._stat2(f, abs, null, lstat, cb) |  | ||||||
|         else |  | ||||||
|           self._stat2(f, abs, er, stat, cb) |  | ||||||
|       }) |  | ||||||
|     } else { |  | ||||||
|       self._stat2(f, abs, er, lstat, cb) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Glob.prototype._stat2 = function (f, abs, er, stat, cb) { |  | ||||||
|   if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { |  | ||||||
|     this.statCache[abs] = false |  | ||||||
|     return cb() |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var needDir = f.slice(-1) === '/' |  | ||||||
|   this.statCache[abs] = stat |  | ||||||
| 
 |  | ||||||
|   if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) |  | ||||||
|     return cb(null, false, stat) |  | ||||||
| 
 |  | ||||||
|   var c = true |  | ||||||
|   if (stat) |  | ||||||
|     c = stat.isDirectory() ? 'DIR' : 'FILE' |  | ||||||
|   this.cache[abs] = this.cache[abs] || c |  | ||||||
| 
 |  | ||||||
|   if (needDir && c === 'FILE') |  | ||||||
|     return cb() |  | ||||||
| 
 |  | ||||||
|   return cb(null, c, stat) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 141: | /***/ 141: | ||||||
| @ -2515,6 +1718,775 @@ if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { | |||||||
| exports.debug = debug; // for test
 | exports.debug = debug; // for test
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 150: | ||||||
|  | /***/ (function(module, __unusedexports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | /*! | ||||||
|  |  * Tmp | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2011-2017 KARASZI Istvan <github@spam.raszi.hu> | ||||||
|  |  * | ||||||
|  |  * MIT Licensed | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  |  * Module dependencies. | ||||||
|  |  */ | ||||||
|  | const fs = __webpack_require__(747); | ||||||
|  | const os = __webpack_require__(87); | ||||||
|  | const path = __webpack_require__(622); | ||||||
|  | const crypto = __webpack_require__(417); | ||||||
|  | const _c = fs.constants && os.constants ? | ||||||
|  |   { fs: fs.constants, os: os.constants } : | ||||||
|  |   process.binding('constants'); | ||||||
|  | const rimraf = __webpack_require__(569); | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  |  * The working inner variables. | ||||||
|  |  */ | ||||||
|  | const | ||||||
|  |   // the random characters to choose from
 | ||||||
|  |   RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', | ||||||
|  | 
 | ||||||
|  |   TEMPLATE_PATTERN = /XXXXXX/, | ||||||
|  | 
 | ||||||
|  |   DEFAULT_TRIES = 3, | ||||||
|  | 
 | ||||||
|  |   CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR), | ||||||
|  | 
 | ||||||
|  |   EBADF = _c.EBADF || _c.os.errno.EBADF, | ||||||
|  |   ENOENT = _c.ENOENT || _c.os.errno.ENOENT, | ||||||
|  | 
 | ||||||
|  |   DIR_MODE = 448 /* 0o700 */, | ||||||
|  |   FILE_MODE = 384 /* 0o600 */, | ||||||
|  | 
 | ||||||
|  |   EXIT = 'exit', | ||||||
|  | 
 | ||||||
|  |   SIGINT = 'SIGINT', | ||||||
|  | 
 | ||||||
|  |   // this will hold the objects need to be removed on exit
 | ||||||
|  |   _removeObjects = []; | ||||||
|  | 
 | ||||||
|  | var | ||||||
|  |   _gracefulCleanup = false; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Random name generator based on crypto. | ||||||
|  |  * Adapted from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript
 | ||||||
|  |  * | ||||||
|  |  * @param {number} howMany | ||||||
|  |  * @returns {string} the generated random name | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _randomChars(howMany) { | ||||||
|  |   var | ||||||
|  |     value = [], | ||||||
|  |     rnd = null; | ||||||
|  | 
 | ||||||
|  |   // make sure that we do not fail because we ran out of entropy
 | ||||||
|  |   try { | ||||||
|  |     rnd = crypto.randomBytes(howMany); | ||||||
|  |   } catch (e) { | ||||||
|  |     rnd = crypto.pseudoRandomBytes(howMany); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   for (var i = 0; i < howMany; i++) { | ||||||
|  |     value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return value.join(''); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Checks whether the `obj` parameter is defined or not. | ||||||
|  |  * | ||||||
|  |  * @param {Object} obj | ||||||
|  |  * @returns {boolean} true if the object is undefined | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _isUndefined(obj) { | ||||||
|  |   return typeof obj === 'undefined'; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Parses the function arguments. | ||||||
|  |  * | ||||||
|  |  * This function helps to have optional arguments. | ||||||
|  |  * | ||||||
|  |  * @param {(Options|Function)} options | ||||||
|  |  * @param {Function} callback | ||||||
|  |  * @returns {Array} parsed arguments | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _parseArguments(options, callback) { | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (typeof options === 'function') { | ||||||
|  |     return [{}, options]; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (_isUndefined(options)) { | ||||||
|  |     return [{}, callback]; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return [options, callback]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Generates a new temporary name. | ||||||
|  |  * | ||||||
|  |  * @param {Object} opts | ||||||
|  |  * @returns {string} the new random name according to opts | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _generateTmpName(opts) { | ||||||
|  | 
 | ||||||
|  |   const tmpDir = _getTmpDir(); | ||||||
|  | 
 | ||||||
|  |   // fail early on missing tmp dir
 | ||||||
|  |   if (isBlank(opts.dir) && isBlank(tmpDir)) { | ||||||
|  |     throw new Error('No tmp dir specified'); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (!isBlank(opts.name)) { | ||||||
|  |     return path.join(opts.dir || tmpDir, opts.name); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // mkstemps like template
 | ||||||
|  |   // opts.template has already been guarded in tmpName() below
 | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (opts.template) { | ||||||
|  |     var template = opts.template; | ||||||
|  |     // make sure that we prepend the tmp path if none was given
 | ||||||
|  |     /* istanbul ignore else */ | ||||||
|  |     if (path.basename(template) === template) | ||||||
|  |       template = path.join(opts.dir || tmpDir, template); | ||||||
|  |     return template.replace(TEMPLATE_PATTERN, _randomChars(6)); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // prefix and postfix
 | ||||||
|  |   const name = [ | ||||||
|  |     (isBlank(opts.prefix) ? 'tmp-' : opts.prefix), | ||||||
|  |     process.pid, | ||||||
|  |     _randomChars(12), | ||||||
|  |     (opts.postfix ? opts.postfix : '') | ||||||
|  |   ].join(''); | ||||||
|  | 
 | ||||||
|  |   return path.join(opts.dir || tmpDir, name); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Gets a temporary file name. | ||||||
|  |  * | ||||||
|  |  * @param {(Options|tmpNameCallback)} options options or callback | ||||||
|  |  * @param {?tmpNameCallback} callback the callback function | ||||||
|  |  */ | ||||||
|  | function tmpName(options, callback) { | ||||||
|  |   var | ||||||
|  |     args = _parseArguments(options, callback), | ||||||
|  |     opts = args[0], | ||||||
|  |     cb = args[1], | ||||||
|  |     tries = !isBlank(opts.name) ? 1 : opts.tries || DEFAULT_TRIES; | ||||||
|  | 
 | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (isNaN(tries) || tries < 0) | ||||||
|  |     return cb(new Error('Invalid tries')); | ||||||
|  | 
 | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) | ||||||
|  |     return cb(new Error('Invalid template provided')); | ||||||
|  | 
 | ||||||
|  |   (function _getUniqueName() { | ||||||
|  |     try { | ||||||
|  |       const name = _generateTmpName(opts); | ||||||
|  | 
 | ||||||
|  |       // check whether the path exists then retry if needed
 | ||||||
|  |       fs.stat(name, function (err) { | ||||||
|  |         /* istanbul ignore else */ | ||||||
|  |         if (!err) { | ||||||
|  |           /* istanbul ignore else */ | ||||||
|  |           if (tries-- > 0) return _getUniqueName(); | ||||||
|  | 
 | ||||||
|  |           return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         cb(null, name); | ||||||
|  |       }); | ||||||
|  |     } catch (err) { | ||||||
|  |       cb(err); | ||||||
|  |     } | ||||||
|  |   }()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Synchronous version of tmpName. | ||||||
|  |  * | ||||||
|  |  * @param {Object} options | ||||||
|  |  * @returns {string} the generated random name | ||||||
|  |  * @throws {Error} if the options are invalid or could not generate a filename | ||||||
|  |  */ | ||||||
|  | function tmpNameSync(options) { | ||||||
|  |   var | ||||||
|  |     args = _parseArguments(options), | ||||||
|  |     opts = args[0], | ||||||
|  |     tries = !isBlank(opts.name) ? 1 : opts.tries || DEFAULT_TRIES; | ||||||
|  | 
 | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (isNaN(tries) || tries < 0) | ||||||
|  |     throw new Error('Invalid tries'); | ||||||
|  | 
 | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) | ||||||
|  |     throw new Error('Invalid template provided'); | ||||||
|  | 
 | ||||||
|  |   do { | ||||||
|  |     const name = _generateTmpName(opts); | ||||||
|  |     try { | ||||||
|  |       fs.statSync(name); | ||||||
|  |     } catch (e) { | ||||||
|  |       return name; | ||||||
|  |     } | ||||||
|  |   } while (tries-- > 0); | ||||||
|  | 
 | ||||||
|  |   throw new Error('Could not get a unique tmp filename, max tries reached'); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Creates and opens a temporary file. | ||||||
|  |  * | ||||||
|  |  * @param {(Options|fileCallback)} options the config options or the callback function | ||||||
|  |  * @param {?fileCallback} callback | ||||||
|  |  */ | ||||||
|  | function file(options, callback) { | ||||||
|  |   var | ||||||
|  |     args = _parseArguments(options, callback), | ||||||
|  |     opts = args[0], | ||||||
|  |     cb = args[1]; | ||||||
|  | 
 | ||||||
|  |   // gets a temporary filename
 | ||||||
|  |   tmpName(opts, function _tmpNameCreated(err, name) { | ||||||
|  |     /* istanbul ignore else */ | ||||||
|  |     if (err) return cb(err); | ||||||
|  | 
 | ||||||
|  |     // create and open the file
 | ||||||
|  |     fs.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err, fd) { | ||||||
|  |       /* istanbul ignore else */ | ||||||
|  |       if (err) return cb(err); | ||||||
|  | 
 | ||||||
|  |       if (opts.discardDescriptor) { | ||||||
|  |         return fs.close(fd, function _discardCallback(err) { | ||||||
|  |           /* istanbul ignore else */ | ||||||
|  |           if (err) { | ||||||
|  |             // Low probability, and the file exists, so this could be
 | ||||||
|  |             // ignored.  If it isn't we certainly need to unlink the
 | ||||||
|  |             // file, and if that fails too its error is more
 | ||||||
|  |             // important.
 | ||||||
|  |             try { | ||||||
|  |               fs.unlinkSync(name); | ||||||
|  |             } catch (e) { | ||||||
|  |               if (!isENOENT(e)) { | ||||||
|  |                 err = e; | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |             return cb(err); | ||||||
|  |           } | ||||||
|  |           cb(null, name, undefined, _prepareTmpFileRemoveCallback(name, -1, opts)); | ||||||
|  |         }); | ||||||
|  |       } | ||||||
|  |       /* istanbul ignore else */ | ||||||
|  |       if (opts.detachDescriptor) { | ||||||
|  |         return cb(null, name, fd, _prepareTmpFileRemoveCallback(name, -1, opts)); | ||||||
|  |       } | ||||||
|  |       cb(null, name, fd, _prepareTmpFileRemoveCallback(name, fd, opts)); | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Synchronous version of file. | ||||||
|  |  * | ||||||
|  |  * @param {Options} options | ||||||
|  |  * @returns {FileSyncObject} object consists of name, fd and removeCallback | ||||||
|  |  * @throws {Error} if cannot create a file | ||||||
|  |  */ | ||||||
|  | function fileSync(options) { | ||||||
|  |   var | ||||||
|  |     args = _parseArguments(options), | ||||||
|  |     opts = args[0]; | ||||||
|  | 
 | ||||||
|  |   const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor; | ||||||
|  |   const name = tmpNameSync(opts); | ||||||
|  |   var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE); | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (opts.discardDescriptor) { | ||||||
|  |     fs.closeSync(fd); | ||||||
|  |     fd = undefined; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return { | ||||||
|  |     name: name, | ||||||
|  |     fd: fd, | ||||||
|  |     removeCallback: _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts) | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Creates a temporary directory. | ||||||
|  |  * | ||||||
|  |  * @param {(Options|dirCallback)} options the options or the callback function | ||||||
|  |  * @param {?dirCallback} callback | ||||||
|  |  */ | ||||||
|  | function dir(options, callback) { | ||||||
|  |   var | ||||||
|  |     args = _parseArguments(options, callback), | ||||||
|  |     opts = args[0], | ||||||
|  |     cb = args[1]; | ||||||
|  | 
 | ||||||
|  |   // gets a temporary filename
 | ||||||
|  |   tmpName(opts, function _tmpNameCreated(err, name) { | ||||||
|  |     /* istanbul ignore else */ | ||||||
|  |     if (err) return cb(err); | ||||||
|  | 
 | ||||||
|  |     // create the directory
 | ||||||
|  |     fs.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err) { | ||||||
|  |       /* istanbul ignore else */ | ||||||
|  |       if (err) return cb(err); | ||||||
|  | 
 | ||||||
|  |       cb(null, name, _prepareTmpDirRemoveCallback(name, opts)); | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Synchronous version of dir. | ||||||
|  |  * | ||||||
|  |  * @param {Options} options | ||||||
|  |  * @returns {DirSyncObject} object consists of name and removeCallback | ||||||
|  |  * @throws {Error} if it cannot create a directory | ||||||
|  |  */ | ||||||
|  | function dirSync(options) { | ||||||
|  |   var | ||||||
|  |     args = _parseArguments(options), | ||||||
|  |     opts = args[0]; | ||||||
|  | 
 | ||||||
|  |   const name = tmpNameSync(opts); | ||||||
|  |   fs.mkdirSync(name, opts.mode || DIR_MODE); | ||||||
|  | 
 | ||||||
|  |   return { | ||||||
|  |     name: name, | ||||||
|  |     removeCallback: _prepareTmpDirRemoveCallback(name, opts) | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Removes files asynchronously. | ||||||
|  |  * | ||||||
|  |  * @param {Object} fdPath | ||||||
|  |  * @param {Function} next | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _removeFileAsync(fdPath, next) { | ||||||
|  |   const _handler = function (err) { | ||||||
|  |     if (err && !isENOENT(err)) { | ||||||
|  |       // reraise any unanticipated error
 | ||||||
|  |       return next(err); | ||||||
|  |     } | ||||||
|  |     next(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (0 <= fdPath[0]) | ||||||
|  |     fs.close(fdPath[0], function (err) { | ||||||
|  |       fs.unlink(fdPath[1], _handler); | ||||||
|  |     }); | ||||||
|  |   else fs.unlink(fdPath[1], _handler); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Removes files synchronously. | ||||||
|  |  * | ||||||
|  |  * @param {Object} fdPath | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _removeFileSync(fdPath) { | ||||||
|  |   try { | ||||||
|  |     if (0 <= fdPath[0]) fs.closeSync(fdPath[0]); | ||||||
|  |   } catch (e) { | ||||||
|  |     // reraise any unanticipated error
 | ||||||
|  |     if (!isEBADF(e) && !isENOENT(e)) throw e; | ||||||
|  |   } finally { | ||||||
|  |     try { | ||||||
|  |       fs.unlinkSync(fdPath[1]); | ||||||
|  |     } | ||||||
|  |     catch (e) { | ||||||
|  |       // reraise any unanticipated error
 | ||||||
|  |       if (!isENOENT(e)) throw e; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Prepares the callback for removal of the temporary file. | ||||||
|  |  * | ||||||
|  |  * @param {string} name the path of the file | ||||||
|  |  * @param {number} fd file descriptor | ||||||
|  |  * @param {Object} opts | ||||||
|  |  * @returns {fileCallback} | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _prepareTmpFileRemoveCallback(name, fd, opts) { | ||||||
|  |   const removeCallbackSync = _prepareRemoveCallback(_removeFileSync, [fd, name]); | ||||||
|  |   const removeCallback = _prepareRemoveCallback(_removeFileAsync, [fd, name], removeCallbackSync); | ||||||
|  | 
 | ||||||
|  |   if (!opts.keep) _removeObjects.unshift(removeCallbackSync); | ||||||
|  | 
 | ||||||
|  |   return removeCallback; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Simple wrapper for rimraf. | ||||||
|  |  * | ||||||
|  |  * @param {string} dirPath | ||||||
|  |  * @param {Function} next | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _rimrafRemoveDirWrapper(dirPath, next) { | ||||||
|  |   rimraf(dirPath, next); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Simple wrapper for rimraf.sync. | ||||||
|  |  * | ||||||
|  |  * @param {string} dirPath | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _rimrafRemoveDirSyncWrapper(dirPath, next) { | ||||||
|  |   try { | ||||||
|  |     return next(null, rimraf.sync(dirPath)); | ||||||
|  |   } catch (err) { | ||||||
|  |     return next(err); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Prepares the callback for removal of the temporary directory. | ||||||
|  |  * | ||||||
|  |  * @param {string} name | ||||||
|  |  * @param {Object} opts | ||||||
|  |  * @returns {Function} the callback | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _prepareTmpDirRemoveCallback(name, opts) { | ||||||
|  |   const removeFunction = opts.unsafeCleanup ? _rimrafRemoveDirWrapper : fs.rmdir.bind(fs); | ||||||
|  |   const removeFunctionSync = opts.unsafeCleanup ? _rimrafRemoveDirSyncWrapper : fs.rmdirSync.bind(fs); | ||||||
|  |   const removeCallbackSync = _prepareRemoveCallback(removeFunctionSync, name); | ||||||
|  |   const removeCallback = _prepareRemoveCallback(removeFunction, name, removeCallbackSync); | ||||||
|  |   if (!opts.keep) _removeObjects.unshift(removeCallbackSync); | ||||||
|  | 
 | ||||||
|  |   return removeCallback; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Creates a guarded function wrapping the removeFunction call. | ||||||
|  |  * | ||||||
|  |  * @param {Function} removeFunction | ||||||
|  |  * @param {Object} arg | ||||||
|  |  * @returns {Function} | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _prepareRemoveCallback(removeFunction, arg, cleanupCallbackSync) { | ||||||
|  |   var called = false; | ||||||
|  | 
 | ||||||
|  |   return function _cleanupCallback(next) { | ||||||
|  |     next = next || function () {}; | ||||||
|  |     if (!called) { | ||||||
|  |       const toRemove = cleanupCallbackSync || _cleanupCallback; | ||||||
|  |       const index = _removeObjects.indexOf(toRemove); | ||||||
|  |       /* istanbul ignore else */ | ||||||
|  |       if (index >= 0) _removeObjects.splice(index, 1); | ||||||
|  | 
 | ||||||
|  |       called = true; | ||||||
|  |       // sync?
 | ||||||
|  |       if (removeFunction.length === 1) { | ||||||
|  |         try { | ||||||
|  |           removeFunction(arg); | ||||||
|  |           return next(null); | ||||||
|  |         } | ||||||
|  |         catch (err) { | ||||||
|  |           // if no next is provided and since we are
 | ||||||
|  |           // in silent cleanup mode on process exit,
 | ||||||
|  |           // we will ignore the error
 | ||||||
|  |           return next(err); | ||||||
|  |         } | ||||||
|  |       } else return removeFunction(arg, next); | ||||||
|  |     } else return next(new Error('cleanup callback has already been called')); | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * The garbage collector. | ||||||
|  |  * | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _garbageCollector() { | ||||||
|  |   /* istanbul ignore else */ | ||||||
|  |   if (!_gracefulCleanup) return; | ||||||
|  | 
 | ||||||
|  |   // the function being called removes itself from _removeObjects,
 | ||||||
|  |   // loop until _removeObjects is empty
 | ||||||
|  |   while (_removeObjects.length) { | ||||||
|  |     try { | ||||||
|  |       _removeObjects[0](); | ||||||
|  |     } catch (e) { | ||||||
|  |       // already removed?
 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Helper for testing against EBADF to compensate changes made to Node 7.x under Windows. | ||||||
|  |  */ | ||||||
|  | function isEBADF(error) { | ||||||
|  |   return isExpectedError(error, -EBADF, 'EBADF'); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Helper for testing against ENOENT to compensate changes made to Node 7.x under Windows. | ||||||
|  |  */ | ||||||
|  | function isENOENT(error) { | ||||||
|  |   return isExpectedError(error, -ENOENT, 'ENOENT'); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Helper to determine whether the expected error code matches the actual code and errno, | ||||||
|  |  * which will differ between the supported node versions. | ||||||
|  |  * | ||||||
|  |  * - Node >= 7.0: | ||||||
|  |  *   error.code {string} | ||||||
|  |  *   error.errno {string|number} any numerical value will be negated | ||||||
|  |  * | ||||||
|  |  * - Node >= 6.0 < 7.0: | ||||||
|  |  *   error.code {string} | ||||||
|  |  *   error.errno {number} negated | ||||||
|  |  * | ||||||
|  |  * - Node >= 4.0 < 6.0: introduces SystemError | ||||||
|  |  *   error.code {string} | ||||||
|  |  *   error.errno {number} negated | ||||||
|  |  * | ||||||
|  |  * - Node >= 0.10 < 4.0: | ||||||
|  |  *   error.code {number} negated | ||||||
|  |  *   error.errno n/a | ||||||
|  |  */ | ||||||
|  | function isExpectedError(error, code, errno) { | ||||||
|  |   return error.code === code || error.code === errno; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Helper which determines whether a string s is blank, that is undefined, or empty or null. | ||||||
|  |  * | ||||||
|  |  * @private | ||||||
|  |  * @param {string} s | ||||||
|  |  * @returns {Boolean} true whether the string s is blank, false otherwise | ||||||
|  |  */ | ||||||
|  | function isBlank(s) { | ||||||
|  |   return s === null || s === undefined || !s.trim(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Sets the graceful cleanup. | ||||||
|  |  */ | ||||||
|  | function setGracefulCleanup() { | ||||||
|  |   _gracefulCleanup = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Returns the currently configured tmp dir from os.tmpdir(). | ||||||
|  |  * | ||||||
|  |  * @private | ||||||
|  |  * @returns {string} the currently configured tmp dir | ||||||
|  |  */ | ||||||
|  | function _getTmpDir() { | ||||||
|  |   return os.tmpdir(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * If there are multiple different versions of tmp in place, make sure that | ||||||
|  |  * we recognize the old listeners. | ||||||
|  |  * | ||||||
|  |  * @param {Function} listener | ||||||
|  |  * @private | ||||||
|  |  * @returns {Boolean} true whether listener is a legacy listener | ||||||
|  |  */ | ||||||
|  | function _is_legacy_listener(listener) { | ||||||
|  |   return (listener.name === '_exit' || listener.name === '_uncaughtExceptionThrown') | ||||||
|  |     && listener.toString().indexOf('_garbageCollector();') > -1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Safely install SIGINT listener. | ||||||
|  |  * | ||||||
|  |  * NOTE: this will only work on OSX and Linux. | ||||||
|  |  * | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _safely_install_sigint_listener() { | ||||||
|  | 
 | ||||||
|  |   const listeners = process.listeners(SIGINT); | ||||||
|  |   const existingListeners = []; | ||||||
|  |   for (let i = 0, length = listeners.length; i < length; i++) { | ||||||
|  |     const lstnr = listeners[i]; | ||||||
|  |     /* istanbul ignore else */ | ||||||
|  |     if (lstnr.name === '_tmp$sigint_listener') { | ||||||
|  |       existingListeners.push(lstnr); | ||||||
|  |       process.removeListener(SIGINT, lstnr); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   process.on(SIGINT, function _tmp$sigint_listener(doExit) { | ||||||
|  |     for (let i = 0, length = existingListeners.length; i < length; i++) { | ||||||
|  |       // let the existing listener do the garbage collection (e.g. jest sandbox)
 | ||||||
|  |       try { | ||||||
|  |         existingListeners[i](false); | ||||||
|  |       } catch (err) { | ||||||
|  |         // ignore
 | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     try { | ||||||
|  |       // force the garbage collector even it is called again in the exit listener
 | ||||||
|  |       _garbageCollector(); | ||||||
|  |     } finally { | ||||||
|  |       if (!!doExit) { | ||||||
|  |         process.exit(0); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Safely install process exit listener. | ||||||
|  |  * | ||||||
|  |  * @private | ||||||
|  |  */ | ||||||
|  | function _safely_install_exit_listener() { | ||||||
|  |   const listeners = process.listeners(EXIT); | ||||||
|  | 
 | ||||||
|  |   // collect any existing listeners
 | ||||||
|  |   const existingListeners = []; | ||||||
|  |   for (let i = 0, length = listeners.length; i < length; i++) { | ||||||
|  |     const lstnr = listeners[i]; | ||||||
|  |     /* istanbul ignore else */ | ||||||
|  |     // TODO: remove support for legacy listeners once release 1.0.0 is out
 | ||||||
|  |     if (lstnr.name === '_tmp$safe_listener' || _is_legacy_listener(lstnr)) { | ||||||
|  |       // we must forget about the uncaughtException listener, hopefully it is ours
 | ||||||
|  |       if (lstnr.name !== '_uncaughtExceptionThrown') { | ||||||
|  |         existingListeners.push(lstnr); | ||||||
|  |       } | ||||||
|  |       process.removeListener(EXIT, lstnr); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   // TODO: what was the data parameter good for?
 | ||||||
|  |   process.addListener(EXIT, function _tmp$safe_listener(data) { | ||||||
|  |     for (let i = 0, length = existingListeners.length; i < length; i++) { | ||||||
|  |       // let the existing listener do the garbage collection (e.g. jest sandbox)
 | ||||||
|  |       try { | ||||||
|  |         existingListeners[i](data); | ||||||
|  |       } catch (err) { | ||||||
|  |         // ignore
 | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     _garbageCollector(); | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | _safely_install_exit_listener(); | ||||||
|  | _safely_install_sigint_listener(); | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Configuration options. | ||||||
|  |  * | ||||||
|  |  * @typedef {Object} Options | ||||||
|  |  * @property {?number} tries the number of tries before give up the name generation | ||||||
|  |  * @property {?string} template the "mkstemp" like filename template | ||||||
|  |  * @property {?string} name fix name | ||||||
|  |  * @property {?string} dir the tmp directory to use | ||||||
|  |  * @property {?string} prefix prefix for the generated name | ||||||
|  |  * @property {?string} postfix postfix for the generated name | ||||||
|  |  * @property {?boolean} unsafeCleanup recursively removes the created temporary directory, even when it's not empty | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @typedef {Object} FileSyncObject | ||||||
|  |  * @property {string} name the name of the file | ||||||
|  |  * @property {string} fd the file descriptor | ||||||
|  |  * @property {fileCallback} removeCallback the callback function to remove the file | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @typedef {Object} DirSyncObject | ||||||
|  |  * @property {string} name the name of the directory | ||||||
|  |  * @property {fileCallback} removeCallback the callback function to remove the directory | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @callback tmpNameCallback | ||||||
|  |  * @param {?Error} err the error object if anything goes wrong | ||||||
|  |  * @param {string} name the temporary file name | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @callback fileCallback | ||||||
|  |  * @param {?Error} err the error object if anything goes wrong | ||||||
|  |  * @param {string} name the temporary file name | ||||||
|  |  * @param {number} fd the file descriptor | ||||||
|  |  * @param {cleanupCallback} fn the cleanup callback function | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @callback dirCallback | ||||||
|  |  * @param {?Error} err the error object if anything goes wrong | ||||||
|  |  * @param {string} name the temporary file name | ||||||
|  |  * @param {cleanupCallback} fn the cleanup callback function | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Removes the temporary created file or directory. | ||||||
|  |  * | ||||||
|  |  * @callback cleanupCallback | ||||||
|  |  * @param {simpleCallback} [next] function to call after entry was removed | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Callback function for function composition. | ||||||
|  |  * @see {@link https://github.com/raszi/node-tmp/issues/57|raszi/node-tmp#57}
 | ||||||
|  |  * | ||||||
|  |  * @callback simpleCallback | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | // exporting all the needed methods
 | ||||||
|  | 
 | ||||||
|  | // evaluate os.tmpdir() lazily, mainly for simplifying testing but it also will
 | ||||||
|  | // allow users to reconfigure the temporary directory
 | ||||||
|  | Object.defineProperty(module.exports, 'tmpdir', { | ||||||
|  |   enumerable: true, | ||||||
|  |   configurable: false, | ||||||
|  |   get: function () { | ||||||
|  |     return _getTmpDir(); | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | module.exports.dir = dir; | ||||||
|  | module.exports.dirSync = dirSync; | ||||||
|  | 
 | ||||||
|  | module.exports.file = file; | ||||||
|  | module.exports.fileSync = fileSync; | ||||||
|  | 
 | ||||||
|  | module.exports.tmpName = tmpName; | ||||||
|  | module.exports.tmpNameSync = tmpNameSync; | ||||||
|  | 
 | ||||||
|  | module.exports.setGracefulCleanup = setGracefulCleanup; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 176: | /***/ 176: | ||||||
| @ -2689,7 +2661,7 @@ var fs = __webpack_require__(747) | |||||||
| var rp = __webpack_require__(302) | var rp = __webpack_require__(302) | ||||||
| var minimatch = __webpack_require__(93) | var minimatch = __webpack_require__(93) | ||||||
| var Minimatch = minimatch.Minimatch | var Minimatch = minimatch.Minimatch | ||||||
| var Glob = __webpack_require__(120).Glob | var Glob = __webpack_require__(402).Glob | ||||||
| var util = __webpack_require__(669) | var util = __webpack_require__(669) | ||||||
| var path = __webpack_require__(622) | var path = __webpack_require__(622) | ||||||
| var assert = __webpack_require__(357) | var assert = __webpack_require__(357) | ||||||
| @ -4188,768 +4160,796 @@ exports.getRetentionDays = getRetentionDays; | |||||||
| /***/ 402: | /***/ 402: | ||||||
| /***/ (function(module, __unusedexports, __webpack_require__) { | /***/ (function(module, __unusedexports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| /*! | // Approach:
 | ||||||
|  * Tmp | //
 | ||||||
|  * | // 1. Get the minimatch set
 | ||||||
|  * Copyright (c) 2011-2017 KARASZI Istvan <github@spam.raszi.hu> | // 2. For each pattern in the set, PROCESS(pattern, false)
 | ||||||
|  * | // 3. Store matches per-set, then uniq them
 | ||||||
|  * MIT Licensed | //
 | ||||||
|  */ | // PROCESS(pattern, inGlobStar)
 | ||||||
|  | // Get the first [n] items from pattern that are all strings
 | ||||||
|  | // Join these together.  This is PREFIX.
 | ||||||
|  | //   If there is no more remaining, then stat(PREFIX) and
 | ||||||
|  | //   add to matches if it succeeds.  END.
 | ||||||
|  | //
 | ||||||
|  | // If inGlobStar and PREFIX is symlink and points to dir
 | ||||||
|  | //   set ENTRIES = []
 | ||||||
|  | // else readdir(PREFIX) as ENTRIES
 | ||||||
|  | //   If fail, END
 | ||||||
|  | //
 | ||||||
|  | // with ENTRIES
 | ||||||
|  | //   If pattern[n] is GLOBSTAR
 | ||||||
|  | //     // handle the case where the globstar match is empty
 | ||||||
|  | //     // by pruning it out, and testing the resulting pattern
 | ||||||
|  | //     PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
 | ||||||
|  | //     // handle other cases.
 | ||||||
|  | //     for ENTRY in ENTRIES (not dotfiles)
 | ||||||
|  | //       // attach globstar + tail onto the entry
 | ||||||
|  | //       // Mark that this entry is a globstar match
 | ||||||
|  | //       PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
 | ||||||
|  | //
 | ||||||
|  | //   else // not globstar
 | ||||||
|  | //     for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
 | ||||||
|  | //       Test ENTRY against pattern[n]
 | ||||||
|  | //       If fails, continue
 | ||||||
|  | //       If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
 | ||||||
|  | //
 | ||||||
|  | // Caveat:
 | ||||||
|  | //   Cache all stats and readdirs results to minimize syscall.  Since all
 | ||||||
|  | //   we ever care about is existence and directory-ness, we can just keep
 | ||||||
|  | //   `true` for files, and [children,...] for directories, or `false` for
 | ||||||
|  | //   things that don't exist.
 | ||||||
| 
 | 
 | ||||||
| /* | module.exports = glob | ||||||
|  * Module dependencies. |  | ||||||
|  */ |  | ||||||
| const fs = __webpack_require__(747); |  | ||||||
| const os = __webpack_require__(87); |  | ||||||
| const path = __webpack_require__(622); |  | ||||||
| const crypto = __webpack_require__(417); |  | ||||||
| const _c = fs.constants && os.constants ? |  | ||||||
|   { fs: fs.constants, os: os.constants } : |  | ||||||
|   process.binding('constants'); |  | ||||||
| const rimraf = __webpack_require__(569); |  | ||||||
| 
 | 
 | ||||||
| /* | var fs = __webpack_require__(747) | ||||||
|  * The working inner variables. | var rp = __webpack_require__(302) | ||||||
|  */ | var minimatch = __webpack_require__(93) | ||||||
| const | var Minimatch = minimatch.Minimatch | ||||||
|   // the random characters to choose from
 | var inherits = __webpack_require__(689) | ||||||
|   RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', | var EE = __webpack_require__(614).EventEmitter | ||||||
|  | var path = __webpack_require__(622) | ||||||
|  | var assert = __webpack_require__(357) | ||||||
|  | var isAbsolute = __webpack_require__(681) | ||||||
|  | var globSync = __webpack_require__(245) | ||||||
|  | var common = __webpack_require__(856) | ||||||
|  | var alphasort = common.alphasort | ||||||
|  | var alphasorti = common.alphasorti | ||||||
|  | var setopts = common.setopts | ||||||
|  | var ownProp = common.ownProp | ||||||
|  | var inflight = __webpack_require__(674) | ||||||
|  | var util = __webpack_require__(669) | ||||||
|  | var childrenIgnored = common.childrenIgnored | ||||||
|  | var isIgnored = common.isIgnored | ||||||
| 
 | 
 | ||||||
|   TEMPLATE_PATTERN = /XXXXXX/, | var once = __webpack_require__(49) | ||||||
| 
 | 
 | ||||||
|   DEFAULT_TRIES = 3, | function glob (pattern, options, cb) { | ||||||
|  |   if (typeof options === 'function') cb = options, options = {} | ||||||
|  |   if (!options) options = {} | ||||||
| 
 | 
 | ||||||
|   CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR), |   if (options.sync) { | ||||||
| 
 |     if (cb) | ||||||
|   EBADF = _c.EBADF || _c.os.errno.EBADF, |       throw new TypeError('callback provided to sync glob') | ||||||
|   ENOENT = _c.ENOENT || _c.os.errno.ENOENT, |     return globSync(pattern, options) | ||||||
| 
 |  | ||||||
|   DIR_MODE = 448 /* 0o700 */, |  | ||||||
|   FILE_MODE = 384 /* 0o600 */, |  | ||||||
| 
 |  | ||||||
|   EXIT = 'exit', |  | ||||||
| 
 |  | ||||||
|   SIGINT = 'SIGINT', |  | ||||||
| 
 |  | ||||||
|   // this will hold the objects need to be removed on exit
 |  | ||||||
|   _removeObjects = []; |  | ||||||
| 
 |  | ||||||
| var |  | ||||||
|   _gracefulCleanup = false; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Random name generator based on crypto. |  | ||||||
|  * Adapted from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript
 |  | ||||||
|  * |  | ||||||
|  * @param {number} howMany |  | ||||||
|  * @returns {string} the generated random name |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _randomChars(howMany) { |  | ||||||
|   var |  | ||||||
|     value = [], |  | ||||||
|     rnd = null; |  | ||||||
| 
 |  | ||||||
|   // make sure that we do not fail because we ran out of entropy
 |  | ||||||
|   try { |  | ||||||
|     rnd = crypto.randomBytes(howMany); |  | ||||||
|   } catch (e) { |  | ||||||
|     rnd = crypto.pseudoRandomBytes(howMany); |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   for (var i = 0; i < howMany; i++) { |   return new Glob(pattern, options, cb) | ||||||
|     value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|   return value.join(''); | glob.sync = globSync | ||||||
|  | var GlobSync = glob.GlobSync = globSync.GlobSync | ||||||
|  | 
 | ||||||
|  | // old api surface
 | ||||||
|  | glob.glob = glob | ||||||
|  | 
 | ||||||
|  | function extend (origin, add) { | ||||||
|  |   if (add === null || typeof add !== 'object') { | ||||||
|  |     return origin | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| /** |   var keys = Object.keys(add) | ||||||
|  * Checks whether the `obj` parameter is defined or not. |   var i = keys.length | ||||||
|  * |   while (i--) { | ||||||
|  * @param {Object} obj |     origin[keys[i]] = add[keys[i]] | ||||||
|  * @returns {boolean} true if the object is undefined |   } | ||||||
|  * @private |   return origin | ||||||
|  */ |  | ||||||
| function _isUndefined(obj) { |  | ||||||
|   return typeof obj === 'undefined'; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | glob.hasMagic = function (pattern, options_) { | ||||||
|  * Parses the function arguments. |   var options = extend({}, options_) | ||||||
|  * |   options.noprocess = true | ||||||
|  * This function helps to have optional arguments. | 
 | ||||||
|  * |   var g = new Glob(pattern, options) | ||||||
|  * @param {(Options|Function)} options |   var set = g.minimatch.set | ||||||
|  * @param {Function} callback | 
 | ||||||
|  * @returns {Array} parsed arguments |   if (!pattern) | ||||||
|  * @private |     return false | ||||||
|  */ | 
 | ||||||
| function _parseArguments(options, callback) { |   if (set.length > 1) | ||||||
|   /* istanbul ignore else */ |     return true | ||||||
|  | 
 | ||||||
|  |   for (var j = 0; j < set[0].length; j++) { | ||||||
|  |     if (typeof set[0][j] !== 'string') | ||||||
|  |       return true | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | glob.Glob = Glob | ||||||
|  | inherits(Glob, EE) | ||||||
|  | function Glob (pattern, options, cb) { | ||||||
|   if (typeof options === 'function') { |   if (typeof options === 'function') { | ||||||
|     return [{}, options]; |     cb = options | ||||||
|  |     options = null | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /* istanbul ignore else */ |   if (options && options.sync) { | ||||||
|   if (_isUndefined(options)) { |     if (cb) | ||||||
|     return [{}, callback]; |       throw new TypeError('callback provided to sync glob') | ||||||
|  |     return new GlobSync(pattern, options) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   return [options, callback]; |   if (!(this instanceof Glob)) | ||||||
|  |     return new Glob(pattern, options, cb) | ||||||
|  | 
 | ||||||
|  |   setopts(this, pattern, options) | ||||||
|  |   this._didRealPath = false | ||||||
|  | 
 | ||||||
|  |   // process each pattern in the minimatch set
 | ||||||
|  |   var n = this.minimatch.set.length | ||||||
|  | 
 | ||||||
|  |   // The matches are stored as {<filename>: true,...} so that
 | ||||||
|  |   // duplicates are automagically pruned.
 | ||||||
|  |   // Later, we do an Object.keys() on these.
 | ||||||
|  |   // Keep them as a list so we can fill in when nonull is set.
 | ||||||
|  |   this.matches = new Array(n) | ||||||
|  | 
 | ||||||
|  |   if (typeof cb === 'function') { | ||||||
|  |     cb = once(cb) | ||||||
|  |     this.on('error', cb) | ||||||
|  |     this.on('end', function (matches) { | ||||||
|  |       cb(null, matches) | ||||||
|  |     }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| /** |   var self = this | ||||||
|  * Generates a new temporary name. |   this._processing = 0 | ||||||
|  * |  | ||||||
|  * @param {Object} opts |  | ||||||
|  * @returns {string} the new random name according to opts |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _generateTmpName(opts) { |  | ||||||
| 
 | 
 | ||||||
|   const tmpDir = _getTmpDir(); |   this._emitQueue = [] | ||||||
|  |   this._processQueue = [] | ||||||
|  |   this.paused = false | ||||||
| 
 | 
 | ||||||
|   // fail early on missing tmp dir
 |   if (this.noprocess) | ||||||
|   if (isBlank(opts.dir) && isBlank(tmpDir)) { |     return this | ||||||
|     throw new Error('No tmp dir specified'); | 
 | ||||||
|  |   if (n === 0) | ||||||
|  |     return done() | ||||||
|  | 
 | ||||||
|  |   var sync = true | ||||||
|  |   for (var i = 0; i < n; i ++) { | ||||||
|  |     this._process(this.minimatch.set[i], i, false, done) | ||||||
|   } |   } | ||||||
|  |   sync = false | ||||||
| 
 | 
 | ||||||
|   /* istanbul ignore else */ |   function done () { | ||||||
|   if (!isBlank(opts.name)) { |     --self._processing | ||||||
|     return path.join(opts.dir || tmpDir, opts.name); |     if (self._processing <= 0) { | ||||||
|  |       if (sync) { | ||||||
|  |         process.nextTick(function () { | ||||||
|  |           self._finish() | ||||||
|  |         }) | ||||||
|  |       } else { | ||||||
|  |         self._finish() | ||||||
|       } |       } | ||||||
| 
 |  | ||||||
|   // mkstemps like template
 |  | ||||||
|   // opts.template has already been guarded in tmpName() below
 |  | ||||||
|   /* istanbul ignore else */ |  | ||||||
|   if (opts.template) { |  | ||||||
|     var template = opts.template; |  | ||||||
|     // make sure that we prepend the tmp path if none was given
 |  | ||||||
|     /* istanbul ignore else */ |  | ||||||
|     if (path.basename(template) === template) |  | ||||||
|       template = path.join(opts.dir || tmpDir, template); |  | ||||||
|     return template.replace(TEMPLATE_PATTERN, _randomChars(6)); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // prefix and postfix
 |  | ||||||
|   const name = [ |  | ||||||
|     (isBlank(opts.prefix) ? 'tmp-' : opts.prefix), |  | ||||||
|     process.pid, |  | ||||||
|     _randomChars(12), |  | ||||||
|     (opts.postfix ? opts.postfix : '') |  | ||||||
|   ].join(''); |  | ||||||
| 
 |  | ||||||
|   return path.join(opts.dir || tmpDir, name); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Gets a temporary file name. |  | ||||||
|  * |  | ||||||
|  * @param {(Options|tmpNameCallback)} options options or callback |  | ||||||
|  * @param {?tmpNameCallback} callback the callback function |  | ||||||
|  */ |  | ||||||
| function tmpName(options, callback) { |  | ||||||
|   var |  | ||||||
|     args = _parseArguments(options, callback), |  | ||||||
|     opts = args[0], |  | ||||||
|     cb = args[1], |  | ||||||
|     tries = !isBlank(opts.name) ? 1 : opts.tries || DEFAULT_TRIES; |  | ||||||
| 
 |  | ||||||
|   /* istanbul ignore else */ |  | ||||||
|   if (isNaN(tries) || tries < 0) |  | ||||||
|     return cb(new Error('Invalid tries')); |  | ||||||
| 
 |  | ||||||
|   /* istanbul ignore else */ |  | ||||||
|   if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) |  | ||||||
|     return cb(new Error('Invalid template provided')); |  | ||||||
| 
 |  | ||||||
|   (function _getUniqueName() { |  | ||||||
|     try { |  | ||||||
|       const name = _generateTmpName(opts); |  | ||||||
| 
 |  | ||||||
|       // check whether the path exists then retry if needed
 |  | ||||||
|       fs.stat(name, function (err) { |  | ||||||
|         /* istanbul ignore else */ |  | ||||||
|         if (!err) { |  | ||||||
|           /* istanbul ignore else */ |  | ||||||
|           if (tries-- > 0) return _getUniqueName(); |  | ||||||
| 
 |  | ||||||
|           return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name)); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         cb(null, name); |  | ||||||
|       }); |  | ||||||
|     } catch (err) { |  | ||||||
|       cb(err); |  | ||||||
|     } |  | ||||||
|   }()); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Synchronous version of tmpName. |  | ||||||
|  * |  | ||||||
|  * @param {Object} options |  | ||||||
|  * @returns {string} the generated random name |  | ||||||
|  * @throws {Error} if the options are invalid or could not generate a filename |  | ||||||
|  */ |  | ||||||
| function tmpNameSync(options) { |  | ||||||
|   var |  | ||||||
|     args = _parseArguments(options), |  | ||||||
|     opts = args[0], |  | ||||||
|     tries = !isBlank(opts.name) ? 1 : opts.tries || DEFAULT_TRIES; |  | ||||||
| 
 |  | ||||||
|   /* istanbul ignore else */ |  | ||||||
|   if (isNaN(tries) || tries < 0) |  | ||||||
|     throw new Error('Invalid tries'); |  | ||||||
| 
 |  | ||||||
|   /* istanbul ignore else */ |  | ||||||
|   if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) |  | ||||||
|     throw new Error('Invalid template provided'); |  | ||||||
| 
 |  | ||||||
|   do { |  | ||||||
|     const name = _generateTmpName(opts); |  | ||||||
|     try { |  | ||||||
|       fs.statSync(name); |  | ||||||
|     } catch (e) { |  | ||||||
|       return name; |  | ||||||
|     } |  | ||||||
|   } while (tries-- > 0); |  | ||||||
| 
 |  | ||||||
|   throw new Error('Could not get a unique tmp filename, max tries reached'); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Creates and opens a temporary file. |  | ||||||
|  * |  | ||||||
|  * @param {(Options|fileCallback)} options the config options or the callback function |  | ||||||
|  * @param {?fileCallback} callback |  | ||||||
|  */ |  | ||||||
| function file(options, callback) { |  | ||||||
|   var |  | ||||||
|     args = _parseArguments(options, callback), |  | ||||||
|     opts = args[0], |  | ||||||
|     cb = args[1]; |  | ||||||
| 
 |  | ||||||
|   // gets a temporary filename
 |  | ||||||
|   tmpName(opts, function _tmpNameCreated(err, name) { |  | ||||||
|     /* istanbul ignore else */ |  | ||||||
|     if (err) return cb(err); |  | ||||||
| 
 |  | ||||||
|     // create and open the file
 |  | ||||||
|     fs.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err, fd) { |  | ||||||
|       /* istanbul ignore else */ |  | ||||||
|       if (err) return cb(err); |  | ||||||
| 
 |  | ||||||
|       if (opts.discardDescriptor) { |  | ||||||
|         return fs.close(fd, function _discardCallback(err) { |  | ||||||
|           /* istanbul ignore else */ |  | ||||||
|           if (err) { |  | ||||||
|             // Low probability, and the file exists, so this could be
 |  | ||||||
|             // ignored.  If it isn't we certainly need to unlink the
 |  | ||||||
|             // file, and if that fails too its error is more
 |  | ||||||
|             // important.
 |  | ||||||
|             try { |  | ||||||
|               fs.unlinkSync(name); |  | ||||||
|             } catch (e) { |  | ||||||
|               if (!isENOENT(e)) { |  | ||||||
|                 err = e; |  | ||||||
|               } |  | ||||||
|             } |  | ||||||
|             return cb(err); |  | ||||||
|           } |  | ||||||
|           cb(null, name, undefined, _prepareTmpFileRemoveCallback(name, -1, opts)); |  | ||||||
|         }); |  | ||||||
|       } |  | ||||||
|       /* istanbul ignore else */ |  | ||||||
|       if (opts.detachDescriptor) { |  | ||||||
|         return cb(null, name, fd, _prepareTmpFileRemoveCallback(name, -1, opts)); |  | ||||||
|       } |  | ||||||
|       cb(null, name, fd, _prepareTmpFileRemoveCallback(name, fd, opts)); |  | ||||||
|     }); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Synchronous version of file. |  | ||||||
|  * |  | ||||||
|  * @param {Options} options |  | ||||||
|  * @returns {FileSyncObject} object consists of name, fd and removeCallback |  | ||||||
|  * @throws {Error} if cannot create a file |  | ||||||
|  */ |  | ||||||
| function fileSync(options) { |  | ||||||
|   var |  | ||||||
|     args = _parseArguments(options), |  | ||||||
|     opts = args[0]; |  | ||||||
| 
 |  | ||||||
|   const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor; |  | ||||||
|   const name = tmpNameSync(opts); |  | ||||||
|   var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE); |  | ||||||
|   /* istanbul ignore else */ |  | ||||||
|   if (opts.discardDescriptor) { |  | ||||||
|     fs.closeSync(fd); |  | ||||||
|     fd = undefined; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   return { |  | ||||||
|     name: name, |  | ||||||
|     fd: fd, |  | ||||||
|     removeCallback: _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts) |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Creates a temporary directory. |  | ||||||
|  * |  | ||||||
|  * @param {(Options|dirCallback)} options the options or the callback function |  | ||||||
|  * @param {?dirCallback} callback |  | ||||||
|  */ |  | ||||||
| function dir(options, callback) { |  | ||||||
|   var |  | ||||||
|     args = _parseArguments(options, callback), |  | ||||||
|     opts = args[0], |  | ||||||
|     cb = args[1]; |  | ||||||
| 
 |  | ||||||
|   // gets a temporary filename
 |  | ||||||
|   tmpName(opts, function _tmpNameCreated(err, name) { |  | ||||||
|     /* istanbul ignore else */ |  | ||||||
|     if (err) return cb(err); |  | ||||||
| 
 |  | ||||||
|     // create the directory
 |  | ||||||
|     fs.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err) { |  | ||||||
|       /* istanbul ignore else */ |  | ||||||
|       if (err) return cb(err); |  | ||||||
| 
 |  | ||||||
|       cb(null, name, _prepareTmpDirRemoveCallback(name, opts)); |  | ||||||
|     }); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Synchronous version of dir. |  | ||||||
|  * |  | ||||||
|  * @param {Options} options |  | ||||||
|  * @returns {DirSyncObject} object consists of name and removeCallback |  | ||||||
|  * @throws {Error} if it cannot create a directory |  | ||||||
|  */ |  | ||||||
| function dirSync(options) { |  | ||||||
|   var |  | ||||||
|     args = _parseArguments(options), |  | ||||||
|     opts = args[0]; |  | ||||||
| 
 |  | ||||||
|   const name = tmpNameSync(opts); |  | ||||||
|   fs.mkdirSync(name, opts.mode || DIR_MODE); |  | ||||||
| 
 |  | ||||||
|   return { |  | ||||||
|     name: name, |  | ||||||
|     removeCallback: _prepareTmpDirRemoveCallback(name, opts) |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Removes files asynchronously. |  | ||||||
|  * |  | ||||||
|  * @param {Object} fdPath |  | ||||||
|  * @param {Function} next |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _removeFileAsync(fdPath, next) { |  | ||||||
|   const _handler = function (err) { |  | ||||||
|     if (err && !isENOENT(err)) { |  | ||||||
|       // reraise any unanticipated error
 |  | ||||||
|       return next(err); |  | ||||||
|     } |  | ||||||
|     next(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (0 <= fdPath[0]) |  | ||||||
|     fs.close(fdPath[0], function (err) { |  | ||||||
|       fs.unlink(fdPath[1], _handler); |  | ||||||
|     }); |  | ||||||
|   else fs.unlink(fdPath[1], _handler); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Removes files synchronously. |  | ||||||
|  * |  | ||||||
|  * @param {Object} fdPath |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _removeFileSync(fdPath) { |  | ||||||
|   try { |  | ||||||
|     if (0 <= fdPath[0]) fs.closeSync(fdPath[0]); |  | ||||||
|   } catch (e) { |  | ||||||
|     // reraise any unanticipated error
 |  | ||||||
|     if (!isEBADF(e) && !isENOENT(e)) throw e; |  | ||||||
|   } finally { |  | ||||||
|     try { |  | ||||||
|       fs.unlinkSync(fdPath[1]); |  | ||||||
|     } |  | ||||||
|     catch (e) { |  | ||||||
|       // reraise any unanticipated error
 |  | ||||||
|       if (!isENOENT(e)) throw e; |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._finish = function () { | ||||||
|  * Prepares the callback for removal of the temporary file. |   assert(this instanceof Glob) | ||||||
|  * |   if (this.aborted) | ||||||
|  * @param {string} name the path of the file |     return | ||||||
|  * @param {number} fd file descriptor |  | ||||||
|  * @param {Object} opts |  | ||||||
|  * @returns {fileCallback} |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _prepareTmpFileRemoveCallback(name, fd, opts) { |  | ||||||
|   const removeCallbackSync = _prepareRemoveCallback(_removeFileSync, [fd, name]); |  | ||||||
|   const removeCallback = _prepareRemoveCallback(_removeFileAsync, [fd, name], removeCallbackSync); |  | ||||||
| 
 | 
 | ||||||
|   if (!opts.keep) _removeObjects.unshift(removeCallbackSync); |   if (this.realpath && !this._didRealpath) | ||||||
|  |     return this._realpath() | ||||||
| 
 | 
 | ||||||
|   return removeCallback; |   common.finish(this) | ||||||
|  |   this.emit('end', this.found) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._realpath = function () { | ||||||
|  * Simple wrapper for rimraf. |   if (this._didRealpath) | ||||||
|  * |     return | ||||||
|  * @param {string} dirPath |  | ||||||
|  * @param {Function} next |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _rimrafRemoveDirWrapper(dirPath, next) { |  | ||||||
|   rimraf(dirPath, next); |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| /** |   this._didRealpath = true | ||||||
|  * Simple wrapper for rimraf.sync. | 
 | ||||||
|  * |   var n = this.matches.length | ||||||
|  * @param {string} dirPath |   if (n === 0) | ||||||
|  * @private |     return this._finish() | ||||||
|  */ | 
 | ||||||
| function _rimrafRemoveDirSyncWrapper(dirPath, next) { |   var self = this | ||||||
|   try { |   for (var i = 0; i < this.matches.length; i++) | ||||||
|     return next(null, rimraf.sync(dirPath)); |     this._realpathSet(i, next) | ||||||
|   } catch (err) { | 
 | ||||||
|     return next(err); |   function next () { | ||||||
|  |     if (--n === 0) | ||||||
|  |       self._finish() | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._realpathSet = function (index, cb) { | ||||||
|  * Prepares the callback for removal of the temporary directory. |   var matchset = this.matches[index] | ||||||
|  * |   if (!matchset) | ||||||
|  * @param {string} name |     return cb() | ||||||
|  * @param {Object} opts |  | ||||||
|  * @returns {Function} the callback |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _prepareTmpDirRemoveCallback(name, opts) { |  | ||||||
|   const removeFunction = opts.unsafeCleanup ? _rimrafRemoveDirWrapper : fs.rmdir.bind(fs); |  | ||||||
|   const removeFunctionSync = opts.unsafeCleanup ? _rimrafRemoveDirSyncWrapper : fs.rmdirSync.bind(fs); |  | ||||||
|   const removeCallbackSync = _prepareRemoveCallback(removeFunctionSync, name); |  | ||||||
|   const removeCallback = _prepareRemoveCallback(removeFunction, name, removeCallbackSync); |  | ||||||
|   if (!opts.keep) _removeObjects.unshift(removeCallbackSync); |  | ||||||
| 
 | 
 | ||||||
|   return removeCallback; |   var found = Object.keys(matchset) | ||||||
|  |   var self = this | ||||||
|  |   var n = found.length | ||||||
|  | 
 | ||||||
|  |   if (n === 0) | ||||||
|  |     return cb() | ||||||
|  | 
 | ||||||
|  |   var set = this.matches[index] = Object.create(null) | ||||||
|  |   found.forEach(function (p, i) { | ||||||
|  |     // If there's a problem with the stat, then it means that
 | ||||||
|  |     // one or more of the links in the realpath couldn't be
 | ||||||
|  |     // resolved.  just return the abs value in that case.
 | ||||||
|  |     p = self._makeAbs(p) | ||||||
|  |     rp.realpath(p, self.realpathCache, function (er, real) { | ||||||
|  |       if (!er) | ||||||
|  |         set[real] = true | ||||||
|  |       else if (er.syscall === 'stat') | ||||||
|  |         set[p] = true | ||||||
|  |       else | ||||||
|  |         self.emit('error', er) // srsly wtf right here
 | ||||||
|  | 
 | ||||||
|  |       if (--n === 0) { | ||||||
|  |         self.matches[index] = set | ||||||
|  |         cb() | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|  |   }) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._mark = function (p) { | ||||||
|  * Creates a guarded function wrapping the removeFunction call. |   return common.mark(this, p) | ||||||
|  * |  | ||||||
|  * @param {Function} removeFunction |  | ||||||
|  * @param {Object} arg |  | ||||||
|  * @returns {Function} |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _prepareRemoveCallback(removeFunction, arg, cleanupCallbackSync) { |  | ||||||
|   var called = false; |  | ||||||
| 
 |  | ||||||
|   return function _cleanupCallback(next) { |  | ||||||
|     next = next || function () {}; |  | ||||||
|     if (!called) { |  | ||||||
|       const toRemove = cleanupCallbackSync || _cleanupCallback; |  | ||||||
|       const index = _removeObjects.indexOf(toRemove); |  | ||||||
|       /* istanbul ignore else */ |  | ||||||
|       if (index >= 0) _removeObjects.splice(index, 1); |  | ||||||
| 
 |  | ||||||
|       called = true; |  | ||||||
|       // sync?
 |  | ||||||
|       if (removeFunction.length === 1) { |  | ||||||
|         try { |  | ||||||
|           removeFunction(arg); |  | ||||||
|           return next(null); |  | ||||||
|         } |  | ||||||
|         catch (err) { |  | ||||||
|           // if no next is provided and since we are
 |  | ||||||
|           // in silent cleanup mode on process exit,
 |  | ||||||
|           // we will ignore the error
 |  | ||||||
|           return next(err); |  | ||||||
|         } |  | ||||||
|       } else return removeFunction(arg, next); |  | ||||||
|     } else return next(new Error('cleanup callback has already been called')); |  | ||||||
|   }; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._makeAbs = function (f) { | ||||||
|  * The garbage collector. |   return common.makeAbs(this, f) | ||||||
|  * | } | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _garbageCollector() { |  | ||||||
|   /* istanbul ignore else */ |  | ||||||
|   if (!_gracefulCleanup) return; |  | ||||||
| 
 | 
 | ||||||
|   // the function being called removes itself from _removeObjects,
 | Glob.prototype.abort = function () { | ||||||
|   // loop until _removeObjects is empty
 |   this.aborted = true | ||||||
|   while (_removeObjects.length) { |   this.emit('abort') | ||||||
|     try { | } | ||||||
|       _removeObjects[0](); | 
 | ||||||
|     } catch (e) { | Glob.prototype.pause = function () { | ||||||
|       // already removed?
 |   if (!this.paused) { | ||||||
|  |     this.paused = true | ||||||
|  |     this.emit('pause') | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype.resume = function () { | ||||||
|  |   if (this.paused) { | ||||||
|  |     this.emit('resume') | ||||||
|  |     this.paused = false | ||||||
|  |     if (this._emitQueue.length) { | ||||||
|  |       var eq = this._emitQueue.slice(0) | ||||||
|  |       this._emitQueue.length = 0 | ||||||
|  |       for (var i = 0; i < eq.length; i ++) { | ||||||
|  |         var e = eq[i] | ||||||
|  |         this._emitMatch(e[0], e[1]) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     if (this._processQueue.length) { | ||||||
|  |       var pq = this._processQueue.slice(0) | ||||||
|  |       this._processQueue.length = 0 | ||||||
|  |       for (var i = 0; i < pq.length; i ++) { | ||||||
|  |         var p = pq[i] | ||||||
|  |         this._processing-- | ||||||
|  |         this._process(p[0], p[1], p[2], p[3]) | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._process = function (pattern, index, inGlobStar, cb) { | ||||||
|  * Helper for testing against EBADF to compensate changes made to Node 7.x under Windows. |   assert(this instanceof Glob) | ||||||
|  */ |   assert(typeof cb === 'function') | ||||||
| function isEBADF(error) { | 
 | ||||||
|   return isExpectedError(error, -EBADF, 'EBADF'); |   if (this.aborted) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  |   this._processing++ | ||||||
|  |   if (this.paused) { | ||||||
|  |     this._processQueue.push([pattern, index, inGlobStar, cb]) | ||||||
|  |     return | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| /** |   //console.error('PROCESS %d', this._processing, pattern)
 | ||||||
|  * Helper for testing against ENOENT to compensate changes made to Node 7.x under Windows. | 
 | ||||||
|  */ |   // Get the first [n] parts of pattern that are all strings.
 | ||||||
| function isENOENT(error) { |   var n = 0 | ||||||
|   return isExpectedError(error, -ENOENT, 'ENOENT'); |   while (typeof pattern[n] === 'string') { | ||||||
|  |     n ++ | ||||||
|  |   } | ||||||
|  |   // now n is the index of the first one that is *not* a string.
 | ||||||
|  | 
 | ||||||
|  |   // see if there's anything else
 | ||||||
|  |   var prefix | ||||||
|  |   switch (n) { | ||||||
|  |     // if not, then this is rather simple
 | ||||||
|  |     case pattern.length: | ||||||
|  |       this._processSimple(pattern.join('/'), index, cb) | ||||||
|  |       return | ||||||
|  | 
 | ||||||
|  |     case 0: | ||||||
|  |       // pattern *starts* with some non-trivial item.
 | ||||||
|  |       // going to readdir(cwd), but not include the prefix in matches.
 | ||||||
|  |       prefix = null | ||||||
|  |       break | ||||||
|  | 
 | ||||||
|  |     default: | ||||||
|  |       // pattern has some string bits in the front.
 | ||||||
|  |       // whatever it starts with, whether that's 'absolute' like /foo/bar,
 | ||||||
|  |       // or 'relative' like '../baz'
 | ||||||
|  |       prefix = pattern.slice(0, n).join('/') | ||||||
|  |       break | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| /** |   var remain = pattern.slice(n) | ||||||
|  * Helper to determine whether the expected error code matches the actual code and errno, | 
 | ||||||
|  * which will differ between the supported node versions. |   // get the list of entries.
 | ||||||
|  * |   var read | ||||||
|  * - Node >= 7.0: |   if (prefix === null) | ||||||
|  *   error.code {string} |     read = '.' | ||||||
|  *   error.errno {string|number} any numerical value will be negated |   else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { | ||||||
|  * |     if (!prefix || !isAbsolute(prefix)) | ||||||
|  * - Node >= 6.0 < 7.0: |       prefix = '/' + prefix | ||||||
|  *   error.code {string} |     read = prefix | ||||||
|  *   error.errno {number} negated |   } else | ||||||
|  * |     read = prefix | ||||||
|  * - Node >= 4.0 < 6.0: introduces SystemError | 
 | ||||||
|  *   error.code {string} |   var abs = this._makeAbs(read) | ||||||
|  *   error.errno {number} negated | 
 | ||||||
|  * |   //if ignored, skip _processing
 | ||||||
|  * - Node >= 0.10 < 4.0: |   if (childrenIgnored(this, read)) | ||||||
|  *   error.code {number} negated |     return cb() | ||||||
|  *   error.errno n/a | 
 | ||||||
|  */ |   var isGlobStar = remain[0] === minimatch.GLOBSTAR | ||||||
| function isExpectedError(error, code, errno) { |   if (isGlobStar) | ||||||
|   return error.code === code || error.code === errno; |     this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) | ||||||
|  |   else | ||||||
|  |     this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { | ||||||
|  * Helper which determines whether a string s is blank, that is undefined, or empty or null. |   var self = this | ||||||
|  * |   this._readdir(abs, inGlobStar, function (er, entries) { | ||||||
|  * @private |     return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) | ||||||
|  * @param {string} s |   }) | ||||||
|  * @returns {Boolean} true whether the string s is blank, false otherwise |  | ||||||
|  */ |  | ||||||
| function isBlank(s) { |  | ||||||
|   return s === null || s === undefined || !s.trim(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { | ||||||
|  * Sets the graceful cleanup. | 
 | ||||||
|  */ |   // if the abs isn't a dir, then nothing can match!
 | ||||||
| function setGracefulCleanup() { |   if (!entries) | ||||||
|   _gracefulCleanup = true; |     return cb() | ||||||
|  | 
 | ||||||
|  |   // It will only match dot entries if it starts with a dot, or if
 | ||||||
|  |   // dot is set.  Stuff like @(.foo|.bar) isn't allowed.
 | ||||||
|  |   var pn = remain[0] | ||||||
|  |   var negate = !!this.minimatch.negate | ||||||
|  |   var rawGlob = pn._glob | ||||||
|  |   var dotOk = this.dot || rawGlob.charAt(0) === '.' | ||||||
|  | 
 | ||||||
|  |   var matchedEntries = [] | ||||||
|  |   for (var i = 0; i < entries.length; i++) { | ||||||
|  |     var e = entries[i] | ||||||
|  |     if (e.charAt(0) !== '.' || dotOk) { | ||||||
|  |       var m | ||||||
|  |       if (negate && !prefix) { | ||||||
|  |         m = !e.match(pn) | ||||||
|  |       } else { | ||||||
|  |         m = e.match(pn) | ||||||
|       } |       } | ||||||
| 
 |       if (m) | ||||||
| /** |         matchedEntries.push(e) | ||||||
|  * Returns the currently configured tmp dir from os.tmpdir(). |  | ||||||
|  * |  | ||||||
|  * @private |  | ||||||
|  * @returns {string} the currently configured tmp dir |  | ||||||
|  */ |  | ||||||
| function _getTmpDir() { |  | ||||||
|   return os.tmpdir(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * If there are multiple different versions of tmp in place, make sure that |  | ||||||
|  * we recognize the old listeners. |  | ||||||
|  * |  | ||||||
|  * @param {Function} listener |  | ||||||
|  * @private |  | ||||||
|  * @returns {Boolean} true whether listener is a legacy listener |  | ||||||
|  */ |  | ||||||
| function _is_legacy_listener(listener) { |  | ||||||
|   return (listener.name === '_exit' || listener.name === '_uncaughtExceptionThrown') |  | ||||||
|     && listener.toString().indexOf('_garbageCollector();') > -1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Safely install SIGINT listener. |  | ||||||
|  * |  | ||||||
|  * NOTE: this will only work on OSX and Linux. |  | ||||||
|  * |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _safely_install_sigint_listener() { |  | ||||||
| 
 |  | ||||||
|   const listeners = process.listeners(SIGINT); |  | ||||||
|   const existingListeners = []; |  | ||||||
|   for (let i = 0, length = listeners.length; i < length; i++) { |  | ||||||
|     const lstnr = listeners[i]; |  | ||||||
|     /* istanbul ignore else */ |  | ||||||
|     if (lstnr.name === '_tmp$sigint_listener') { |  | ||||||
|       existingListeners.push(lstnr); |  | ||||||
|       process.removeListener(SIGINT, lstnr); |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   process.on(SIGINT, function _tmp$sigint_listener(doExit) { | 
 | ||||||
|     for (let i = 0, length = existingListeners.length; i < length; i++) { |   //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
 | ||||||
|       // let the existing listener do the garbage collection (e.g. jest sandbox)
 | 
 | ||||||
|       try { |   var len = matchedEntries.length | ||||||
|         existingListeners[i](false); |   // If there are no matched entries, then nothing matches.
 | ||||||
|       } catch (err) { |   if (len === 0) | ||||||
|         // ignore
 |     return cb() | ||||||
|       } | 
 | ||||||
|     } |   // if this is the last remaining pattern bit, then no need for
 | ||||||
|     try { |   // an additional stat *unless* the user has specified mark or
 | ||||||
|       // force the garbage collector even it is called again in the exit listener
 |   // stat explicitly.  We know they exist, since readdir returned
 | ||||||
|       _garbageCollector(); |   // them.
 | ||||||
|     } finally { | 
 | ||||||
|       if (!!doExit) { |   if (remain.length === 1 && !this.mark && !this.stat) { | ||||||
|         process.exit(0); |     if (!this.matches[index]) | ||||||
|       } |       this.matches[index] = Object.create(null) | ||||||
|     } | 
 | ||||||
|   }); |     for (var i = 0; i < len; i ++) { | ||||||
|  |       var e = matchedEntries[i] | ||||||
|  |       if (prefix) { | ||||||
|  |         if (prefix !== '/') | ||||||
|  |           e = prefix + '/' + e | ||||||
|  |         else | ||||||
|  |           e = prefix + e | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
| /** |       if (e.charAt(0) === '/' && !this.nomount) { | ||||||
|  * Safely install process exit listener. |         e = path.join(this.root, e) | ||||||
|  * |  | ||||||
|  * @private |  | ||||||
|  */ |  | ||||||
| function _safely_install_exit_listener() { |  | ||||||
|   const listeners = process.listeners(EXIT); |  | ||||||
| 
 |  | ||||||
|   // collect any existing listeners
 |  | ||||||
|   const existingListeners = []; |  | ||||||
|   for (let i = 0, length = listeners.length; i < length; i++) { |  | ||||||
|     const lstnr = listeners[i]; |  | ||||||
|     /* istanbul ignore else */ |  | ||||||
|     // TODO: remove support for legacy listeners once release 1.0.0 is out
 |  | ||||||
|     if (lstnr.name === '_tmp$safe_listener' || _is_legacy_listener(lstnr)) { |  | ||||||
|       // we must forget about the uncaughtException listener, hopefully it is ours
 |  | ||||||
|       if (lstnr.name !== '_uncaughtExceptionThrown') { |  | ||||||
|         existingListeners.push(lstnr); |  | ||||||
|       } |       } | ||||||
|       process.removeListener(EXIT, lstnr); |       this._emitMatch(index, e) | ||||||
|     } |     } | ||||||
|   } |     // This was the last one, and no stats were needed
 | ||||||
|   // TODO: what was the data parameter good for?
 |     return cb() | ||||||
|   process.addListener(EXIT, function _tmp$safe_listener(data) { |  | ||||||
|     for (let i = 0, length = existingListeners.length; i < length; i++) { |  | ||||||
|       // let the existing listener do the garbage collection (e.g. jest sandbox)
 |  | ||||||
|       try { |  | ||||||
|         existingListeners[i](data); |  | ||||||
|       } catch (err) { |  | ||||||
|         // ignore
 |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     _garbageCollector(); |  | ||||||
|   }); |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| _safely_install_exit_listener(); |   // now test all matched entries as stand-ins for that part
 | ||||||
| _safely_install_sigint_listener(); |   // of the pattern.
 | ||||||
| 
 |   remain.shift() | ||||||
| /** |   for (var i = 0; i < len; i ++) { | ||||||
|  * Configuration options. |     var e = matchedEntries[i] | ||||||
|  * |     var newPattern | ||||||
|  * @typedef {Object} Options |     if (prefix) { | ||||||
|  * @property {?number} tries the number of tries before give up the name generation |       if (prefix !== '/') | ||||||
|  * @property {?string} template the "mkstemp" like filename template |         e = prefix + '/' + e | ||||||
|  * @property {?string} name fix name |       else | ||||||
|  * @property {?string} dir the tmp directory to use |         e = prefix + e | ||||||
|  * @property {?string} prefix prefix for the generated name |     } | ||||||
|  * @property {?string} postfix postfix for the generated name |     this._process([e].concat(remain), index, inGlobStar, cb) | ||||||
|  * @property {?boolean} unsafeCleanup recursively removes the created temporary directory, even when it's not empty |   } | ||||||
|  */ |   cb() | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @typedef {Object} FileSyncObject |  | ||||||
|  * @property {string} name the name of the file |  | ||||||
|  * @property {string} fd the file descriptor |  | ||||||
|  * @property {fileCallback} removeCallback the callback function to remove the file |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @typedef {Object} DirSyncObject |  | ||||||
|  * @property {string} name the name of the directory |  | ||||||
|  * @property {fileCallback} removeCallback the callback function to remove the directory |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @callback tmpNameCallback |  | ||||||
|  * @param {?Error} err the error object if anything goes wrong |  | ||||||
|  * @param {string} name the temporary file name |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @callback fileCallback |  | ||||||
|  * @param {?Error} err the error object if anything goes wrong |  | ||||||
|  * @param {string} name the temporary file name |  | ||||||
|  * @param {number} fd the file descriptor |  | ||||||
|  * @param {cleanupCallback} fn the cleanup callback function |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @callback dirCallback |  | ||||||
|  * @param {?Error} err the error object if anything goes wrong |  | ||||||
|  * @param {string} name the temporary file name |  | ||||||
|  * @param {cleanupCallback} fn the cleanup callback function |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Removes the temporary created file or directory. |  | ||||||
|  * |  | ||||||
|  * @callback cleanupCallback |  | ||||||
|  * @param {simpleCallback} [next] function to call after entry was removed |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Callback function for function composition. |  | ||||||
|  * @see {@link https://github.com/raszi/node-tmp/issues/57|raszi/node-tmp#57}
 |  | ||||||
|  * |  | ||||||
|  * @callback simpleCallback |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| // exporting all the needed methods
 |  | ||||||
| 
 |  | ||||||
| // evaluate os.tmpdir() lazily, mainly for simplifying testing but it also will
 |  | ||||||
| // allow users to reconfigure the temporary directory
 |  | ||||||
| Object.defineProperty(module.exports, 'tmpdir', { |  | ||||||
|   enumerable: true, |  | ||||||
|   configurable: false, |  | ||||||
|   get: function () { |  | ||||||
|     return _getTmpDir(); |  | ||||||
| } | } | ||||||
| }); |  | ||||||
| 
 | 
 | ||||||
| module.exports.dir = dir; | Glob.prototype._emitMatch = function (index, e) { | ||||||
| module.exports.dirSync = dirSync; |   if (this.aborted) | ||||||
|  |     return | ||||||
| 
 | 
 | ||||||
| module.exports.file = file; |   if (isIgnored(this, e)) | ||||||
| module.exports.fileSync = fileSync; |     return | ||||||
| 
 | 
 | ||||||
| module.exports.tmpName = tmpName; |   if (this.paused) { | ||||||
| module.exports.tmpNameSync = tmpNameSync; |     this._emitQueue.push([index, e]) | ||||||
|  |     return | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
| module.exports.setGracefulCleanup = setGracefulCleanup; |   var abs = isAbsolute(e) ? e : this._makeAbs(e) | ||||||
|  | 
 | ||||||
|  |   if (this.mark) | ||||||
|  |     e = this._mark(e) | ||||||
|  | 
 | ||||||
|  |   if (this.absolute) | ||||||
|  |     e = abs | ||||||
|  | 
 | ||||||
|  |   if (this.matches[index][e]) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  |   if (this.nodir) { | ||||||
|  |     var c = this.cache[abs] | ||||||
|  |     if (c === 'DIR' || Array.isArray(c)) | ||||||
|  |       return | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this.matches[index][e] = true | ||||||
|  | 
 | ||||||
|  |   var st = this.statCache[abs] | ||||||
|  |   if (st) | ||||||
|  |     this.emit('stat', e, st) | ||||||
|  | 
 | ||||||
|  |   this.emit('match', e) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype._readdirInGlobStar = function (abs, cb) { | ||||||
|  |   if (this.aborted) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  |   // follow all symlinked directories forever
 | ||||||
|  |   // just proceed as if this is a non-globstar situation
 | ||||||
|  |   if (this.follow) | ||||||
|  |     return this._readdir(abs, false, cb) | ||||||
|  | 
 | ||||||
|  |   var lstatkey = 'lstat\0' + abs | ||||||
|  |   var self = this | ||||||
|  |   var lstatcb = inflight(lstatkey, lstatcb_) | ||||||
|  | 
 | ||||||
|  |   if (lstatcb) | ||||||
|  |     fs.lstat(abs, lstatcb) | ||||||
|  | 
 | ||||||
|  |   function lstatcb_ (er, lstat) { | ||||||
|  |     if (er && er.code === 'ENOENT') | ||||||
|  |       return cb() | ||||||
|  | 
 | ||||||
|  |     var isSym = lstat && lstat.isSymbolicLink() | ||||||
|  |     self.symlinks[abs] = isSym | ||||||
|  | 
 | ||||||
|  |     // If it's not a symlink or a dir, then it's definitely a regular file.
 | ||||||
|  |     // don't bother doing a readdir in that case.
 | ||||||
|  |     if (!isSym && lstat && !lstat.isDirectory()) { | ||||||
|  |       self.cache[abs] = 'FILE' | ||||||
|  |       cb() | ||||||
|  |     } else | ||||||
|  |       self._readdir(abs, false, cb) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype._readdir = function (abs, inGlobStar, cb) { | ||||||
|  |   if (this.aborted) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  |   cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) | ||||||
|  |   if (!cb) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  |   //console.error('RD %j %j', +inGlobStar, abs)
 | ||||||
|  |   if (inGlobStar && !ownProp(this.symlinks, abs)) | ||||||
|  |     return this._readdirInGlobStar(abs, cb) | ||||||
|  | 
 | ||||||
|  |   if (ownProp(this.cache, abs)) { | ||||||
|  |     var c = this.cache[abs] | ||||||
|  |     if (!c || c === 'FILE') | ||||||
|  |       return cb() | ||||||
|  | 
 | ||||||
|  |     if (Array.isArray(c)) | ||||||
|  |       return cb(null, c) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   var self = this | ||||||
|  |   fs.readdir(abs, readdirCb(this, abs, cb)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function readdirCb (self, abs, cb) { | ||||||
|  |   return function (er, entries) { | ||||||
|  |     if (er) | ||||||
|  |       self._readdirError(abs, er, cb) | ||||||
|  |     else | ||||||
|  |       self._readdirEntries(abs, entries, cb) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype._readdirEntries = function (abs, entries, cb) { | ||||||
|  |   if (this.aborted) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  |   // if we haven't asked to stat everything, then just
 | ||||||
|  |   // assume that everything in there exists, so we can avoid
 | ||||||
|  |   // having to stat it a second time.
 | ||||||
|  |   if (!this.mark && !this.stat) { | ||||||
|  |     for (var i = 0; i < entries.length; i ++) { | ||||||
|  |       var e = entries[i] | ||||||
|  |       if (abs === '/') | ||||||
|  |         e = abs + e | ||||||
|  |       else | ||||||
|  |         e = abs + '/' + e | ||||||
|  |       this.cache[e] = true | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   this.cache[abs] = entries | ||||||
|  |   return cb(null, entries) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype._readdirError = function (f, er, cb) { | ||||||
|  |   if (this.aborted) | ||||||
|  |     return | ||||||
|  | 
 | ||||||
|  |   // handle errors, and cache the information
 | ||||||
|  |   switch (er.code) { | ||||||
|  |     case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
 | ||||||
|  |     case 'ENOTDIR': // totally normal. means it *does* exist.
 | ||||||
|  |       var abs = this._makeAbs(f) | ||||||
|  |       this.cache[abs] = 'FILE' | ||||||
|  |       if (abs === this.cwdAbs) { | ||||||
|  |         var error = new Error(er.code + ' invalid cwd ' + this.cwd) | ||||||
|  |         error.path = this.cwd | ||||||
|  |         error.code = er.code | ||||||
|  |         this.emit('error', error) | ||||||
|  |         this.abort() | ||||||
|  |       } | ||||||
|  |       break | ||||||
|  | 
 | ||||||
|  |     case 'ENOENT': // not terribly unusual
 | ||||||
|  |     case 'ELOOP': | ||||||
|  |     case 'ENAMETOOLONG': | ||||||
|  |     case 'UNKNOWN': | ||||||
|  |       this.cache[this._makeAbs(f)] = false | ||||||
|  |       break | ||||||
|  | 
 | ||||||
|  |     default: // some unusual error.  Treat as failure.
 | ||||||
|  |       this.cache[this._makeAbs(f)] = false | ||||||
|  |       if (this.strict) { | ||||||
|  |         this.emit('error', er) | ||||||
|  |         // If the error is handled, then we abort
 | ||||||
|  |         // if not, we threw out of here
 | ||||||
|  |         this.abort() | ||||||
|  |       } | ||||||
|  |       if (!this.silent) | ||||||
|  |         console.error('glob error', er) | ||||||
|  |       break | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return cb() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { | ||||||
|  |   var self = this | ||||||
|  |   this._readdir(abs, inGlobStar, function (er, entries) { | ||||||
|  |     self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { | ||||||
|  |   //console.error('pgs2', prefix, remain[0], entries)
 | ||||||
|  | 
 | ||||||
|  |   // no entries means not a dir, so it can never have matches
 | ||||||
|  |   // foo.txt/** doesn't match foo.txt
 | ||||||
|  |   if (!entries) | ||||||
|  |     return cb() | ||||||
|  | 
 | ||||||
|  |   // test without the globstar, and with every child both below
 | ||||||
|  |   // and replacing the globstar.
 | ||||||
|  |   var remainWithoutGlobStar = remain.slice(1) | ||||||
|  |   var gspref = prefix ? [ prefix ] : [] | ||||||
|  |   var noGlobStar = gspref.concat(remainWithoutGlobStar) | ||||||
|  | 
 | ||||||
|  |   // the noGlobStar pattern exits the inGlobStar state
 | ||||||
|  |   this._process(noGlobStar, index, false, cb) | ||||||
|  | 
 | ||||||
|  |   var isSym = this.symlinks[abs] | ||||||
|  |   var len = entries.length | ||||||
|  | 
 | ||||||
|  |   // If it's a symlink, and we're in a globstar, then stop
 | ||||||
|  |   if (isSym && inGlobStar) | ||||||
|  |     return cb() | ||||||
|  | 
 | ||||||
|  |   for (var i = 0; i < len; i++) { | ||||||
|  |     var e = entries[i] | ||||||
|  |     if (e.charAt(0) === '.' && !this.dot) | ||||||
|  |       continue | ||||||
|  | 
 | ||||||
|  |     // these two cases enter the inGlobStar state
 | ||||||
|  |     var instead = gspref.concat(entries[i], remainWithoutGlobStar) | ||||||
|  |     this._process(instead, index, true, cb) | ||||||
|  | 
 | ||||||
|  |     var below = gspref.concat(entries[i], remain) | ||||||
|  |     this._process(below, index, true, cb) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   cb() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype._processSimple = function (prefix, index, cb) { | ||||||
|  |   // XXX review this.  Shouldn't it be doing the mounting etc
 | ||||||
|  |   // before doing stat?  kinda weird?
 | ||||||
|  |   var self = this | ||||||
|  |   this._stat(prefix, function (er, exists) { | ||||||
|  |     self._processSimple2(prefix, index, er, exists, cb) | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { | ||||||
|  | 
 | ||||||
|  |   //console.error('ps2', prefix, exists)
 | ||||||
|  | 
 | ||||||
|  |   if (!this.matches[index]) | ||||||
|  |     this.matches[index] = Object.create(null) | ||||||
|  | 
 | ||||||
|  |   // If it doesn't exist, then just mark the lack of results
 | ||||||
|  |   if (!exists) | ||||||
|  |     return cb() | ||||||
|  | 
 | ||||||
|  |   if (prefix && isAbsolute(prefix) && !this.nomount) { | ||||||
|  |     var trail = /[\/\\]$/.test(prefix) | ||||||
|  |     if (prefix.charAt(0) === '/') { | ||||||
|  |       prefix = path.join(this.root, prefix) | ||||||
|  |     } else { | ||||||
|  |       prefix = path.resolve(this.root, prefix) | ||||||
|  |       if (trail) | ||||||
|  |         prefix += '/' | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (process.platform === 'win32') | ||||||
|  |     prefix = prefix.replace(/\\/g, '/') | ||||||
|  | 
 | ||||||
|  |   // Mark this as a match
 | ||||||
|  |   this._emitMatch(index, prefix) | ||||||
|  |   cb() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Returns either 'DIR', 'FILE', or false
 | ||||||
|  | Glob.prototype._stat = function (f, cb) { | ||||||
|  |   var abs = this._makeAbs(f) | ||||||
|  |   var needDir = f.slice(-1) === '/' | ||||||
|  | 
 | ||||||
|  |   if (f.length > this.maxLength) | ||||||
|  |     return cb() | ||||||
|  | 
 | ||||||
|  |   if (!this.stat && ownProp(this.cache, abs)) { | ||||||
|  |     var c = this.cache[abs] | ||||||
|  | 
 | ||||||
|  |     if (Array.isArray(c)) | ||||||
|  |       c = 'DIR' | ||||||
|  | 
 | ||||||
|  |     // It exists, but maybe not how we need it
 | ||||||
|  |     if (!needDir || c === 'DIR') | ||||||
|  |       return cb(null, c) | ||||||
|  | 
 | ||||||
|  |     if (needDir && c === 'FILE') | ||||||
|  |       return cb() | ||||||
|  | 
 | ||||||
|  |     // otherwise we have to stat, because maybe c=true
 | ||||||
|  |     // if we know it exists, but not what it is.
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   var exists | ||||||
|  |   var stat = this.statCache[abs] | ||||||
|  |   if (stat !== undefined) { | ||||||
|  |     if (stat === false) | ||||||
|  |       return cb(null, stat) | ||||||
|  |     else { | ||||||
|  |       var type = stat.isDirectory() ? 'DIR' : 'FILE' | ||||||
|  |       if (needDir && type === 'FILE') | ||||||
|  |         return cb() | ||||||
|  |       else | ||||||
|  |         return cb(null, type, stat) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   var self = this | ||||||
|  |   var statcb = inflight('stat\0' + abs, lstatcb_) | ||||||
|  |   if (statcb) | ||||||
|  |     fs.lstat(abs, statcb) | ||||||
|  | 
 | ||||||
|  |   function lstatcb_ (er, lstat) { | ||||||
|  |     if (lstat && lstat.isSymbolicLink()) { | ||||||
|  |       // If it's a symlink, then treat it as the target, unless
 | ||||||
|  |       // the target does not exist, then treat it as a file.
 | ||||||
|  |       return fs.stat(abs, function (er, stat) { | ||||||
|  |         if (er) | ||||||
|  |           self._stat2(f, abs, null, lstat, cb) | ||||||
|  |         else | ||||||
|  |           self._stat2(f, abs, er, stat, cb) | ||||||
|  |       }) | ||||||
|  |     } else { | ||||||
|  |       self._stat2(f, abs, er, lstat, cb) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Glob.prototype._stat2 = function (f, abs, er, stat, cb) { | ||||||
|  |   if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { | ||||||
|  |     this.statCache[abs] = false | ||||||
|  |     return cb() | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   var needDir = f.slice(-1) === '/' | ||||||
|  |   this.statCache[abs] = stat | ||||||
|  | 
 | ||||||
|  |   if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) | ||||||
|  |     return cb(null, false, stat) | ||||||
|  | 
 | ||||||
|  |   var c = true | ||||||
|  |   if (stat) | ||||||
|  |     c = stat.isDirectory() ? 'DIR' : 'FILE' | ||||||
|  |   this.cache[abs] = this.cache[abs] || c | ||||||
|  | 
 | ||||||
|  |   if (needDir && c === 'FILE') | ||||||
|  |     return cb() | ||||||
|  | 
 | ||||||
|  |   return cb(null, c, stat) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -5921,7 +5921,9 @@ class HttpClient { | |||||||
|                 maxSockets: maxSockets, |                 maxSockets: maxSockets, | ||||||
|                 keepAlive: this._keepAlive, |                 keepAlive: this._keepAlive, | ||||||
|                 proxy: { |                 proxy: { | ||||||
|                     proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`, |                     ...((proxyUrl.username || proxyUrl.password) && { | ||||||
|  |                         proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` | ||||||
|  |                     }), | ||||||
|                     host: proxyUrl.hostname, |                     host: proxyUrl.hostname, | ||||||
|                     port: proxyUrl.port |                     port: proxyUrl.port | ||||||
|                 } |                 } | ||||||
| @ -6040,7 +6042,7 @@ rimraf.sync = rimrafSync | |||||||
| var assert = __webpack_require__(357) | var assert = __webpack_require__(357) | ||||||
| var path = __webpack_require__(622) | var path = __webpack_require__(622) | ||||||
| var fs = __webpack_require__(747) | var fs = __webpack_require__(747) | ||||||
| var glob = __webpack_require__(120) | var glob = __webpack_require__(402) | ||||||
| var _0666 = parseInt('666', 8) | var _0666 = parseInt('666', 8) | ||||||
| 
 | 
 | ||||||
| var defaultGlobOpts = { | var defaultGlobOpts = { | ||||||
| @ -8428,7 +8430,7 @@ exports.sleep = sleep; | |||||||
| /***/ (function(module, __unusedexports, __webpack_require__) { | /***/ (function(module, __unusedexports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| const {promisify} = __webpack_require__(669); | const {promisify} = __webpack_require__(669); | ||||||
| const tmp = __webpack_require__(402); | const tmp = __webpack_require__(150); | ||||||
| 
 | 
 | ||||||
| // file
 | // file
 | ||||||
| module.exports.fileSync = tmp.fileSync; | module.exports.fileSync = tmp.fileSync; | ||||||
|  | |||||||
							
								
								
									
										40
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										40
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -5,25 +5,15 @@ | |||||||
|   "requires": true, |   "requires": true, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/artifact": { |     "@actions/artifact": { | ||||||
|       "version": "0.5.0", |       "version": "0.5.1", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/artifact/-/artifact-0.5.0.tgz", |       "resolved": "https://registry.npmjs.org/@actions/artifact/-/artifact-0.5.1.tgz", | ||||||
|       "integrity": "sha512-uo9zlqm8sZBysFVaBZh8iAe2xNf9x2fDQZZMHiKyBEShvCB2S2nA4+Kt3Xsi9eG5O1E8fVMwEVuwLR3/Zy3mrA==", |       "integrity": "sha512-wKXEa4fhvgsw3kPu74F3J6eAi92rqv7BvpjEAmiqmDFeuDj6cyqWDWXx6axWfiBmmln1/LVf1DLWikbciKkoVQ==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@actions/core": "^1.2.6", |         "@actions/core": "^1.2.6", | ||||||
|         "@actions/http-client": "^1.0.7", |         "@actions/http-client": "^1.0.11", | ||||||
|         "@types/tmp": "^0.1.0", |         "@types/tmp": "^0.1.0", | ||||||
|         "tmp": "^0.1.0", |         "tmp": "^0.1.0", | ||||||
|         "tmp-promise": "^2.0.2" |         "tmp-promise": "^2.0.2" | ||||||
|       }, |  | ||||||
|       "dependencies": { |  | ||||||
|         "tmp": { |  | ||||||
|           "version": "0.1.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", |  | ||||||
|           "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", |  | ||||||
|           "requires": { |  | ||||||
|             "rimraf": "^2.6.3" |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@actions/core": { |     "@actions/core": { | ||||||
| @ -41,9 +31,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "@actions/http-client": { |     "@actions/http-client": { | ||||||
|       "version": "1.0.9", |       "version": "1.0.11", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.9.tgz", |       "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", | ||||||
|       "integrity": "sha512-0O4SsJ7q+MK0ycvXPl2e6bMXV7dxAXOGjrXS1eTF9s2S401Tp6c/P3c3Joz04QefC1J6Gt942Wl2jbm3f4mLcg==", |       "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", | ||||||
|       "requires": { |       "requires": { | ||||||
|         "tunnel": "0.0.6" |         "tunnel": "0.0.6" | ||||||
|       } |       } | ||||||
| @ -9576,14 +9566,6 @@ | |||||||
|       "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", |       "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "tmp-promise": { |  | ||||||
|       "version": "2.1.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-2.1.1.tgz", |  | ||||||
|       "integrity": "sha512-Z048AOz/w9b6lCbJUpevIJpRpUztENl8zdv1bmAKVHimfqRFl92ROkmT9rp7TVBnrEw2gtMTol/2Cp2S2kJa4Q==", |  | ||||||
|       "requires": { |  | ||||||
|         "tmp": "0.1.0" |  | ||||||
|       }, |  | ||||||
|       "dependencies": { |  | ||||||
|     "tmp": { |     "tmp": { | ||||||
|       "version": "0.1.0", |       "version": "0.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", |       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", | ||||||
| @ -9591,7 +9573,13 @@ | |||||||
|       "requires": { |       "requires": { | ||||||
|         "rimraf": "^2.6.3" |         "rimraf": "^2.6.3" | ||||||
|       } |       } | ||||||
|         } |     }, | ||||||
|  |     "tmp-promise": { | ||||||
|  |       "version": "2.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-2.1.1.tgz", | ||||||
|  |       "integrity": "sha512-Z048AOz/w9b6lCbJUpevIJpRpUztENl8zdv1bmAKVHimfqRFl92ROkmT9rp7TVBnrEw2gtMTol/2Cp2S2kJa4Q==", | ||||||
|  |       "requires": { | ||||||
|  |         "tmp": "0.1.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "tmpl": { |     "tmpl": { | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ | |||||||
|   }, |   }, | ||||||
|   "homepage": "https://github.com/actions/upload-artifact#readme", |   "homepage": "https://github.com/actions/upload-artifact#readme", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/artifact": "^0.5.0", |     "@actions/artifact": "^0.5.1", | ||||||
|     "@actions/core": "^1.2.6", |     "@actions/core": "^1.2.6", | ||||||
|     "@actions/glob": "^0.1.0", |     "@actions/glob": "^0.1.0", | ||||||
|     "@actions/io": "^1.0.2" |     "@actions/io": "^1.0.2" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user