import cs from "coffeescript";
import { OptionPartial } from "./index.js";
type KeyScope = (typeof listRule)[number];
declare const listRule: readonly [
    "",
    "array",
    "call",
    "case",
    "catch",
    "class",
    "else",
    "finally",
    "for",
    "function",
    "if",
    "object",
    "parameter",
    "switch",
    "try",
    "while"
];
declare class Scope {
    #private;
    next: KeyScope;
    constructor(...args: Parameters<Scope["reload"]>);
    get last(): "" | "object" | "function" | "array" | "call" | "case" | "catch" | "class" | "else" | "finally" | "for" | "if" | "parameter" | "switch" | "try" | "while";
    get length(): number;
    get list(): ("" | "object" | "function" | "array" | "call" | "case" | "catch" | "class" | "else" | "finally" | "for" | "if" | "parameter" | "switch" | "try" | "while")[];
    at(n: number): KeyScope | undefined;
    isEquals(target: Scope | KeyScope[] | string[]): boolean;
    pop(): KeyScope;
    push(...args: KeyScope[]): number;
    reload(input?: Scope | KeyScope[]): void;
    shift(): KeyScope;
    slice(...args: Parameters<string[]["slice"]>): KeyScope[];
    unshift(...args: KeyScope[]): number;
}
declare const listType: readonly [
    "++",
    "--",
    ".",
    "await",
    "boolean",
    "bracket",
    "class",
    "compare",
    "edge",
    "error",
    "for",
    "for-in",
    "function",
    "identifier",
    "if",
    "logical-operator",
    "math",
    "native",
    "negative",
    "new-line",
    "number",
    "property",
    "prototype",
    "sign",
    "statement",
    "string",
    "super",
    "this",
    "try",
    "void",
    "while"
];
declare class Item {
    comment?: string[];
    scope: Scope;
    type: (typeof listType)[number];
    value: string;
    constructor(...args: [
        type?: Item["type"],
        value?: Item["value"],
        scope?: ConstructorParameters<typeof Scope>[0]
    ] | [
        Item
    ]);
    clone(): Item;
    is(type: (typeof listType)[number], value?: string): boolean;
}
declare class Content {
    #private;
    scope: Scope;
    constructor(scope: Scope);
    get last(): Item;
    get length(): number;
    get list(): Item[];
    at(n: number): Item | undefined;
    pop(): Item;
    push(...args: ConstructorParameters<typeof Item>): this;
    reload(list?: Item[]): this;
    shift(): Item;
    unshift(...args: ConstructorParameters<typeof Item>): this;
}
type Cache = {
    global: Set<string>;
};
type Context = {
    cache: Cache;
    content: Content;
    flag: Flag;
    indent: number;
    option: OptionPartial;
    scope: Scope;
    token: Token & {
        origin?: Token;
    };
    type: string;
    value: string;
};
type Flag = {
    isChangeIndexUsed: boolean;
    isFunctionIncluded: boolean;
};
type Token = ReturnType<typeof cs.compile>["tokens"][number];
type Result = {
    ast: Context["content"]["list"];
    content: string;
    raw: Context["token"][];
};
declare const main: (cont: string, option: Context["option"]) => Result;
type Context2 = Context;
declare const main$0: (ctx: Context2) => string;
declare const main$1: (ctx: Context) => void;
declare const main$2: (ctx: Context) => void;
declare const main$3: (ctx: Context) => void;
declare const _exports: string[];
declare const main$4: (ctx: Context) => void;
declare const main$5: (ctx: Context) => void;
declare const main$6: (ctx: Context) => void;
declare const main$7: (ctx: Context) => void;
declare const main$8: (ctx: Context) => void;
declare const main$9: (ctx: Context) => void;
declare const main$10: (ctx: Context, listFn: Set<string>) => void;
declare const main$11: (ctx: Context) => void;
declare const main$12: (ctx: Context) => void;
declare const main$13: (ctx: Context) => void;
declare const main$14: (ctx: Context) => void;
declare const main$15: (ctx: Context) => Set<string>;
declare const main$16: (ctx: Context) => void;
declare const main$17: (ctx: Context) => void;
declare const main$18: (ctx: Context) => void;
declare const main$19: (ctx: Context) => void;
declare const main$20: (ctx: Context) => void;
declare const main$21: (ctx: Context) => void;
declare const main$22: (setClass: Set<string>) => void;
declare const main$23: (ctx: Context) => Set<string>;
declare const main$24: (ctx: Context) => void;
declare const main$25: (ctx: Context) => void;
declare const main$26: (ctx: Context) => void;
declare const main$27: (ctx: Context) => void;
declare const main$28: (ctx: Context) => void;
declare const main$29: (ctx: Context) => boolean;
declare const main$30: (ctx: Context) => boolean;
declare const main$31: (ctx: Context) => boolean;
declare const main$32: (ctx: Context) => boolean;
declare const main$33: (ctx: Context) => boolean;
declare const main$34: (ctx: Context) => boolean;
declare const main$35: (ctx: Context) => boolean;
declare const main$36: (ctx: Context) => boolean;
declare const main$37: (ctx: Context) => boolean;
declare const main$38: (ctx: Context) => boolean;
declare const main$39: (ctx: Context) => boolean;
declare const main$40: (ctx: Context) => boolean;
declare const main$41: (ctx: Context) => boolean;
declare const main$42: (ctx: Context) => boolean;
declare const main$43: (ctx: Context) => boolean;
declare const main$44: (ctx: Context) => boolean;
declare const main$45: (ctx: Context) => boolean;
declare const main$46: (ctx: Context) => boolean;
declare const at: <T>(input: T[] | Record<string, T>, key: number | string) => T | undefined;
declare const main$47: (ctx: Context) => boolean;
declare const main$48: (ctx: Context) => boolean;
declare const main$49: (ctx: Context) => boolean;
declare const main$50: (ctx: Context) => boolean;
declare const main$51: (ctx: Context) => boolean;
declare const main$52: (ctx: Context) => boolean;
declare const main$53: (ctx: Context) => boolean;
declare const main$54: (ctx: Context) => boolean;
declare const main$55: (ctx: Context) => boolean;
declare const main$56: (ctx: Context) => boolean;
declare const main$57: (ast: Item[]) => void;
export { main as default };
