astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
918 lines (783 loc) • 27 kB
JavaScript
'use strict'
var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault')
Object.defineProperty(exports, '__esModule', {
value: true,
})
exports['default'] = glob
var _defineProperty2 = _interopRequireDefault(
require('@babel/runtime/helpers/defineProperty')
)
var _objectWithoutProperties2 = _interopRequireDefault(
require('@babel/runtime/helpers/objectWithoutProperties')
)
var _regenerator = _interopRequireDefault(require('@babel/runtime/regenerator'))
var _asyncToGenerator2 = _interopRequireDefault(
require('@babel/runtime/helpers/asyncToGenerator')
)
var _awaitAsyncGenerator2 = _interopRequireDefault(
require('@babel/runtime/helpers/awaitAsyncGenerator')
)
var _wrapAsyncGenerator2 = _interopRequireDefault(
require('@babel/runtime/helpers/wrapAsyncGenerator')
)
var _fsExtra = _interopRequireDefault(require('fs-extra'))
var _gitignoreFs = _interopRequireDefault(require('gitignore-fs'))
var _path = _interopRequireDefault(require('path'))
var _minimatch = require('minimatch')
var _excluded = [
'include',
'exclude',
'dot',
'includeMatcher',
'excludeMatcher',
'gitignore',
'cwd',
'fs',
'visited',
]
function _createForOfIteratorHelper(o, allowArrayLike) {
var it =
(typeof Symbol !== 'undefined' && o[Symbol.iterator]) || o['@@iterator']
if (!it) {
if (
Array.isArray(o) ||
(it = _unsupportedIterableToArray(o)) ||
(allowArrayLike && o && typeof o.length === 'number')
) {
if (it) o = it
var i = 0
var F = function F() {}
return {
s: F,
n: function n() {
if (i >= o.length)
return {
done: true,
}
return {
done: false,
value: o[i++],
}
},
e: function e(_e) {
throw _e
},
f: F,
}
}
throw new TypeError(
'Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'
)
}
var normalCompletion = true,
didErr = false,
err
return {
s: function s() {
it = it.call(o)
},
n: function n() {
var step = it.next()
normalCompletion = step.done
return step
},
e: function e(_e2) {
didErr = true
err = _e2
},
f: function f() {
try {
if (!normalCompletion && it['return'] != null) it['return']()
} finally {
if (didErr) throw err
}
},
}
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return
if (typeof o === 'string') return _arrayLikeToArray(o, minLen)
var n = Object.prototype.toString.call(o).slice(8, -1)
if (n === 'Object' && o.constructor) n = o.constructor.name
if (n === 'Map' || n === 'Set') return Array.from(o)
if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
return _arrayLikeToArray(o, minLen)
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length
for (var i = 0, arr2 = new Array(len); i < len; i++) {
arr2[i] = arr[i]
}
return arr2
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object)
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object)
enumerableOnly &&
(symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable
})),
keys.push.apply(keys, symbols)
}
return keys
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {}
i % 2
? ownKeys(Object(source), !0).forEach(function (key) {
;(0, _defineProperty2['default'])(target, key, source[key])
})
: Object.getOwnPropertyDescriptors
? Object.defineProperties(
target,
Object.getOwnPropertyDescriptors(source)
)
: ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(
target,
key,
Object.getOwnPropertyDescriptor(source, key)
)
})
}
return target
}
function _asyncIterator(iterable) {
var method,
async,
sync,
retry = 2
for (
'undefined' != typeof Symbol &&
((async = Symbol.asyncIterator), (sync = Symbol.iterator));
retry--;
) {
if (async && null != (method = iterable[async]))
return method.call(iterable)
if (sync && null != (method = iterable[sync]))
return new AsyncFromSyncIterator(method.call(iterable))
;(async = '@@asyncIterator'), (sync = '@@iterator')
}
throw new TypeError('Object is not async iterable')
}
function AsyncFromSyncIterator(s) {
function AsyncFromSyncIteratorContinuation(r) {
if (Object(r) !== r)
return Promise.reject(new TypeError(r + ' is not an object.'))
var done = r.done
return Promise.resolve(r.value).then(function (value) {
return {
value: value,
done: done,
}
})
}
return (
(AsyncFromSyncIterator = function AsyncFromSyncIterator(s) {
;(this.s = s), (this.n = s.next)
}),
(AsyncFromSyncIterator.prototype = {
s: null,
n: null,
next: function next() {
return AsyncFromSyncIteratorContinuation(
this.n.apply(this.s, arguments)
)
},
return: function _return(value) {
var ret = this.s['return']
return void 0 === ret
? Promise.resolve({
value: value,
done: !0,
})
: AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments))
},
throw: function _throw(value) {
var thr = this.s['return']
return void 0 === thr
? Promise.reject(value)
: AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments))
},
}),
new AsyncFromSyncIterator(s)
)
}
var defaultFs = {
readdir: function readdir(dir) {
return (0, _asyncToGenerator2['default'])(
/*#__PURE__*/ _regenerator['default'].mark(function _callee() {
return _regenerator['default'].wrap(function _callee$(_context) {
while (1) {
switch ((_context.prev = _context.next)) {
case 0:
_context.next = 2
return _fsExtra['default'].readdir(dir, {
withFileTypes: true,
})
case 2:
return _context.abrupt('return', _context.sent)
case 3:
case 'end':
return _context.stop()
}
}
}, _callee)
})
)()
},
realpath: function realpath(path) {
return (0, _asyncToGenerator2['default'])(
/*#__PURE__*/ _regenerator['default'].mark(function _callee2() {
return _regenerator['default'].wrap(function _callee2$(_context2) {
while (1) {
switch ((_context2.prev = _context2.next)) {
case 0:
_context2.next = 2
return _fsExtra['default'].realpath(path)
case 2:
return _context2.abrupt('return', _context2.sent)
case 3:
case 'end':
return _context2.stop()
}
}
}, _callee2)
})
)()
},
}
function globDir(_x) {
return _globDir.apply(this, arguments)
}
function _globDir() {
_globDir = (0, _wrapAsyncGenerator2['default'])(
/*#__PURE__*/ _regenerator['default'].mark(function _callee4(_ref) {
var includeMatcher,
excludeMatcher,
gitignore,
cwd,
dir,
fs,
visited,
nodir,
includeDir,
isAbsolute,
entries,
readdir,
_i,
_entries,
entry,
matchpath,
_iteratorAbruptCompletion,
_didIteratorError,
_iteratorError,
_iterator,
_step,
sub
return _regenerator['default'].wrap(
function _callee4$(_context4) {
while (1) {
switch ((_context4.prev = _context4.next)) {
case 0:
;(includeMatcher = _ref.includeMatcher),
(excludeMatcher = _ref.excludeMatcher),
(gitignore = _ref.gitignore),
(cwd = _ref.cwd),
(dir = _ref.dir),
(fs = _ref.fs),
(visited = _ref.visited),
(nodir = _ref.nodir),
(includeDir = _ref.includeDir)
isAbsolute = _path['default'].isAbsolute(dir)
dir = _path['default'].resolve(cwd, dir)
entries = []
if (includeDir) {
entries.push(dir.replace(/[/\\]?$/, '/'))
}
_context4.prev = 5
_context4.next = 8
return (0, _awaitAsyncGenerator2['default'])(fs.readdir(dir))
case 8:
readdir = _context4.sent.map(function (entry) {
return (
_path['default'].join(dir, entry.name) +
(entry.isDirectory() ? '/' : '')
)
})
_context4.next = 16
break
case 11:
_context4.prev = 11
_context4.t0 = _context4['catch'](5)
if (!(_context4.t0.code !== 'ENOTDIR')) {
_context4.next = 15
break
}
throw _context4.t0
case 15:
readdir = [dir]
case 16:
_context4.next = 18
return (0, _awaitAsyncGenerator2['default'])(
Promise.all(
readdir.map(
/*#__PURE__*/ (function () {
var _ref2 = (0, _asyncToGenerator2['default'])(
/*#__PURE__*/ _regenerator['default'].mark(
function _callee3(fullpath) {
var matchpath, realpath
return _regenerator['default'].wrap(
function _callee3$(_context3) {
while (1) {
switch ((_context3.prev = _context3.next)) {
case 0:
_context3.t0 = gitignore
if (!_context3.t0) {
_context3.next = 5
break
}
_context3.next = 4
return gitignore.ignores(fullpath)
case 4:
_context3.t0 = _context3.sent
case 5:
if (!_context3.t0) {
_context3.next = 7
break
}
return _context3.abrupt('return')
case 7:
matchpath = isAbsolute
? fullpath
: _path['default'].relative(
cwd,
fullpath
)
if (
!(
(includeMatcher &&
!includeMatcher.match(
matchpath,
fullpath.endsWith('/')
)) ||
(excludeMatcher !== null &&
excludeMatcher !== void 0 &&
excludeMatcher.match(matchpath))
)
) {
_context3.next = 10
break
}
return _context3.abrupt('return')
case 10:
_context3.next = 12
return fs.realpath(fullpath)
case 12:
realpath = _context3.sent
if (!visited.has(realpath)) {
_context3.next = 15
break
}
return _context3.abrupt('return')
case 15:
visited.add(realpath)
entries.push(fullpath)
case 17:
case 'end':
return _context3.stop()
}
}
},
_callee3
)
}
)
)
return function (_x3) {
return _ref2.apply(this, arguments)
}
})()
)
)
)
case 18:
;(_i = 0), (_entries = entries)
case 19:
if (!(_i < _entries.length)) {
_context4.next = 63
break
}
entry = _entries[_i]
if (!entry.endsWith('/')) {
_context4.next = 58
break
}
if (nodir) {
_context4.next = 27
break
}
matchpath = isAbsolute
? entry
: _path['default'].relative(cwd, entry)
if (!(!includeMatcher || includeMatcher.match(matchpath))) {
_context4.next = 27
break
}
_context4.next = 27
return entry
case 27:
_iteratorAbruptCompletion = false
_didIteratorError = false
_context4.prev = 29
_iterator = _asyncIterator(
globDir({
gitignore: gitignore,
cwd: cwd,
dir: isAbsolute
? entry
: _path['default'].relative(cwd, entry),
fs: fs,
visited: visited,
includeMatcher: includeMatcher,
excludeMatcher: excludeMatcher,
nodir: nodir,
})
)
case 31:
_context4.next = 33
return (0, _awaitAsyncGenerator2['default'])(_iterator.next())
case 33:
if (
!(_iteratorAbruptCompletion = !(_step = _context4.sent).done)
) {
_context4.next = 40
break
}
sub = _step.value
_context4.next = 37
return sub
case 37:
_iteratorAbruptCompletion = false
_context4.next = 31
break
case 40:
_context4.next = 46
break
case 42:
_context4.prev = 42
_context4.t1 = _context4['catch'](29)
_didIteratorError = true
_iteratorError = _context4.t1
case 46:
_context4.prev = 46
_context4.prev = 47
if (
!(_iteratorAbruptCompletion && _iterator['return'] != null)
) {
_context4.next = 51
break
}
_context4.next = 51
return (0, _awaitAsyncGenerator2['default'])(
_iterator['return']()
)
case 51:
_context4.prev = 51
if (!_didIteratorError) {
_context4.next = 54
break
}
throw _iteratorError
case 54:
return _context4.finish(51)
case 55:
return _context4.finish(46)
case 56:
_context4.next = 60
break
case 58:
_context4.next = 60
return entry
case 60:
_i++
_context4.next = 19
break
case 63:
case 'end':
return _context4.stop()
}
}
},
_callee4,
null,
[
[5, 11],
[29, 42, 46, 56],
[47, , 51, 55],
]
)
})
)
return _globDir.apply(this, arguments)
}
function glob(_x2) {
return _glob.apply(this, arguments)
}
function _glob() {
_glob = (0, _wrapAsyncGenerator2['default'])(
/*#__PURE__*/ _regenerator['default'].mark(function _callee5(_ref3) {
var _marked,
include,
exclude,
dot,
_ref3$includeMatcher,
includeMatcher,
_ref3$excludeMatcher,
excludeMatcher,
_ref3$gitignore,
gitignore,
_ref3$cwd,
cwd,
_ref3$fs,
fs,
_ref3$visited,
visited,
rest,
opts,
getDirs,
_iterator4,
_step4,
_dir,
_iteratorAbruptCompletion2,
_didIteratorError2,
_iteratorError2,
_iterator2,
_step2,
entry
return _regenerator['default'].wrap(
function _callee5$(_context6) {
while (1) {
switch ((_context6.prev = _context6.next)) {
case 0:
getDirs = function _getDirs() {
var _iterator3, _step3, splitPath, magicIndex
return _regenerator['default'].wrap(
function getDirs$(_context5) {
while (1) {
switch ((_context5.prev = _context5.next)) {
case 0:
if (!includeMatcher) {
_context5.next = 21
break
}
_iterator3 = _createForOfIteratorHelper(
includeMatcher.set
)
_context5.prev = 2
_iterator3.s()
case 4:
if ((_step3 = _iterator3.n()).done) {
_context5.next = 11
break
}
splitPath = _step3.value
magicIndex = splitPath.findIndex(function (e) {
return typeof e !== 'string'
})
_context5.next = 9
return magicIndex === 0
? cwd
: (magicIndex < 0
? splitPath
: splitPath.slice(0, magicIndex)
).join('/')
case 9:
_context5.next = 4
break
case 11:
_context5.next = 16
break
case 13:
_context5.prev = 13
_context5.t0 = _context5['catch'](2)
_iterator3.e(_context5.t0)
case 16:
_context5.prev = 16
_iterator3.f()
return _context5.finish(16)
case 19:
_context5.next = 23
break
case 21:
_context5.next = 23
return cwd
case 23:
case 'end':
return _context5.stop()
}
}
},
_marked,
null,
[[2, 13, 16, 19]]
)
}
_marked = /*#__PURE__*/ _regenerator['default'].mark(getDirs)
;(include = _ref3.include),
(exclude = _ref3.exclude),
(dot = _ref3.dot),
(_ref3$includeMatcher = _ref3.includeMatcher),
(includeMatcher =
_ref3$includeMatcher === void 0
? include
? new _minimatch.Minimatch(include, {
dot: dot,
})
: undefined
: _ref3$includeMatcher),
(_ref3$excludeMatcher = _ref3.excludeMatcher),
(excludeMatcher =
_ref3$excludeMatcher === void 0
? exclude
? new _minimatch.Minimatch(exclude, {
dot: dot,
})
: undefined
: _ref3$excludeMatcher),
(_ref3$gitignore = _ref3.gitignore),
(gitignore =
_ref3$gitignore === void 0
? new _gitignoreFs['default']()
: _ref3$gitignore),
(_ref3$cwd = _ref3.cwd),
(cwd = _ref3$cwd === void 0 ? process.cwd() : _ref3$cwd),
(_ref3$fs = _ref3.fs),
(fs = _ref3$fs === void 0 ? defaultFs : _ref3$fs),
(_ref3$visited = _ref3.visited),
(visited =
_ref3$visited === void 0 ? new Set() : _ref3$visited),
(rest = (0, _objectWithoutProperties2['default'])(
_ref3,
_excluded
))
opts = _objectSpread(
_objectSpread({}, rest),
{},
{
includeMatcher: includeMatcher,
excludeMatcher: excludeMatcher,
gitignore: gitignore,
cwd: cwd,
fs: fs,
visited: visited,
}
)
_iterator4 = _createForOfIteratorHelper(getDirs())
_context6.prev = 5
_iterator4.s()
case 7:
if ((_step4 = _iterator4.n()).done) {
_context6.next = 40
break
}
_dir = _step4.value
_iteratorAbruptCompletion2 = false
_didIteratorError2 = false
_context6.prev = 11
_iterator2 = _asyncIterator(
globDir(
_objectSpread(
_objectSpread({}, opts),
{},
{
dir: _dir,
includeDir: true,
}
)
)
)
case 13:
_context6.next = 15
return (0, _awaitAsyncGenerator2['default'])(_iterator2.next())
case 15:
if (
!(_iteratorAbruptCompletion2 = !(_step2 = _context6.sent)
.done)
) {
_context6.next = 22
break
}
entry = _step2.value
_context6.next = 19
return entry
case 19:
_iteratorAbruptCompletion2 = false
_context6.next = 13
break
case 22:
_context6.next = 28
break
case 24:
_context6.prev = 24
_context6.t0 = _context6['catch'](11)
_didIteratorError2 = true
_iteratorError2 = _context6.t0
case 28:
_context6.prev = 28
_context6.prev = 29
if (
!(_iteratorAbruptCompletion2 && _iterator2['return'] != null)
) {
_context6.next = 33
break
}
_context6.next = 33
return (0, _awaitAsyncGenerator2['default'])(
_iterator2['return']()
)
case 33:
_context6.prev = 33
if (!_didIteratorError2) {
_context6.next = 36
break
}
throw _iteratorError2
case 36:
return _context6.finish(33)
case 37:
return _context6.finish(28)
case 38:
_context6.next = 7
break
case 40:
_context6.next = 45
break
case 42:
_context6.prev = 42
_context6.t1 = _context6['catch'](5)
_iterator4.e(_context6.t1)
case 45:
_context6.prev = 45
_iterator4.f()
return _context6.finish(45)
case 48:
case 'end':
return _context6.stop()
}
}
},
_callee5,
null,
[
[5, 42, 45, 48],
[11, 24, 28, 38],
[29, , 33, 37],
]
)
})
)
return _glob.apply(this, arguments)
}