import { PluginObj } from '@babel/core';
import { NodePath, Visitor } from '@babel/traverse';
import { CallExpression, ExportAllDeclaration, ExportNamedDeclaration, ImportDeclaration } from '@babel/types';
import { TrextelState } from '../interfaces';
import { TrextNodePath } from '../types';
/**
 * @file Plugins - Trextel
 * @module trext/plugins/Trextel
 */
/**
 * [Babel plugin][1] that transforms import declarations and call expressions.
 *
 * @template F - Old file extension name(s)
 * @template T - New file extension name(s)
 *
 * @implements {PluginObj<TrextelState<F, T>>}
 *
 * [1]: https://github.com/jamiebuilds/babel-handbook/blob/master/translations/en/plugin-handbook.md
 */
declare class Trextel<F extends string = string, T extends string = string> implements PluginObj<TrextelState<F, T>> {
    /**
     * @readonly
     * @instance
     * @property {TrextelState<F, T>.key} name - Plugin name
     */
    readonly name: TrextelState<F, T>['key'];
    /**
     * Escapes special characters in `value`.
     *
     * @param {string} [value=''] - String to escape
     * @return {string} Escaped string
     */
    static escapeSpecials(value?: string): string;
    /**
     * Retrieves the source code from `nodePath`.
     *
     * @param {TrextNodePath} nodePath - Current node path
     * @return {string | undefined} Declaration, call expression, or `undefined`
     */
    static getCode(nodePath: TrextNodePath): string | undefined;
    /**
     * Transforms call expressions and import statements to use `options.to`.
     *
     * @template F - Old file extension name(s)
     * @template T - New file extension name(s)
     *
     * @param {TrextNodePath} nodePath - Current node path
     * @param {TrextelState<F, T>} state - Plugin state
     * @return {void} Nothing when complete
     */
    static transform<F extends string = string, T extends string = string>(nodePath: TrextNodePath, state: TrextelState<F, T>): TrextNodePath | void;
    /**
     * Transforms call expressions to use `options.to`.
     *
     * @param {NodePath<CallExpression>} nodePath - Current node path
     * @param {TrextelState<F, T>} state - Plugin state
     * @return {void} Nothing when complete
     */
    CallExpression(nodePath: NodePath<CallExpression>, state: TrextelState<F, T>): void;
    /**
     * Transforms export all (`export *`) declarations to use `options.to`.
     *
     * @param {NodePath<ExportAllDeclaration>} nodePath - Current node path
     * @param {TrextelState<F, T>} state - Plugin state
     * @return {void} Nothing when complete
     */
    ExportAllDeclaration(nodePath: NodePath<ExportAllDeclaration>, state: TrextelState<F, T>): void;
    /**
     * Transforms named export (`export foo`) declarations to use `options.to`.
     *
     * @param {NodePath<ExportNamedDeclaration>} nodePath - Current node path
     * @param {TrextelState<F, T>} state - Plugin state
     * @return {void} Nothing when complete
     */
    ExportNamedDeclaration(nodePath: NodePath<ExportNamedDeclaration>, state: TrextelState<F, T>): void;
    /**
     * Transforms import declarations to use `options.to`.
     *
     * @param {NodePath<ImportDeclaration>} nodePath - Current node path
     * @param {TrextelState<F, T>} state - Plugin state
     * @return {void} Nothing when complete
     */
    ImportDeclaration(nodePath: NodePath<ImportDeclaration>, state: TrextelState<F, T>): void;
    /**
     * Returns the plugin object.
     *
     * @return {PluginObj<TrextelState<F, T>>} Plugin object
     */
    get plugin(): PluginObj<TrextelState<F, T>>;
    /**
     * Returns the plugin [visitor][1].
     *
     * @return {Visitor<TrextelState<F, T>>} Plugin visitor
     */
    get visitor(): Visitor<TrextelState<F, T>>;
}
export default Trextel;
//# sourceMappingURL=trextel.plugin.d.ts.map