| // Copyright (C) 2023 The Android Open Source Project | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| import {v4} from 'uuid'; | |
| import {sqlNameSafe} from './string_utils'; | |
| export const uuidv4 = v4; | |
| /** | |
| * Get a SQL friendly UUID, or convert a pre-existing one. | |
| * @param uuid Optional: Pre-existing uuid to format. | |
| * @returns string The resulting uuid. | |
| */ | |
| export function uuidv4Sql(uuid?: string): string { | |
| const str = uuid ?? uuidv4(); | |
| return sqlNameSafe(str); | |
| } | |
| // URL and SQL safe alphabet: A-Z, a-z, 0-9, _ (63 characters) | |
| const ALPHABET = | |
| 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_'; | |
| /** | |
| * Generate a short unique ID suitable for column identifiers. | |
| * Prefixed with 'c' to ensure it's always a valid SQL identifier. | |
| * Uses 8 characters from a 63-char alphabet (~2^47.6 unique values). | |
| * @returns string A 9-character string starting with 'c'. | |
| */ | |
| export function shortUuid(): string { | |
| let result = 'c'; | |
| for (let i = 0; i < 8; i++) { | |
| result += ALPHABET[Math.floor(Math.random() * ALPHABET.length)]; | |
| } | |
| return result; | |
| } |