import { GFF3Comment, GFF3Directive, GFF3Feature, GFF3Sequence, GFF3Item } from './util';
/** Parser options */
export interface ParseOptions {
    /** Whether to resolve references to derives from features */
    disableDerivesFromReferences?: boolean;
    /** Whether to parse features, default true */
    parseFeatures?: boolean;
    /** Whether to parse directives, default false */
    parseDirectives?: boolean;
    /** Whether to parse comments, default false */
    parseComments?: boolean;
    /** Whether to parse sequences, default true */
    parseSequences?: boolean;
    /** Maximum number of GFF3 lines to buffer, default Infinity */
    bufferSize?: number;
    /** What to do when a feature can't be parsed, defaults to throwing an error */
    errorCallback?(errorMessage: string): void;
}
/**
 * Parse a stream of text data into a stream of feature, directive, comment,
 * an sequence objects.
 */
export declare class GFFTransformer<O extends ParseOptions, T = O extends {
    parseFeatures: true;
} ? O extends {
    parseSequences: true;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item : GFF3Feature | GFF3Sequence | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Sequence | GFF3Comment : GFF3Feature | GFF3Sequence : O extends {
    parseSequences: false;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Directive | GFF3Comment : GFF3Feature | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Comment : GFF3Feature : O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item : GFF3Feature | GFF3Sequence | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Sequence | GFF3Comment : GFF3Feature | GFF3Sequence : O extends {
    parseFeatures: false;
} ? O extends {
    parseSequences: true;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Sequence | GFF3Directive | GFF3Comment : GFF3Sequence | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Sequence | GFF3Comment : GFF3Sequence : O extends {
    parseSequences: false;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Directive | GFF3Comment : GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Comment : never : O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Sequence | GFF3Directive | GFF3Comment : GFF3Sequence | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Sequence | GFF3Comment : GFF3Sequence : O extends {
    parseSequences: true;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item : GFF3Feature | GFF3Sequence | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Sequence | GFF3Comment : GFF3Feature | GFF3Sequence : O extends {
    parseSequences: false;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Directive | GFF3Comment : GFF3Feature | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Comment : GFF3Feature : O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item : GFF3Feature | GFF3Sequence | GFF3Directive : O extends {
    parseComments: true;
} ? GFF3Feature | GFF3Sequence | GFF3Comment : GFF3Feature | GFF3Sequence> implements Transformer<Uint8Array, T> {
    private decoder;
    private parser;
    private lastString;
    private parseFeatures;
    private parseDirectives;
    private parseComments;
    private parseSequences;
    private errorCallback;
    /**
     * Options for how the text stream is parsed
     * @param options - Parser options
     */
    constructor(options?: O);
    private makeCallbacks;
    private emitErrorMessage;
    transform(chunk: Uint8Array, controller: TransformStreamDefaultController<T>): void;
    flush(controller: TransformStreamDefaultController<T>): void;
}
/**
 * Synchronously parse a string containing GFF3 and return an array of the
 * parsed items.
 *
 * @param str - GFF3 string
 * @param inputOptions - Parsing options
 * @returns array of parsed features, directives, comments and/or sequences
 */
export declare function parseStringSync<O extends ParseOptions>(str: string, inputOptions?: O): O extends {
    parseFeatures: true;
} ? O extends {
    parseSequences: true;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item[] : (GFF3Feature | GFF3Sequence | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Sequence | GFF3Comment)[] : (GFF3Feature | GFF3Sequence)[] : O extends {
    parseSequences: false;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Directive | GFF3Comment)[] : (GFF3Feature | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Comment)[] : GFF3Feature[] : O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item[] : (GFF3Feature | GFF3Sequence | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Sequence | GFF3Comment)[] : (GFF3Feature | GFF3Sequence)[] : O extends {
    parseFeatures: false;
} ? O extends {
    parseSequences: true;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? (GFF3Sequence | GFF3Directive | GFF3Comment)[] : (GFF3Sequence | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Sequence | GFF3Comment)[] : GFF3Sequence[] : O extends {
    parseSequences: false;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? (GFF3Directive | GFF3Comment)[] : GFF3Directive[] : O extends {
    parseComments: true;
} ? GFF3Comment[] : never[] : O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? (GFF3Sequence | GFF3Directive | GFF3Comment)[] : (GFF3Sequence | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Sequence | GFF3Comment)[] : GFF3Sequence[] : O extends {
    parseSequences: true;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item[] : (GFF3Feature | GFF3Sequence | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Sequence | GFF3Comment)[] : (GFF3Feature | GFF3Sequence)[] : O extends {
    parseSequences: false;
} ? O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Directive | GFF3Comment)[] : (GFF3Feature | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Comment)[] : GFF3Feature[] : O extends {
    parseDirectives: true;
} ? O extends {
    parseComments: true;
} ? GFF3Item[] : (GFF3Feature | GFF3Sequence | GFF3Directive)[] : O extends {
    parseComments: true;
} ? (GFF3Feature | GFF3Sequence | GFF3Comment)[] : (GFF3Feature | GFF3Sequence)[];
/**
 * Format an array of GFF3 items (features,directives,comments) into string of
 * GFF3. Does not insert synchronization (###) marks.
 *
 * @param items - Array of features, directives, comments and/or sequences
 * @returns the formatted GFF3
 */
export declare function formatSync(items: GFF3Item[]): string;
/** Formatter options */
export interface FormatOptions {
    /**
     * The minimum number of lines to emit between sync (###) directives, default
     * 100
     */
    minSyncLines?: number;
    /**
     * Whether to insert a version directive at the beginning of a formatted
     * stream if one does not exist already, default true
     */
    insertVersionDirective?: boolean;
}
/**
 * Transform a stream of features, directives, comments and/or sequences into a
 * stream of GFF3 text.
 *
 * Inserts synchronization (###) marks automatically.
 */
export declare class GFFFormattingTransformer implements Transformer<GFF3Item, string> {
    linesSinceLastSyncMark: number;
    haveWeEmittedData: boolean;
    fastaMode: boolean;
    minLinesBetweenSyncMarks: number;
    insertVersionDirective: boolean;
    /**
     * Options for how the output text stream is formatted
     * @param options - Formatter options
     */
    constructor(options?: FormatOptions);
    transform(chunk: GFF3Item, controller: TransformStreamDefaultController<string>): void;
}
