Progressive Identifiers
Published 📅: ....
Last modified 📝: ....
Location 📍: Boston, MA
Share this snippet on BlueskySee discussion on Bluesky
This is a quick and small snippet to generate IDs within JavaScript, and then show a user friendly variant of the ID - similar to change ids within Jujutsu!
class ProgressiveIdManager {
rawIds = new Set();
betterIds = new Map();
constructor(generateId = crypto.randomUUID.bind(crypto)) {
this._generateId = generateId;
}
getProgressiveId(rawId) {
let index = 1;
do {
let betterId = id.slice(0, index);
if (!this.betterIds.has(betterId)) {
betterIds.set(betterId, rawId);
return betterId;
}
index++;
} while (index < id.length)
// fallback to the original id
return rawId;
}
generate() {
let rawId = this._generateId();
if (rawIds.has(rawId)) {
throw new Error(`Generated duplicate id: ${rawId} - this should never happen!`);
}
rawIds.add(rawId);
let progressiveId = this.getProgressiveId(rawId);
return [progressiveId, rawId];
}
}
let manager = new ProgressiveIdManager();
let [id] = manager.generate();
let [anotherId] = manager.generate();
Tags:
Loading...