import { logging } from '@angular-devkit/core';
import * as ts from 'typescript';
import type { ComponentStructure } from '@o3r/components';
/** Information extracted from a component file */
export interface ComponentInformation {
    /** Name of the component */
    name: string;
    /** Name of the configuration used by the component */
    configName?: string;
    /** Path to the configuration file used */
    configPath?: string;
    /** Determine if the component uses the configuration dynamically */
    isDynamicConfig: boolean;
    /** Name of the context used by the component */
    contextName?: string;
    /** Path to the context file used */
    contextPath?: string;
    /** Type of the component */
    type: ComponentStructure;
    /** Selector of the component */
    selector?: string;
    /** Determine if the component is activating a ruleset */
    linkableToRuleset: boolean;
    /** List of localization keys used in the component */
    localizationKeys?: string[];
}
/**
 * Component class extractor.
 */
export declare class ComponentClassExtractor {
    source: ts.SourceFile;
    private readonly logger;
    filePath: string;
    /** List of interfaces that a configurable component can implement */
    readonly CONFIGURABLE_INTERFACES: string[];
    /**
     * Component class extractor constructor
     * @param source Typescript SourceFile node of the file
     * @param logger Logger
     * @param filePath Path to the file to extract the data from
     */
    constructor(source: ts.SourceFile, logger: logging.LoggerApi, filePath: string);
    /**
     * Indicates if the given decorator is a component decorator.
     * @param decoratorNode The decorator node to test
     */
    private isComponentDecorator;
    /**
     * Get the component type from the given decorator node.
     * @param decoratorNode The decorator node to get the component type from
     */
    private getComponentType;
    /**
     * Get the component selector from the given decorator node.
     * @param decoratorNode The decorator node to get the component selector from
     */
    private getComponentSelector;
    /**
     * Sanitize component type by removing extra quotes
     * Example: "'Page'" becomes 'Page'
     * @param type
     * @private
     */
    private sanitizeComponentType;
    private getComponentStructure;
    /**
     * Extract component information of a given class node
     * @param classNode Typescript node of a class
     */
    private getComponentInformation;
    /**
     * Get the file path of the given class from the import
     * @param className Name of the class to find in the imports
     */
    private getFilePath;
    /**
     * Extract the component data of a typescript file
     */
    extract(): ComponentInformation | undefined;
}
//# sourceMappingURL=component-class-extractor.d.ts.map