1 line
38 KiB
JSON
1 line
38 KiB
JSON
{"ast":null,"code":"module.exports = globSync;\nglobSync.GlobSync = GlobSync;\n\nvar fs = require('fs');\n\nvar rp = require('fs.realpath');\n\nvar minimatch = require('minimatch');\n\nvar Minimatch = minimatch.Minimatch;\n\nvar Glob = require('./glob.js').Glob;\n\nvar util = require('util');\n\nvar path = require('path');\n\nvar assert = require('assert');\n\nvar isAbsolute = require('path-is-absolute');\n\nvar common = require('./common.js');\n\nvar setopts = common.setopts;\nvar ownProp = common.ownProp;\nvar childrenIgnored = common.childrenIgnored;\nvar isIgnored = common.isIgnored;\n\nfunction globSync(pattern, options) {\n if (typeof options === 'function' || arguments.length === 3) throw new TypeError('callback provided to sync glob\\n' + 'See: https://github.com/isaacs/node-glob/issues/167');\n return new GlobSync(pattern, options).found;\n}\n\nfunction GlobSync(pattern, options) {\n if (!pattern) throw new Error('must provide pattern');\n if (typeof options === 'function' || arguments.length === 3) throw new TypeError('callback provided to sync glob\\n' + 'See: https://github.com/isaacs/node-glob/issues/167');\n if (!(this instanceof GlobSync)) return new GlobSync(pattern, options);\n setopts(this, pattern, options);\n if (this.noprocess) return this;\n var n = this.minimatch.set.length;\n this.matches = new Array(n);\n\n for (var i = 0; i < n; i++) {\n this._process(this.minimatch.set[i], i, false);\n }\n\n this._finish();\n}\n\nGlobSync.prototype._finish = function () {\n assert(this instanceof GlobSync);\n\n if (this.realpath) {\n var self = this;\n this.matches.forEach(function (matchset, index) {\n var set = self.matches[index] = Object.create(null);\n\n for (var p in matchset) {\n try {\n p = self._makeAbs(p);\n var real = rp.realpathSync(p, self.realpathCache);\n set[real] = true;\n } catch (er) {\n if (er.syscall === 'stat') set[self._makeAbs(p)] = true;else throw er;\n }\n }\n });\n }\n\n common.finish(this);\n};\n\nGlobSync.prototype._process = function (pattern, index, inGlobStar) {\n assert(this instanceof GlobSync); // Get the first [n] parts of pattern that are all strings.\n\n var n = 0;\n\n while (typeof pattern[n] === 'string') {\n n++;\n } // now n is the index of the first one that is *not* a string.\n // See if there's anything else\n\n\n var prefix;\n\n switch (n) {\n // if not, then this is rather simple\n case pattern.length:\n this._processSimple(pattern.join('/'), index);\n\n return;\n\n case 0:\n // pattern *starts* with some non-trivial item.\n // going to readdir(cwd), but not include the prefix in matches.\n prefix = null;\n break;\n\n default:\n // pattern has some string bits in the front.\n // whatever it starts with, whether that's 'absolute' like /foo/bar,\n // or 'relative' like '../baz'\n prefix = pattern.slice(0, n).join('/');\n break;\n }\n\n var remain = pattern.slice(n); // get the list of entries.\n\n var read;\n if (prefix === null) read = '.';else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {\n if (!prefix || !isAbsolute(prefix)) prefix = '/' + prefix;\n read = prefix;\n } else read = prefix;\n\n var abs = this._makeAbs(read); //if ignored, skip processing\n\n\n if (childrenIgnored(this, read)) return;\n var isGlobStar = remain[0] === minimatch.GLOBSTAR;\n if (isGlobStar) this._processGlobStar(prefix, read, abs, remain, index, inGlobStar);else this._processReaddir(prefix, read, abs, remain, index, inGlobStar);\n};\n\nGlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {\n var entries = this._readdir(abs, inGlobStar); // if the abs isn't a dir, then nothing can match!\n\n\n if (!entries) return; // It will only match dot entries if it starts with a dot, or if\n // dot is set. Stuff like @(.foo|.bar) isn't allowed.\n\n var pn = remain[0];\n var negate = !!this.minimatch.negate;\n var rawGlob = pn._glob;\n var dotOk = this.dot || rawGlob.charAt(0) === '.';\n var matchedEntries = [];\n\n for (var i = 0; i < entries.length; i++) {\n var e = entries[i];\n\n if (e.charAt(0) !== '.' || dotOk) {\n var m;\n\n if (negate && !prefix) {\n m = !e.match(pn);\n } else {\n m = e.match(pn);\n }\n\n if (m) matchedEntries.push(e);\n }\n }\n\n var len = matchedEntries.length; // If there are no matched entries, then nothing matches.\n\n if (len === 0) return; // if this is the last remaining pattern bit, then no need for\n // an additional stat *unless* the user has specified mark or\n // stat explicitly. We know they exist, since readdir returned\n // them.\n\n if (remain.length === 1 && !this.mark && !this.stat) {\n if (!this.matches[index]) this.matches[index] = Object.create(null);\n\n for (var i = 0; i < len; i++) {\n var e = matchedEntries[i];\n\n if (prefix) {\n if (prefix.slice(-1) !== '/') e = prefix + '/' + e;else e = prefix + e;\n }\n\n if (e.charAt(0) === '/' && !this.nomount) {\n e = path.join(this.root, e);\n }\n\n this._emitMatch(index, e);\n } // This was the last one, and no stats were needed\n\n\n return;\n } // now test all matched entries as stand-ins for that part\n // of the pattern.\n\n\n remain.shift();\n\n for (var i = 0; i < len; i++) {\n var e = matchedEntries[i];\n var newPattern;\n if (prefix) newPattern = [prefix, e];else newPattern = [e];\n\n this._process(newPattern.concat(remain), index, inGlobStar);\n }\n};\n\nGlobSync.prototype._emitMatch = function (index, e) {\n if (isIgnored(this, e)) return;\n\n var abs = this._makeAbs(e);\n\n if (this.mark) e = this._mark(e);\n\n if (this.absolute) {\n e = abs;\n }\n\n if (this.matches[index][e]) return;\n\n if (this.nodir) {\n var c = this.cache[abs];\n if (c === 'DIR' || Array.isArray(c)) return;\n }\n\n this.matches[index][e] = true;\n if (this.stat) this._stat(e);\n};\n\nGlobSync.prototype._readdirInGlobStar = function (abs) {\n // follow all symlinked directories forever\n // just proceed as if this is a non-globstar situation\n if (this.follow) return this._readdir(abs, false);\n var entries;\n var lstat;\n var stat;\n\n try {\n lstat = fs.lstatSync(abs);\n } catch (er) {\n if (er.code === 'ENOENT') {\n // lstat failed, doesn't exist\n return null;\n }\n }\n\n var isSym = lstat && lstat.isSymbolicLink();\n this.symlinks[abs] = isSym; // If it's not a symlink or a dir, then it's definitely a regular file.\n // don't bother doing a readdir in that case.\n\n if (!isSym && lstat && !lstat.isDirectory()) this.cache[abs] = 'FILE';else entries = this._readdir(abs, false);\n return entries;\n};\n\nGlobSync.prototype._readdir = function (abs, inGlobStar) {\n var entries;\n if (inGlobStar && !ownProp(this.symlinks, abs)) return this._readdirInGlobStar(abs);\n\n if (ownProp(this.cache, abs)) {\n var c = this.cache[abs];\n if (!c || c === 'FILE') return null;\n if (Array.isArray(c)) return c;\n }\n\n try {\n return this._readdirEntries(abs, fs.readdirSync(abs));\n } catch (er) {\n this._readdirError(abs, er);\n\n return null;\n }\n};\n\nGlobSync.prototype._readdirEntries = function (abs, entries) {\n // if we haven't asked to stat everything, then just\n // assume that everything in there exists, so we can avoid\n // having to stat it a second time.\n if (!this.mark && !this.stat) {\n for (var i = 0; i < entries.length; i++) {\n var e = entries[i];\n if (abs === '/') e = abs + e;else e = abs + '/' + e;\n this.cache[e] = true;\n }\n }\n\n this.cache[abs] = entries; // mark and cache dir-ness\n\n return entries;\n};\n\nGlobSync.prototype._readdirError = function (f, er) {\n // handle errors, and cache the information\n switch (er.code) {\n case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n\n case 'ENOTDIR':\n // totally normal. means it *does* exist.\n var abs = this._makeAbs(f);\n\n this.cache[abs] = 'FILE';\n\n if (abs === this.cwdAbs) {\n var error = new Error(er.code + ' invalid cwd ' + this.cwd);\n error.path = this.cwd;\n error.code = er.code;\n throw error;\n }\n\n break;\n\n case 'ENOENT': // not terribly unusual\n\n case 'ELOOP':\n case 'ENAMETOOLONG':\n case 'UNKNOWN':\n this.cache[this._makeAbs(f)] = false;\n break;\n\n default:\n // some unusual error. Treat as failure.\n this.cache[this._makeAbs(f)] = false;\n if (this.strict) throw er;\n if (!this.silent) console.error('glob error', er);\n break;\n }\n};\n\nGlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {\n var entries = this._readdir(abs, inGlobStar); // no entries means not a dir, so it can never have matches\n // foo.txt/** doesn't match foo.txt\n\n\n if (!entries) return; // test without the globstar, and with every child both below\n // and replacing the globstar.\n\n var remainWithoutGlobStar = remain.slice(1);\n var gspref = prefix ? [prefix] : [];\n var noGlobStar = gspref.concat(remainWithoutGlobStar); // the noGlobStar pattern exits the inGlobStar state\n\n this._process(noGlobStar, index, false);\n\n var len = entries.length;\n var isSym = this.symlinks[abs]; // If it's a symlink, and we're in a globstar, then stop\n\n if (isSym && inGlobStar) return;\n\n for (var i = 0; i < len; i++) {\n var e = entries[i];\n if (e.charAt(0) === '.' && !this.dot) continue; // these two cases enter the inGlobStar state\n\n var instead = gspref.concat(entries[i], remainWithoutGlobStar);\n\n this._process(instead, index, true);\n\n var below = gspref.concat(entries[i], remain);\n\n this._process(below, index, true);\n }\n};\n\nGlobSync.prototype._processSimple = function (prefix, index) {\n // XXX review this. Shouldn't it be doing the mounting etc\n // before doing stat? kinda weird?\n var exists = this._stat(prefix);\n\n if (!this.matches[index]) this.matches[index] = Object.create(null); // If it doesn't exist, then just mark the lack of results\n\n if (!exists) return;\n\n if (prefix && isAbsolute(prefix) && !this.nomount) {\n var trail = /[\\/\\\\]$/.test(prefix);\n\n if (prefix.charAt(0) === '/') {\n prefix = path.join(this.root, prefix);\n } else {\n prefix = path.resolve(this.root, prefix);\n if (trail) prefix += '/';\n }\n }\n\n if (process.platform === 'win32') prefix = prefix.replace(/\\\\/g, '/'); // Mark this as a match\n\n this._emitMatch(index, prefix);\n}; // Returns either 'DIR', 'FILE', or false\n\n\nGlobSync.prototype._stat = function (f) {\n var abs = this._makeAbs(f);\n\n var needDir = f.slice(-1) === '/';\n if (f.length > this.maxLength) return false;\n\n if (!this.stat && ownProp(this.cache, abs)) {\n var c = this.cache[abs];\n if (Array.isArray(c)) c = 'DIR'; // It exists, but maybe not how we need it\n\n if (!needDir || c === 'DIR') return c;\n if (needDir && c === 'FILE') return false; // otherwise we have to stat, because maybe c=true\n // if we know it exists, but not what it is.\n }\n\n var exists;\n var stat = this.statCache[abs];\n\n if (!stat) {\n var lstat;\n\n try {\n lstat = fs.lstatSync(abs);\n } catch (er) {\n if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n this.statCache[abs] = false;\n return false;\n }\n }\n\n if (lstat && lstat.isSymbolicLink()) {\n try {\n stat = fs.statSync(abs);\n } catch (er) {\n stat = lstat;\n }\n } else {\n stat = lstat;\n }\n }\n\n this.statCache[abs] = stat;\n var c = true;\n if (stat) c = stat.isDirectory() ? 'DIR' : 'FILE';\n this.cache[abs] = this.cache[abs] || c;\n if (needDir && c === 'FILE') return false;\n return c;\n};\n\nGlobSync.prototype._mark = function (p) {\n return common.mark(this, p);\n};\n\nGlobSync.prototype._makeAbs = function (f) {\n return common.makeAbs(this, f);\n};","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/glob/sync.js"],"names":["module","exports","globSync","GlobSync","fs","require","rp","minimatch","Minimatch","Glob","util","path","assert","isAbsolute","common","setopts","ownProp","childrenIgnored","isIgnored","pattern","options","arguments","length","TypeError","found","Error","noprocess","n","set","matches","Array","i","_process","_finish","prototype","realpath","self","forEach","matchset","index","Object","create","p","_makeAbs","real","realpathSync","realpathCache","er","syscall","finish","inGlobStar","prefix","_processSimple","join","slice","remain","read","abs","isGlobStar","GLOBSTAR","_processGlobStar","_processReaddir","entries","_readdir","pn","negate","rawGlob","_glob","dotOk","dot","charAt","matchedEntries","e","m","match","push","len","mark","stat","nomount","root","_emitMatch","shift","newPattern","concat","_mark","absolute","nodir","c","cache","isArray","_stat","_readdirInGlobStar","follow","lstat","lstatSync","code","isSym","isSymbolicLink","symlinks","isDirectory","_readdirEntries","readdirSync","_readdirError","f","cwdAbs","error","cwd","strict","silent","console","remainWithoutGlobStar","gspref","noGlobStar","instead","below","exists","trail","test","resolve","process","platform","replace","needDir","maxLength","statCache","statSync","makeAbs"],"mappings":"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","sourcesContent":["module.exports = globSync\nglobSync.GlobSync = GlobSync\n\nvar fs = require('fs')\nvar rp = require('fs.realpath')\nvar minimatch = require('minimatch')\nvar Minimatch = minimatch.Minimatch\nvar Glob = require('./glob.js').Glob\nvar util = require('util')\nvar path = require('path')\nvar assert = require('assert')\nvar isAbsolute = require('path-is-absolute')\nvar common = require('./common.js')\nvar setopts = common.setopts\nvar ownProp = common.ownProp\nvar childrenIgnored = common.childrenIgnored\nvar isIgnored = common.isIgnored\n\nfunction globSync (pattern, options) {\n if (typeof options === 'function' || arguments.length === 3)\n throw new TypeError('callback provided to sync glob\\n'+\n 'See: https://github.com/isaacs/node-glob/issues/167')\n\n return new GlobSync(pattern, options).found\n}\n\nfunction GlobSync (pattern, options) {\n if (!pattern)\n throw new Error('must provide pattern')\n\n if (typeof options === 'function' || arguments.length === 3)\n throw new TypeError('callback provided to sync glob\\n'+\n 'See: https://github.com/isaacs/node-glob/issues/167')\n\n if (!(this instanceof GlobSync))\n return new GlobSync(pattern, options)\n\n setopts(this, pattern, options)\n\n if (this.noprocess)\n return this\n\n var n = this.minimatch.set.length\n this.matches = new Array(n)\n for (var i = 0; i < n; i ++) {\n this._process(this.minimatch.set[i], i, false)\n }\n this._finish()\n}\n\nGlobSync.prototype._finish = function () {\n assert(this instanceof GlobSync)\n if (this.realpath) {\n var self = this\n this.matches.forEach(function (matchset, index) {\n var set = self.matches[index] = Object.create(null)\n for (var p in matchset) {\n try {\n p = self._makeAbs(p)\n var real = rp.realpathSync(p, self.realpathCache)\n set[real] = true\n } catch (er) {\n if (er.syscall === 'stat')\n set[self._makeAbs(p)] = true\n else\n throw er\n }\n }\n })\n }\n common.finish(this)\n}\n\n\nGlobSync.prototype._process = function (pattern, index, inGlobStar) {\n assert(this instanceof GlobSync)\n\n // Get the first [n] parts of pattern that are all strings.\n var n = 0\n while (typeof pattern[n] === 'string') {\n n ++\n }\n // now n is the index of the first one that is *not* a string.\n\n // See if there's anything else\n var prefix\n switch (n) {\n // if not, then this is rather simple\n case pattern.length:\n this._processSimple(pattern.join('/'), index)\n return\n\n case 0:\n // pattern *starts* with some non-trivial item.\n // going to readdir(cwd), but not include the prefix in matches.\n prefix = null\n break\n\n default:\n // pattern has some string bits in the front.\n // whatever it starts with, whether that's 'absolute' like /foo/bar,\n // or 'relative' like '../baz'\n prefix = pattern.slice(0, n).join('/')\n break\n }\n\n var remain = pattern.slice(n)\n\n // get the list of entries.\n var read\n if (prefix === null)\n read = '.'\n else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {\n if (!prefix || !isAbsolute(prefix))\n prefix = '/' + prefix\n read = prefix\n } else\n read = prefix\n\n var abs = this._makeAbs(read)\n\n //if ignored, skip processing\n if (childrenIgnored(this, read))\n return\n\n var isGlobStar = remain[0] === minimatch.GLOBSTAR\n if (isGlobStar)\n this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)\n else\n this._processReaddir(prefix, read, abs, remain, index, inGlobStar)\n}\n\n\nGlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {\n var entries = this._readdir(abs, inGlobStar)\n\n // if the abs isn't a dir, then nothing can match!\n if (!entries)\n return\n\n // It will only match dot entries if it starts with a dot, or if\n // dot is set. Stuff like @(.foo|.bar) isn't allowed.\n var pn = remain[0]\n var negate = !!this.minimatch.negate\n var rawGlob = pn._glob\n var dotOk = this.dot || rawGlob.charAt(0) === '.'\n\n var matchedEntries = []\n for (var i = 0; i < entries.length; i++) {\n var e = entries[i]\n if (e.charAt(0) !== '.' || dotOk) {\n var m\n if (negate && !prefix) {\n m = !e.match(pn)\n } else {\n m = e.match(pn)\n }\n if (m)\n matchedEntries.push(e)\n }\n }\n\n var len = matchedEntries.length\n // If there are no matched entries, then nothing matches.\n if (len === 0)\n return\n\n // if this is the last remaining pattern bit, then no need for\n // an additional stat *unless* the user has specified mark or\n // stat explicitly. We know they exist, since readdir returned\n // them.\n\n if (remain.length === 1 && !this.mark && !this.stat) {\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n if (prefix) {\n if (prefix.slice(-1) !== '/')\n e = prefix + '/' + e\n else\n e = prefix + e\n }\n\n if (e.charAt(0) === '/' && !this.nomount) {\n e = path.join(this.root, e)\n }\n this._emitMatch(index, e)\n }\n // This was the last one, and no stats were needed\n return\n }\n\n // now test all matched entries as stand-ins for that part\n // of the pattern.\n remain.shift()\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n var newPattern\n if (prefix)\n newPattern = [prefix, e]\n else\n newPattern = [e]\n this._process(newPattern.concat(remain), index, inGlobStar)\n }\n}\n\n\nGlobSync.prototype._emitMatch = function (index, e) {\n if (isIgnored(this, e))\n return\n\n var abs = this._makeAbs(e)\n\n if (this.mark)\n e = this._mark(e)\n\n if (this.absolute) {\n e = abs\n }\n\n if (this.matches[index][e])\n return\n\n if (this.nodir) {\n var c = this.cache[abs]\n if (c === 'DIR' || Array.isArray(c))\n return\n }\n\n this.matches[index][e] = true\n\n if (this.stat)\n this._stat(e)\n}\n\n\nGlobSync.prototype._readdirInGlobStar = function (abs) {\n // follow all symlinked directories forever\n // just proceed as if this is a non-globstar situation\n if (this.follow)\n return this._readdir(abs, false)\n\n var entries\n var lstat\n var stat\n try {\n lstat = fs.lstatSync(abs)\n } catch (er) {\n if (er.code === 'ENOENT') {\n // lstat failed, doesn't exist\n return null\n }\n }\n\n var isSym = lstat && lstat.isSymbolicLink()\n this.symlinks[abs] = isSym\n\n // If it's not a symlink or a dir, then it's definitely a regular file.\n // don't bother doing a readdir in that case.\n if (!isSym && lstat && !lstat.isDirectory())\n this.cache[abs] = 'FILE'\n else\n entries = this._readdir(abs, false)\n\n return entries\n}\n\nGlobSync.prototype._readdir = function (abs, inGlobStar) {\n var entries\n\n if (inGlobStar && !ownProp(this.symlinks, abs))\n return this._readdirInGlobStar(abs)\n\n if (ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n if (!c || c === 'FILE')\n return null\n\n if (Array.isArray(c))\n return c\n }\n\n try {\n return this._readdirEntries(abs, fs.readdirSync(abs))\n } catch (er) {\n this._readdirError(abs, er)\n return null\n }\n}\n\nGlobSync.prototype._readdirEntries = function (abs, entries) {\n // if we haven't asked to stat everything, then just\n // assume that everything in there exists, so we can avoid\n // having to stat it a second time.\n if (!this.mark && !this.stat) {\n for (var i = 0; i < entries.length; i ++) {\n var e = entries[i]\n if (abs === '/')\n e = abs + e\n else\n e = abs + '/' + e\n this.cache[e] = true\n }\n }\n\n this.cache[abs] = entries\n\n // mark and cache dir-ness\n return entries\n}\n\nGlobSync.prototype._readdirError = function (f, er) {\n // handle errors, and cache the information\n switch (er.code) {\n case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n case 'ENOTDIR': // totally normal. means it *does* exist.\n var abs = this._makeAbs(f)\n this.cache[abs] = 'FILE'\n if (abs === this.cwdAbs) {\n var error = new Error(er.code + ' invalid cwd ' + this.cwd)\n error.path = this.cwd\n error.code = er.code\n throw error\n }\n break\n\n case 'ENOENT': // not terribly unusual\n case 'ELOOP':\n case 'ENAMETOOLONG':\n case 'UNKNOWN':\n this.cache[this._makeAbs(f)] = false\n break\n\n default: // some unusual error. Treat as failure.\n this.cache[this._makeAbs(f)] = false\n if (this.strict)\n throw er\n if (!this.silent)\n console.error('glob error', er)\n break\n }\n}\n\nGlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {\n\n var entries = this._readdir(abs, inGlobStar)\n\n // no entries means not a dir, so it can never have matches\n // foo.txt/** doesn't match foo.txt\n if (!entries)\n return\n\n // test without the globstar, and with every child both below\n // and replacing the globstar.\n var remainWithoutGlobStar = remain.slice(1)\n var gspref = prefix ? [ prefix ] : []\n var noGlobStar = gspref.concat(remainWithoutGlobStar)\n\n // the noGlobStar pattern exits the inGlobStar state\n this._process(noGlobStar, index, false)\n\n var len = entries.length\n var isSym = this.symlinks[abs]\n\n // If it's a symlink, and we're in a globstar, then stop\n if (isSym && inGlobStar)\n return\n\n for (var i = 0; i < len; i++) {\n var e = entries[i]\n if (e.charAt(0) === '.' && !this.dot)\n continue\n\n // these two cases enter the inGlobStar state\n var instead = gspref.concat(entries[i], remainWithoutGlobStar)\n this._process(instead, index, true)\n\n var below = gspref.concat(entries[i], remain)\n this._process(below, index, true)\n }\n}\n\nGlobSync.prototype._processSimple = function (prefix, index) {\n // XXX review this. Shouldn't it be doing the mounting etc\n // before doing stat? kinda weird?\n var exists = this._stat(prefix)\n\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n // If it doesn't exist, then just mark the lack of results\n if (!exists)\n return\n\n if (prefix && isAbsolute(prefix) && !this.nomount) {\n var trail = /[\\/\\\\]$/.test(prefix)\n if (prefix.charAt(0) === '/') {\n prefix = path.join(this.root, prefix)\n } else {\n prefix = path.resolve(this.root, prefix)\n if (trail)\n prefix += '/'\n }\n }\n\n if (process.platform === 'win32')\n prefix = prefix.replace(/\\\\/g, '/')\n\n // Mark this as a match\n this._emitMatch(index, prefix)\n}\n\n// Returns either 'DIR', 'FILE', or false\nGlobSync.prototype._stat = function (f) {\n var abs = this._makeAbs(f)\n var needDir = f.slice(-1) === '/'\n\n if (f.length > this.maxLength)\n return false\n\n if (!this.stat && ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n\n if (Array.isArray(c))\n c = 'DIR'\n\n // It exists, but maybe not how we need it\n if (!needDir || c === 'DIR')\n return c\n\n if (needDir && c === 'FILE')\n return false\n\n // otherwise we have to stat, because maybe c=true\n // if we know it exists, but not what it is.\n }\n\n var exists\n var stat = this.statCache[abs]\n if (!stat) {\n var lstat\n try {\n lstat = fs.lstatSync(abs)\n } catch (er) {\n if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n this.statCache[abs] = false\n return false\n }\n }\n\n if (lstat && lstat.isSymbolicLink()) {\n try {\n stat = fs.statSync(abs)\n } catch (er) {\n stat = lstat\n }\n } else {\n stat = lstat\n }\n }\n\n this.statCache[abs] = stat\n\n var c = true\n if (stat)\n c = stat.isDirectory() ? 'DIR' : 'FILE'\n\n this.cache[abs] = this.cache[abs] || c\n\n if (needDir && c === 'FILE')\n return false\n\n return c\n}\n\nGlobSync.prototype._mark = function (p) {\n return common.mark(this, p)\n}\n\nGlobSync.prototype._makeAbs = function (f) {\n return common.makeAbs(this, f)\n}\n"]},"metadata":{},"sourceType":"script"} |