astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
46 lines (42 loc) • 5.61 kB
JavaScript
import path from 'path'
import _resolve from 'resolve'
import BabelBackend from './BabelBackend.mjs'
import * as defaultBabelTypes from '@babel/types'
import * as defaultBabelGenerator from '@babel/generator'
import { getParserAsync } from 'babel-parse-wild-code'
import { promisify } from 'util'
const resolve = promisify(_resolve)
async function importLocal(pkg, basedir) {
const resolved = await resolve(pkg, {
basedir,
}) // eslint-disable-next-line @typescript-eslint/no-var-requires
return await import(
/* webpackIgnore: true */
resolved
)
}
export default async function getBabelAutoBackend(
file,
{ preserveFormat, ...options } = {}
) {
const basedir = path.dirname(file)
const [_parser, types, generator] = await Promise.all([
getParserAsync(file, options),
importLocal('@babel/types', basedir).catch(() => defaultBabelTypes),
importLocal('@babel/generator', basedir).catch(() => defaultBabelGenerator),
])
const parser = (
_parser.parserOpts.sourceType
? _parser
: _parser.bindParserOpts({
sourceType: 'unambiguous',
})
).forExtension(file)
return new BabelBackend({
parser: parser,
parserOptions: options,
preserveFormat,
generator,
types,
})
} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX3Jlc29sdmUiLCJCYWJlbEJhY2tlbmQiLCJkZWZhdWx0QmFiZWxUeXBlcyIsImRlZmF1bHRCYWJlbEdlbmVyYXRvciIsImdldFBhcnNlckFzeW5jIiwicHJvbWlzaWZ5IiwicmVzb2x2ZSIsImltcG9ydExvY2FsIiwicGtnIiwiYmFzZWRpciIsInJlc29sdmVkIiwiZ2V0QmFiZWxBdXRvQmFja2VuZCIsImZpbGUiLCJwcmVzZXJ2ZUZvcm1hdCIsIm9wdGlvbnMiLCJkaXJuYW1lIiwiX3BhcnNlciIsInR5cGVzIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsImFsbCIsImNhdGNoIiwicGFyc2VyIiwicGFyc2VyT3B0cyIsInNvdXJjZVR5cGUiLCJiaW5kUGFyc2VyT3B0cyIsImZvckV4dGVuc2lvbiIsInBhcnNlck9wdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmFiZWwvZ2V0QmFiZWxBdXRvQmFja2VuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IF9yZXNvbHZlIGZyb20gJ3Jlc29sdmUnXG5pbXBvcnQgQmFiZWxCYWNrZW5kIGZyb20gJy4vQmFiZWxCYWNrZW5kJ1xuaW1wb3J0ICogYXMgZGVmYXVsdEJhYmVsVHlwZXMgZnJvbSAnQGJhYmVsL3R5cGVzJ1xuaW1wb3J0ICogYXMgZGVmYXVsdEJhYmVsR2VuZXJhdG9yIGZyb20gJ0BiYWJlbC9nZW5lcmF0b3InXG5pbXBvcnQgeyBnZXRQYXJzZXJBc3luYyB9IGZyb20gJ2JhYmVsLXBhcnNlLXdpbGQtY29kZSdcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnXG5cbmNvbnN0IHJlc29sdmU6IChcbiAgaWQ6IHN0cmluZyxcbiAgb3B0czogX3Jlc29sdmUuQXN5bmNPcHRzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4pID0+IFByb21pc2U8c3RyaW5nPiA9IHByb21pc2lmeShfcmVzb2x2ZSBhcyBhbnkpXG5cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExvY2FsPFQ+KHBrZzogc3RyaW5nLCBiYXNlZGlyOiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlKHBrZywge1xuICAgIGJhc2VkaXIsXG4gIH0pXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIHJldHVybiBhd2FpdCBpbXBvcnQoLyogd2VicGFja0lnbm9yZTogdHJ1ZSAqLyByZXNvbHZlZClcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFiZWxBdXRvQmFja2VuZChcbiAgZmlsZTogc3RyaW5nLFxuICB7IHByZXNlcnZlRm9ybWF0LCAuLi5vcHRpb25zIH06IHsgW2sgaW4gc3RyaW5nXT86IGFueSB9ID0ge31cbik6IFByb21pc2U8QmFiZWxCYWNrZW5kPiB7XG4gIGNvbnN0IGJhc2VkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcbiAgY29uc3QgW19wYXJzZXIsIHR5cGVzLCBnZW5lcmF0b3JdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFBhcnNlckFzeW5jKGZpbGUsIG9wdGlvbnMpLFxuICAgIGltcG9ydExvY2FsPHR5cGVvZiBkZWZhdWx0QmFiZWxUeXBlcz4oJ0BiYWJlbC90eXBlcycsIGJhc2VkaXIpLmNhdGNoKFxuICAgICAgKCkgPT4gZGVmYXVsdEJhYmVsVHlwZXNcbiAgICApLFxuICAgIGltcG9ydExvY2FsPHR5cGVvZiBkZWZhdWx0QmFiZWxHZW5lcmF0b3I+KFxuICAgICAgJ0BiYWJlbC9nZW5lcmF0b3InLFxuICAgICAgYmFzZWRpclxuICAgICkuY2F0Y2goKCkgPT4gZGVmYXVsdEJhYmVsR2VuZXJhdG9yKSxcbiAgXSlcbiAgY29uc3QgcGFyc2VyID0gKFxuICAgIF9wYXJzZXIucGFyc2VyT3B0cy5zb3VyY2VUeXBlXG4gICAgICA/IF9wYXJzZXJcbiAgICAgIDogX3BhcnNlci5iaW5kUGFyc2VyT3B0cyh7IHNvdXJjZVR5cGU6ICd1bmFtYmlndW91cycgfSlcbiAgKS5mb3JFeHRlbnNpb24oZmlsZSlcbiAgcmV0dXJuIG5ldyBCYWJlbEJhY2tlbmQoe1xuICAgIHBhcnNlcjogcGFyc2VyIGFzIGFueSxcbiAgICBwYXJzZXJPcHRpb25zOiBvcHRpb25zLFxuICAgIHByZXNlcnZlRm9ybWF0LFxuICAgIGdlbmVyYXRvcixcbiAgICB0eXBlcyxcbiAgfSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsSUFBUCxNQUFpQixNQUFqQjtBQUNBLE9BQU9DLFFBQVAsTUFBcUIsU0FBckI7QUFDQSxPQUFPQyxZQUFQLE1BQXlCLGdCQUF6QjtBQUNBLE9BQU8sS0FBS0MsaUJBQVosTUFBbUMsY0FBbkM7QUFDQSxPQUFPLEtBQUtDLHFCQUFaLE1BQXVDLGtCQUF2QztBQUNBLFNBQVNDLGNBQVQsUUFBK0IsdUJBQS9CO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQixNQUExQjs7QUFFQSxNQUFNQyxPQUljOzs7O0FBQUdELFNBQVMsQ0FBQ0wsUUFBRCxDQUpoQzs7QUFNQSxlQUFlTyxXQUFmLENBQThCQyxHQUE5QixFQUEyQ0MsT0FBM0MsRUFBd0U7RUFDdEUsTUFBTUMsUUFBUSxHQUFHLE1BQU1KLE9BQU8sQ0FBQ0UsR0FBRCxFQUFNO0lBQ2xDQyxPQURrQyxFQUFOLENBQTlCOztFQUdBO0VBQ0EsT0FBTyxNQUFNLFFBQU8seUJBQTBCQyxRQUFqQyxDQUFiO0FBQ0Q7O0FBRUQsZUFBZSxlQUFlQyxtQkFBZjtBQUNiQyxJQURhO0FBRWIsRUFBRUMsY0FBRixFQUFrQixHQUFHQyxPQUFyQixLQUEwRCxFQUY3QztBQUdVO0VBQ3ZCLE1BQU1MLE9BQU8sR0FBR1YsSUFBSSxDQUFDZ0IsT0FBTCxDQUFhSCxJQUFiLENBQWhCO0VBQ0EsTUFBTSxDQUFDSSxPQUFELEVBQVVDLEtBQVYsRUFBaUJDLFNBQWpCLElBQThCLE1BQU1DLE9BQU8sQ0FBQ0MsR0FBUixDQUFZO0VBQ3BEaEIsY0FBYyxDQUFDUSxJQUFELEVBQU9FLE9BQVAsQ0FEc0M7RUFFcERQLFdBQVcsQ0FBMkIsY0FBM0IsRUFBMkNFLE9BQTNDLENBQVgsQ0FBK0RZLEtBQS9EO0VBQ0UsTUFBTW5CLGlCQURSLENBRm9EOztFQUtwREssV0FBVztFQUNULGtCQURTO0VBRVRFLE9BRlMsQ0FBWDtFQUdFWSxLQUhGLENBR1EsTUFBTWxCLHFCQUhkLENBTG9ELENBQVosQ0FBMUM7O0VBVUEsTUFBTW1CLE1BQU0sR0FBRztFQUNiTixPQUFPLENBQUNPLFVBQVIsQ0FBbUJDLFVBQW5CO0VBQ0lSLE9BREo7RUFFSUEsT0FBTyxDQUFDUyxjQUFSLENBQXVCLEVBQUVELFVBQVUsRUFBRSxhQUFkLEVBQXZCLENBSFM7RUFJYkUsWUFKYSxDQUlBZCxJQUpBLENBQWY7RUFLQSxPQUFPLElBQUlYLFlBQUosQ0FBaUI7SUFDdEJxQixNQUFNLEVBQUVBLE1BRGM7SUFFdEJLLGFBQWEsRUFBRWIsT0FGTztJQUd0QkQsY0FIc0I7SUFJdEJLLFNBSnNCO0lBS3RCRCxLQUxzQixFQUFqQixDQUFQOztBQU9EIn0=