import { DestructuredFragment } from './@types/index.js';
/**
 * Base class for fragments.
 */
export default abstract class FragmentBase {
    readonly bits: number;
    /**
     * The current value of the fragment.
     */
    value: bigint;
    /**
     * The maximum value that can be represented by this fragment.
     *
     * maxValue is equal to `2 ** bits - 1`
     * @readonly
     */
    readonly maxValue: bigint;
    /**
     * The number of bits for left and right shifting.
     *
     * bitShift is equal to the number of bits on the right side
     */
    bitShift: bigint;
    /**
     * The bit mask used to isolate the fragment's bits from the snowflake.
     *
     * bitMask is equal to `maxValue << bitShift`
     */
    bitMask: bigint;
    /**
     * The hexadecimal representation of the bit mask as string.
     */
    bitMaskHex: string;
    /**
     * The fragment identifier.
     */
    identifier: string;
    /**
     * @param bits - The number of bits for the fragment.
     *
     * @throws `[BITS_INVALID_TYPE]` If bits is not a number.
     * @throws `[BITS_INVALID_RANGE]` If bits is less than 1
     */
    constructor(bits: number);
    /**
     * Returns the value for the fragment.
     *
     * @remarks
     * Do not use this method outside of a Snowflakify instance.
     * @internal
     */
    abstract getValue(): bigint;
    /**
     * Returns a destructured fragment.
     *
     * @remarks
     * Do not use this method outside of a Snowflakify instance.
     *
     * @param snowflake - The snowflake to destructure.
     *
     * @returns A destructured fragment object with the following properties:
     * - `identifier`: The identifier of the ID.
     * - `value`: The value of the fragment for that snowflake.
     * @internal
     */
    abstract destructure(snowflake: number | bigint | string): DestructuredFragment;
    /**
     * @internal
     */
    setBitShiftAndBitMask(bitsRightSide: number): void;
}
