/** * @param {string | null | undefined} a * @param {string | null | undefined} b * @param {string=} digits * @return {string} */ export function generateKeyBetween(a: string | null | undefined, b: string | null | undefined, digits?: string | undefined): string; /** * same preconditions as generateKeysBetween. * n >= 0. * Returns an array of n distinct keys in sorted order. * If a and b are both null, returns [a0, a1, ...] * If one or the other is null, returns consecutive "integer" * keys. Otherwise, returns relatively short keys between * a and b. * @param {string | null | undefined} a * @param {string | null | undefined} b * @param {number} n * @param {string} digits * @return {string[]} */ export function generateNKeysBetween(a: string | null | undefined, b: string | null | undefined, n: number, digits?: string): string[]; /** * THIS FILE IS BASED ON: * https://github.com/rocicorp/fractional-indexing/blob/main/src/index.js * * MODIFIED FOR PAYLOAD CMS: * - Changed the integer part encoding to use only digits for "small" keys and * only lowercase letters for "large" keys, ensuring consistent ordering * across databases with different collations. * * - Original algorithm used A-Z (uppercase) for "smaller" integers and a-z (lowercase) * for "larger" integers, relying on ASCII ordering where 'Z' < 'a'. * * - Some databases (e.g., PostgreSQL with default collation) use case-insensitive * comparison, treating 'Z' as 'z', which breaks the ordering. * * - New encoding: * - Uses digits '0'-'9' for "small" integers (10 values, lengths 11 down to 2) * - Uses lowercase 'a'-'z' for "large" integers (26 values, lengths 2 up to 27) * - Digits ALWAYS sort before letters in both ASCII and case-insensitive orderings. * * - Ordering: '0...' < '1...' < ... < '9..' < 'a.' < 'b..' < ... < 'z...' * * BACKWARD COMPATIBILITY: * - Existing keys starting with lowercase 'a'-'z' remain valid and work correctly. * - Keys starting with uppercase 'A'-'Z' (from the old algorithm) will still be * parsed for backward compatibility, but they may sort incorrectly in * case-insensitive databases. Consider running a migration to convert them. */ export const BASE_36_DIGITS: "0123456789abcdefghijklmnopqrstuvwxyz"; //# sourceMappingURL=fractional-indexing.d.ts.map