fix: Prevent collisions when generating local ids

This commit is contained in:
Maksim Eltyshev
2026-02-11 11:59:57 +01:00
parent 0db1a5cf0e
commit 16b228e54e
2 changed files with 13 additions and 3 deletions

View File

@@ -3,6 +3,16 @@
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
export const createLocalId = () => `local:${Date.now()}`;
let lastTimestamp = 0;
let sequence = 0;
export const createLocalId = () => {
const timestamp = Date.now();
sequence = timestamp <= lastTimestamp ? sequence + 1 : 0;
lastTimestamp = timestamp;
return `local:${timestamp}-${String(sequence).padStart(4, '0')}`;
};
export const isLocalId = (id) => id.startsWith('local:');

View File

@@ -2,10 +2,10 @@ import { isLocalId } from './local-id';
describe('isLocalId', () => {
test('is valid', () => {
expect(isLocalId('local:1234567890')).toBeTruthy();
expect(isLocalId('local:1234567890-0000')).toBeTruthy();
});
test('is invalid', () => {
expect(isLocalId('1234567890')).toBeFalsy();
expect(isLocalId('1234567890-0000')).toBeFalsy();
});
});