UNPKG

astx

Version:

super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring

918 lines (783 loc) 27 kB
'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) }