/**
 * @typedef {import("@helios-lang/compiler-utils").Site} Site
 * @typedef {import("@helios-lang/ir").SourceMappedStringI} SourceMappedStringI
 * @typedef {import("@helios-lang/uplc").UplcData} UplcData
 * @typedef {import("../codegen/index.js").Definitions} Definitions
 * @typedef {import("../typecheck/index.js").DataType} DataType
 * @typedef {import("../typecheck/index.js").ScriptTypes} ScriptTypes
 * @typedef {import("../typecheck/index.js").Type} Type
 * @typedef {import("../typecheck/index.js").TypeSchema} TypeSchema
 */
/**
 * @typedef {{
 *   name: string
 *   purpose: string
 *   currentScriptIndex: number | undefined
 *   mainArgTypes: DataType[]
 *   mainFunc: FuncStatement
 *   moduleDependencies: string[]
 *   mainImportedModules: Module[]
 *   mainModule: MainModule
 *   userTypes: Record<string, Record<string, DataType>>
 *   paramTypes: Record<string, DataType>
 *   paramsDetails(): Record<string, string>
 *   requiredParams: Set<string>
 *   changeParam(name: string, data: UplcData): boolean
 *   evalTypes(scriptTypes: ScriptTypes): void
 *   toIR(ctx: ToIRContext, extra?: Definitions | undefined): SourceMappedStringI
 *   toString(): string
 * }} EntryPoint
 */
export class EntryPointImpl {
    /**
     * @param {ModuleCollection} modules
     */
    constructor(modules: ModuleCollection);
    /**
     * @protected
     * @type {ModuleCollection}
     */
    protected modules: ModuleCollection;
    /**
     * Used to retrieve current script index
     * @protected
     * @type {GlobalScope | undefined}
     */
    protected globalScope: GlobalScope | undefined;
    /**
     * @private
     * @type {TopScope | undefined}
     */
    private _topScope;
    /**
     * @type {number | undefined}
     */
    get currentScriptIndex(): number | undefined;
    /**
     * @type {string}
     */
    get name(): string;
    /**
     * @type {Record<string, DataType>}
     */
    get paramTypes(): Record<string, import("../typecheck/common.js").DataType>;
    /**
     * @protected
     * @type {[Statement, boolean][]} - boolean value marks if statement is import or not
     */
    protected get allStatements(): [Statement, boolean][];
    /**
     * @type {Record<string, Record<string, DataType>>}
     */
    get userTypes(): Record<string, Record<string, import("../typecheck/common.js").DataType>>;
    /**
     * @protected
     * @type {string[]}
     */
    protected get mainArgNames(): string[];
    /**
     * @type {DataType[]}
     */
    get mainArgTypes(): import("../typecheck/common.js").DataType[];
    /**
     * @type {FuncStatement}
     */
    get mainFunc(): FuncStatement;
    /**
     * @type {Module[]}
     */
    get mainImportedModules(): Module[];
    /**
     * @type {MainModule}
     */
    get mainModule(): MainModule;
    /**
     * @protected
     * @type {string}
     */
    protected get mainPath(): string;
    /**
     * @protected
     * @type {Site}
     */
    protected get mainRetExprSite(): import("@helios-lang/compiler-utils").Site;
    /**
     * @protected
     * @type {Statement[]}
     */
    protected get mainStatements(): Statement[];
    /**
     * @type {string[]}
     */
    get moduleDependencies(): string[];
    /**
     * Change the literal value of a const statements
     * @param {string} name
     * @param {UplcData} data
     * @returns {boolean} - returns false if not found
     */
    changeParam(name: string, data: UplcData): boolean;
    /**
     * Presents all the parameter values as an object with keys mapping the parameter names
     * to Helios declarations for each const statement, with their current settings
     * @returns {Record<string, string>}
     * @public
     */
    public paramsDetails(): Record<string, string>;
    /**
     * @returns {string}
     */
    toString(): string;
    /**
     * @protected
     * @param {SourceMappedStringI} ir
     * @param {Definitions} definitions
     * @returns {Set<string>}
     */
    protected collectAllUsed(ir: SourceMappedStringI, definitions: Definitions): Set<string>;
    /**
     * @protected
     * @param {GlobalScope} globalScope
     */
    protected evalTypesInternal(globalScope: GlobalScope): void;
    /**
     * @protected
     * @param {string} name
     * @returns {ConstStatement | undefined}
     */
    protected findConstStatement(name: string): ConstStatement | undefined;
    /**
     * Non-positional named parameters
     * @protected
     * @param {ToIRContext} ctx
     * @param {SourceMappedStringI} ir
     * @returns {Set<string>}
     */
    protected getRequiredParametersInternal(ctx: ToIRContext, ir: SourceMappedStringI): Set<string>;
    /**
     * @protected
     * @param {(name: string, statement: ConstStatement) => void} callback
     */
    protected loopConstStatements(callback: (name: string, statement: ConstStatement) => void): void;
    /**
     * @protected
     * @param {ToIRContext} ctx
     * @param {SourceMappedStringI} ir
     * @param {Definitions | undefined} extra
     * @returns {SourceMappedStringI}
     */
    protected wrapEntryPoint(ctx: ToIRContext, ir: SourceMappedStringI, extra?: Definitions | undefined): SourceMappedStringI;
}
export type Site = import("@helios-lang/compiler-utils").Site;
export type SourceMappedStringI = import("@helios-lang/ir").SourceMappedStringI;
export type UplcData = import("@helios-lang/uplc").UplcData;
export type Definitions = import("../codegen/index.js").Definitions;
export type DataType = import("../typecheck/index.js").DataType;
export type ScriptTypes = import("../typecheck/index.js").ScriptTypes;
export type Type = import("../typecheck/index.js").Type;
export type TypeSchema = import("../typecheck/index.js").TypeSchema;
export type EntryPoint = {
    name: string;
    purpose: string;
    currentScriptIndex: number | undefined;
    mainArgTypes: DataType[];
    mainFunc: FuncStatement;
    moduleDependencies: string[];
    mainImportedModules: Module[];
    mainModule: MainModule;
    userTypes: Record<string, Record<string, DataType>>;
    paramTypes: Record<string, DataType>;
    paramsDetails(): Record<string, string>;
    requiredParams: Set<string>;
    changeParam(name: string, data: UplcData): boolean;
    evalTypes(scriptTypes: ScriptTypes): void;
    toIR(ctx: ToIRContext, extra?: Definitions | undefined): SourceMappedStringI;
    toString(): string;
};
import { ModuleCollection } from "./ModuleCollection.js";
import { GlobalScope } from "../scopes/index.js";
import { Statement } from "../statements/index.js";
import { FuncStatement } from "../statements/index.js";
import { Module } from "./Module.js";
import { MainModule } from "./MainModule.js";
import { ConstStatement } from "../statements/index.js";
import { ToIRContext } from "../codegen/index.js";
//# sourceMappingURL=EntryPoint.d.ts.map