import { BaseNodeClass, BaseNodeType } from './nodes/_Base';
import { PolyScene } from './scene/PolyScene';
import { RenderersController } from './poly/RenderersController';
import { PolyCanvasRegister } from './poly/PolyCanvasRegister';
import { PolyLibsController } from './poly/PolyLibsController';
import { NodeContext } from './poly/NodeContext';
import { BaseCoreLogger } from '../core/logger/Base';
import { BaseOperation } from './operations/_Base';
import { PolyDictionary } from '../types/GlobalTypes';
import { BlobsController } from './poly/BlobsController';
import { AssetUrlsController } from './poly/AssetUrlsController';
import { PolyPerformanceformanceController } from './poly/PerformanceController';
import { ScenesRegister } from './poly/ScenesRegister';
import { PolyThirdPartyController } from './poly/ThirdPartyController';
import { PolyOnObjectsAddRemoveHooksController } from './poly/PolyOnObjectsAddRemoveHooksController';
import { PolyOnSceneUpdatedHooksController } from './poly/PolyOnSceneUpdatedHooksController';
import { PolySpecializedChildrenController } from './poly/PolySpecializedChildrenController';
import { Camera } from 'three';
import { PluginsRegister, WrapConfigurePolygonjsCallback } from './poly/registers/plugins/PluginsRegister';
import { PolyCamerasRegister, ViewerCreateCallback } from './poly/registers/cameras/PolyCamerasRegister';
import { BaseModule } from './poly/registers/modules/_BaseModule';
import { ModuleName } from './poly/registers/modules/Common';
import { DynamicModulesRegister } from './poly/registers/modules/DynamicModulesRegister';
import { ExpressionRegister } from './poly/registers/expressions/ExpressionRegister';
import { AssemblersRegister } from './poly/registers/assemblers/AssemblersRegistry';
import { NodesRegister, NodeRegisterOptions, OperationRegisterOptions, BaseNodeConstructor, OperationsRegister } from './poly/registers/nodes/NodesRegister';
import { PolyPluginInterface } from './poly/registers/plugins/Plugin';
import { NamedFunctionRegister } from './poly/registers/functions/FunctionsRegister';
import { NamedFunctionRegisterOptions } from './poly/registers/functions/_BaseRegister';
import { ModuleRegisterOptions } from './poly/registers/modules/_BaseRegister';
import { BaseNamedFunction } from './functions/_Base';
declare global {
    var __POLYGONJS_POLY_INSTANCE__: PolyEngine;
}
export declare class PolyEngine {
    readonly renderersController: RenderersController;
    readonly canvasRegister: PolyCanvasRegister;
    readonly scenesRegister: ScenesRegister;
    readonly nodesRegister: NodesRegister;
    readonly operationsRegister: OperationsRegister;
    readonly expressionsRegister: ExpressionRegister;
    readonly assemblersRegister: AssemblersRegister;
    readonly pluginsRegister: PluginsRegister;
    readonly camerasRegister: PolyCamerasRegister;
    readonly modulesRegister: DynamicModulesRegister;
    readonly namedFunctionsRegister: NamedFunctionRegister;
    readonly blobs: BlobsController;
    readonly assetUrls: AssetUrlsController;
    readonly thirdParty: PolyThirdPartyController;
    readonly onObjectsAddRemoveHooks: PolyOnObjectsAddRemoveHooksController;
    readonly onSceneUpdatedHooks: PolyOnSceneUpdatedHooksController;
    readonly specializedChildren: PolySpecializedChildrenController;
    readonly performance: PolyPerformanceformanceController;
    scenesByUuid: PolyDictionary<PolyScene>;
    _env: string | undefined;
    private _playerMode;
    private _logger;
    static _instance_(): PolyEngine;
    private constructor();
    version(): string;
    setPlayerMode(mode: boolean): void;
    playerMode(): boolean;
    dispose(): void;
    registerNode(node: BaseNodeConstructor, tab_menu_category?: string | string[], options?: NodeRegisterOptions): void;
    registerOperation(operation: typeof BaseOperation, options?: OperationRegisterOptions): void;
    registerNamedFunction(namedFunction: typeof BaseNamedFunction, options?: NamedFunctionRegisterOptions): void;
    registerCamera<C extends Camera>(cameraClass: any, viewerCreateCallback: ViewerCreateCallback<C>): void;
    registerCameraNodeType(nodeType: string): void;
    registerPlugin(plugin: PolyPluginInterface): void;
    wrapConfigurePolygonjs(callback: WrapConfigurePolygonjsCallback): void;
    registeredNodes(parentNode: BaseNodeType): PolyDictionary<typeof BaseNodeClass>;
    registeredOperation(parent_context: NodeContext, operation_type: string): typeof BaseOperation | undefined;
    registerModule(module: BaseModule<ModuleName>, options?: ModuleRegisterOptions): void;
    inWorkerThread(): boolean;
    private _libs_controller;
    get libs(): PolyLibsController;
    setEnv(env: string): void;
    env(): string | undefined;
    setLogger(logger: BaseCoreLogger | null): void;
    logger(): BaseCoreLogger | null;
    log(message?: any, ...optionalParams: any[]): void;
    warn(message?: any, ...optionalParams: any[]): void;
    error(message?: any, ...optionalParams: any[]): void;
}
export declare const Poly: PolyEngine;
