import { JsVariableConfig } from '../configs/VariableConfig';
import { JsCodeBuilder } from '../utils/CodeBuilder';
import { BaseJsNodeType } from '../../_Base';
import { TypedAssembler } from '../../../utils/shaders/BaseAssembler';
import { ShaderName } from '../../../utils/shaders/ShaderName';
import { OutputJsNode } from '../../Output';
import { GlobalsJsNode } from '../../Globals';
import { AttributeJsNode } from '../../Attribute';
import { AssemblerControllerNode } from '../Controller';
import { LinesController } from '../utils/LinesController';
import { NodeContext } from '../../../../poly/NodeContext';
import { JsLineType } from '../utils/LineType';
import { JsConnectionPoint, JsConnectionPointType } from '../../../utils/io/connections/Js';
import { NodeTypeMap } from '../../../../containers/utils/ContainerMap';
declare type StringArrayByShaderName = Map<ShaderName, string[]>;
export declare class BaseJsFunctionAssembler extends TypedAssembler<NodeContext.JS> {
    protected _js_parent_node: AssemblerControllerNode;
    protected _shaders_by_name: Map<ShaderName, string>;
    protected _lines: StringArrayByShaderName;
    protected _code_builder: JsCodeBuilder | undefined;
    private _param_config_owner;
    protected _root_nodes: BaseJsNodeType[];
    protected _leaf_nodes: BaseJsNodeType[];
    private _uniforms_time_dependent;
    private _variable_configs;
    constructor(_js_parent_node: AssemblerControllerNode);
    get shader_names(): never[];
    input_names_for_shader_name(node: NodeTypeMap[NodeContext.JS], shader_name: ShaderName): string[];
    compile(): Promise<void>;
    compile_allowed(): boolean;
    protected _build_lines(): void;
    set_root_nodes(root_nodes: BaseJsNodeType[]): void;
    root_nodes_by_shader_name(shader_name: ShaderName): BaseJsNodeType[];
    leaf_nodes(): BaseJsNodeType[];
    set_node_lines_globals(globals_node: GlobalsJsNode, lines_controller: LinesController): void;
    set_node_lines_output(output_node: OutputJsNode, lines_controller: LinesController): void;
    set_node_lines_attribute(attribute_node: AttributeJsNode, lines_controller: LinesController): void;
    get code_builder(): JsCodeBuilder;
    build_code_from_nodes(root_nodes: BaseJsNodeType[]): Promise<void>;
    allow_new_param_configs(): void;
    disallow_new_param_configs(): void;
    builder_param_configs(): readonly import("../utils/ParamConfig").JsParamConfig<import("../../../../poly/ParamType").ParamType>[];
    builder_lines(line_type: JsLineType): string[] | undefined;
    all_builder_lines(): Map<ShaderName, Map<JsLineType, string[]>>;
    param_configs(): readonly import("../utils/ParamConfig").JsParamConfig<import("../../../../poly/ParamType").ParamType>[];
    set_param_configs_owner(param_config_owner: JsCodeBuilder): void;
    static add_output_inputs(output_child: OutputJsNode): void;
    add_output_inputs(output_child: OutputJsNode): void;
    static create_globals_node_output_connections(): (JsConnectionPoint<JsConnectionPointType.VEC3> | JsConnectionPoint<JsConnectionPointType.VEC2> | JsConnectionPoint<JsConnectionPointType.FLOAT>)[];
    create_globals_node_output_connections(): (JsConnectionPoint<JsConnectionPointType.VEC3> | JsConnectionPoint<JsConnectionPointType.VEC2> | JsConnectionPoint<JsConnectionPointType.FLOAT>)[];
    add_globals_outputs(globals_node: GlobalsJsNode): void;
    allow_attribute_exports(): boolean;
    reset_configs(): void;
    variable_configs(): JsVariableConfig[];
    set_variable_configs(variable_configs: JsVariableConfig[]): void;
    variable_config(name: string): JsVariableConfig;
    static create_variable_configs(): JsVariableConfig[];
    create_variable_configs(): JsVariableConfig[];
    protected _reset_variable_configs(): void;
    protected _reset_uniforms_time_dependency(): void;
    set_uniforms_time_dependent(): void;
    uniforms_time_dependent(): boolean;
}
export {};
