import type { PresentArray } from '@glimmer/interfaces';
import type { LocatedWithOptionalSpan, LocatedWithSpan } from './location';
import type { SourceOffset } from './span';
import { SourceSpan } from './span';
export type HasSpan = SourceSpan | LocatedWithSpan | PresentArray<LocatedWithSpan>;
export type MaybeHasSpan = SourceSpan | LocatedWithOptionalSpan | LocatedWithOptionalSpan[] | null;
export type ToSourceOffset = number | SourceOffset;
export declare class SpanList {
    static range(span: PresentArray<HasSourceSpan>): SourceSpan;
    static range(span: HasSourceSpan[], fallback: SourceSpan): SourceSpan;
    _span: SourceSpan[];
    constructor(span?: SourceSpan[]);
    add(offset: SourceSpan): void;
    getRangeOffset(fallback: SourceSpan): SourceSpan;
}
export type HasSourceSpan = {
    loc: SourceSpan;
} | SourceSpan | [HasSourceSpan, ...HasSourceSpan[]];
export declare function loc(span: HasSourceSpan): SourceSpan;
export type MaybeHasSourceSpan = {
    loc: SourceSpan;
} | SourceSpan | MaybeHasSourceSpan[];
export declare function hasSpan(span: MaybeHasSourceSpan): span is HasSourceSpan;
export declare function maybeLoc(location: MaybeHasSourceSpan, fallback: SourceSpan): SourceSpan;
