UNPKG

astx

Version:

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

379 lines (320 loc) 9.39 kB
'use strict' var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault') var _typeof = require('@babel/runtime/helpers/typeof') Object.defineProperty(exports, '__esModule', { value: true, }) exports['default'] = void 0 var _slicedToArray2 = _interopRequireDefault( require('@babel/runtime/helpers/slicedToArray') ) var _toConsumableArray2 = _interopRequireDefault( require('@babel/runtime/helpers/toConsumableArray') ) var _types = _interopRequireDefault(require('ast-types/lib/types')) var defaultTypes = _interopRequireWildcard(require('@babel/types')) var _lodash = require('lodash') var _fork = _interopRequireDefault(require('ast-types/fork')) var _nodePath = _interopRequireDefault(require('ast-types/lib/node-path')) function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== 'function') return null var cacheBabelInterop = new WeakMap() var cacheNodeInterop = new WeakMap() return (_getRequireWildcardCache = function _getRequireWildcardCache( nodeInterop ) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop })(nodeInterop) } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj } if ( obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function') ) { return { default: obj, } } var cache = _getRequireWildcardCache(nodeInterop) if (cache && cache.has(obj)) { return cache.get(obj) } var newObj = {} var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor for (var key in obj) { if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc) } else { newObj[key] = obj[key] } } } newObj['default'] = obj if (cache) { cache.set(obj, newObj) } return newObj } 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 } var typesPlugin = _types['default']['default'] || _types['default'] var babelAstTypes = (0, _lodash.memoize)(function () { var t = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultTypes function babel(fork) { var types = fork.use(typesPlugin) var builtInTypes = types.builtInTypes, Type = types.Type var def = Type.def, or = Type.or fork.use(_nodePath['default']) def('Node').field('type', builtInTypes.string) function tryConvertValidate(validate, node) { if (!validate) return {} if (validate.type) { switch (validate.type) { case 'any': return {} case 'string': return builtInTypes.string case 'boolean': return builtInTypes['boolean'] case 'number': return builtInTypes.number case 'null': return builtInTypes['null'] case 'undefined': return builtInTypes.undefined } } if (validate.chainOf) { var _iterator = _createForOfIteratorHelper(validate.chainOf), _step try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var elem = _step.value var converted = tryConvertValidate(elem) if (converted) return converted } } catch (err) { _iterator.e(err) } finally { _iterator.f() } } if (validate.each) { return [convertValidate(validate.each)] } if (validate.oneOfNodeTypes) { return or.apply( void 0, (0, _toConsumableArray2['default'])( validate.oneOfNodeTypes.map(function (type) { return def(type) }) ) ) } if (validate.oneOf) { return node !== null && node !== void 0 && node.optional ? or.apply( void 0, (0, _toConsumableArray2['default'])(validate.oneOf).concat([null]) ) : or.apply( void 0, (0, _toConsumableArray2['default'])(validate.oneOf) ) } if (validate.shapeOf) { return (0, _lodash.mapValues)(validate.shapeOf, function (value) { return convertValidate(value.validate, value) }) } if (validate.oneOfNodeOrValueTypes) { return or.apply( void 0, (0, _toConsumableArray2['default'])( validate.oneOfNodeOrValueTypes.map(function (type) { return /^[A-Z]/.test(type) ? def(type) : convertValidate({ type: type, }) }) ) ) } } function convertValidate(validate, node) { var converted = tryConvertValidate(validate, node) if (!converted) { throw new Error( "couldn't determine field def for validate: ".concat( JSON.stringify(validate) ) ) } return converted } for ( var _i = 0, _Object$entries = Object.entries(t.NODE_FIELDS); _i < _Object$entries.length; _i++ ) { var _Object$entries$_i = (0, _slicedToArray2['default'])( _Object$entries[_i], 2 ), type = _Object$entries$_i[0], fields = _Object$entries$_i[1] var d = def(type) d.field('type', type) var aliases = t.ALIAS_KEYS[type] if (aliases) { var _iterator2 = _createForOfIteratorHelper(aliases), _step2 try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { var alias = _step2.value def(alias) } } catch (err) { _iterator2.e(err) } finally { _iterator2.f() } d.bases.apply( d, ['Node'].concat((0, _toConsumableArray2['default'])(aliases)) ) } else { d.bases('Node') } var _loop = function _loop() { var _Object$entries2$_i = (0, _slicedToArray2['default'])( _Object$entries2[_i2], 2 ), field = _Object$entries2$_i[0], _Object$entries2$_i$ = _Object$entries2$_i[1], validate = _Object$entries2$_i$.validate, _default = _Object$entries2$_i$['default'] var fieldType = convertValidate(validate) d.field( field, fieldType, Array.isArray(_default) ? function () { return (0, _toConsumableArray2['default'])(_default) } : fieldType === builtInTypes['boolean'] && _default == null ? function () { return false } : _default !== undefined ? function () { return _default } : undefined ) } for ( var _i2 = 0, _Object$entries2 = Object.entries( type === 'File' ? (0, _lodash.omit)(fields, 'tokens') : fields ); _i2 < _Object$entries2.length; _i2++ ) { _loop() } } } return (0, _fork['default'])([babel]) }) var _default2 = babelAstTypes exports['default'] = _default2