export function createLatchedDraftState(allowedKeys) { const allowed = new Set(allowedKeys); const modified = new Set(); return Object.freeze({ mark(key) { if (!allowed.has(key)) throw new Error(`Unknown draft field: ${key}`); const wasModified = modified.has(key); modified.add(key); return !wasModified; }, clear() { modified.clear(); }, has(key) { return modified.has(key); }, get dirty() { return modified.size > 0; }, keys() { return [...modified]; }, }); }