import { type IDestroyable } from 'destroyable';
import type { string_name } from '../types/typeAliases';
import type { TODO_string } from './organization/TODO_string';
/**
 * @@@
 */
export type Registered = {
    /**
     * @@@
     */
    readonly packageName: TODO_string;
    /**
     * @@@
     */
    readonly className: TODO_string;
};
/**
 * @@@
 */
export type Registration = Registered & IDestroyable & {
    /**
     * @@@
     */
    readonly registerName: string_name;
};
/**
 * Register is @@@
 *
 * Note: `$` is used to indicate that this function is not a pure function - it accesses and adds variables in global scope.
 *
 * @private internal utility, exported are only signleton instances of this class
 */
export declare class $Register<TRegistered extends Registered> {
    private readonly registerName;
    private readonly storage;
    constructor(registerName: string_name);
    list(): ReadonlyArray<TRegistered>;
    register(registered: TRegistered): Registration;
}
