/**
 * This is where transformations take place for gjs.
 * For example function names should keep their original name for gjs
 */
import { ConstructName, OptionsGeneration, GirCallableParamElement, GirEnumElement, GirBitfieldElement } from './types/index.js';
export declare const ARRAY_TYPE_MAP: {
    guint8: string;
    gint8: string;
    gunichar: string;
};
/**
 * Used to parse `name` and
 * @see https://developer.gnome.org/glib/stable/glib-Basic-Types.html
 * @see https://gi.readthedocs.io/en/latest/annotations/giannotations.html
 */
export declare const PRIMITIVE_TYPE_MAP: {
    none: string;
    va_list: string;
    guintptr: string;
    utf8: string;
    filename: string;
    gunichar: string;
    'gunichar*': string;
    'char*': string;
    'gchar*': string;
    'gchar**': string;
    'gchar***': string;
    'const gchar*': string;
    'const char*': string;
    gboolean: string;
    'gboolean*': string;
    gpointer: string;
    'gpointer*': string;
    gconstpointer: string;
    gchar: string;
    guchar: string;
    glong: string;
    gulong: string;
    gdouble: string;
    gssize: string;
    gsize: string;
    gshort: string;
    guint32: string;
    'guint32*': string;
    guint: string;
    'guint*': string;
    guint8: string;
    'guint8*': string;
    'guint8**': string;
    guint16: string;
    'guint16*': string;
    gint16: string;
    'gint16*': string;
    guint64: string;
    'guint64*': string;
    gfloat: string;
    'gfloat*': string;
    gint: string;
    'gint*': string;
    gint8: string;
    'gint8*': string;
    gint32: string;
    'gint32*': string;
    gint64: string;
    'gint64*': string;
    gushort: string;
    'gushort*': string;
    long: string;
    double: string;
    'double*': string;
    uint32: string;
    int32: string;
    uint8: string;
    int8: string;
    uint16: string;
    'int*': string;
    int: string;
    this: string;
    never: string;
    unknown: string;
    any: string;
    number: string;
    string: string;
    boolean: string;
    object: string;
    void: string;
};
export declare const FULL_TYPE_MAP: (value: string, out?: boolean) => string | undefined;
export declare class Transformation {
    readonly config: OptionsGeneration;
    protected static instance?: Transformation;
    /**
     * Rules for the name conventions
     * For gjs see https://gjs-docs.gnome.org/ and https://wiki.gnome.org/Attic/Gjs
     */
    private transformations;
    private log;
    protected constructor(config: OptionsGeneration, logName?: string);
    static getSingleton(config: OptionsGeneration): Transformation;
    transformSignalInterfaceName(name: string): string;
    transformModuleNamespaceName(name: string): string;
    transformClassName(name: string): string;
    /**
     * // E.g. the NetworkManager-1.0 has enum names starting with 80211
     * @param girEnum The enum
     * @returns The transformed name
     */
    transformEnumName(girEnum: GirEnumElement | GirBitfieldElement): string;
    transformEnumMember(memberName: string): string;
    transformFunctionName(name: string, isVirtual: boolean): string;
    transformReservedVariableNames(name: string, allowQuotes: boolean): string;
    /**
     * E.g. GstVideo-1.0 has a class `VideoScaler` with a method called `2d`
     * or NetworkManager-1.0 has methods starting with `80211`
     */
    transformPropertyName(name: string, allowQuotes: boolean): string;
    transformConstructorPropertyName(name: string, allowQuotes: boolean): string;
    transformConstantName(name: string, allowQuotes: boolean): string;
    transformFieldName(name: string, allowQuotes: boolean): string;
    transformParameterName(param: GirCallableParamElement, allowQuotes: boolean): string;
    /**
     * Fixes type names, e.g. Return types or enum definitions can not start with numbers
     * @param typeName
     */
    transformTypeName(name: string): string;
    transform(construct: ConstructName, transformMe: string): string;
    /**
     * In JavaScript there can be no variables, methods, class names or enum names that start with a number.
     * This method converts such names.
     * TODO: Prepends an `@` to numeric starting names, how does gjs and node-gtk do that?
     * @param name
     * @param allowQuotes
     */
    private transformNumericName;
    /**
     * Replaces "@any_property" with "`any_property`"
     * @param description E.g. "Creates a binding between @source_property on @source and @target_property on @target."
     * @returns E.g. "Creates a binding between `source_property` on `source` and `target_property` on `target`."
     */
    private transformGirDocHighlights;
    /**
     * Replaces:
     * |[<!-- language="C" -->
     *   g_object_notify_by_pspec (self, properties[PROP_FOO]);
     * ]|
     *
     * with
     * ```c
     *   g_object_notify_by_pspec (self, properties[PROP_FOO]);
     * ```
     *
     * @param description
     */
    private transformGirDocCodeBlocks;
    /**
     * Transforms the documentation text to markdown
     * TODO: Transform references to link tags: https://tsdoc.org/pages/tags/link/
     * @param text
     * @returns
     */
    transformGirDocText(text: string): string;
    /**
     * Transforms the tsDoc tag <text> like `@param name <text>`
     * @param text
     * @returns
     */
    transformGirDocTagText(text: string): string;
    transformImportName(packageName: string): string;
}
