/**
 * Container that manages registrations of dependencies.
 * @template {Record<string, Types.Registration<any, any>>} TRegistrations
 * All registrations that have been made on this container.
 */
export class Container<TRegistrations extends Record<string, Types.Registration<any, any>>> {
    /**
     * Create a new container for managing dependencies. (Alias of `fluxject()`)
     * @returns {Container<{}>}
     */
    static create(): Container<{}>;
    /**
     * @protected
     * @param {TRegistrations} registrations
     */
    protected constructor();
    /**
     * Register a new set of dependencies to the container
     * @template {Record<string, Types.Registration<any, any>>} TNewRegistrations
     * The new registrations as inferred from the return type of the callback.
     * @param {(serviceBuilder: RegistrationBuilder) => TNewRegistrations} callback
     * The callback that will be used to register new services.
     * @returns {Container<TRegistrations & TNewRegistrations>}
     * A new container with the new registrations added.
     */
    register<TNewRegistrations extends Record<string, Types.Registration<any, any>>>(callback: (serviceBuilder: RegistrationBuilder) => TNewRegistrations): Container<TRegistrations & TNewRegistrations>;
    /**
     * Prepare the container for consumption.
     * @returns {Types.Widen<FluxjectHostServiceProvider<TRegistrations> & Types.InferInstanceTypes<TRegistrations, "singleton"|"transient">>}
     */
    prepare(): Types.Widen<FluxjectHostServiceProvider<TRegistrations> & Types.InferInstanceTypes<TRegistrations, "singleton" | "transient">>;
    #private;
}
import type * as Types from "./types.js";
import { RegistrationBuilder } from "./builder.js";
import { FluxjectHostServiceProvider } from "./provider.js";
