payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
52 lines • 2.33 kB
TypeScript
/**
* @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