2fa20da94d
- Main: license service, IPC, router; закрытие окон; yauzl закрытие zip (EMFILE), zipRead тест - Editor: стабильный projectState без мигания, логотип и меню, строки UI, LayoutShell overlay - Control: ластик для всех типов эффектов, затухание/нарастание музыки при смене сцены - Сборка: vite, build/dev scripts, obfuscate-main и build-env скрипты с тестами; package.json Made-with: Cursor
19 lines
484 B
TypeScript
19 lines
484 B
TypeScript
import { randomUUID } from 'node:crypto';
|
|
import fs from 'node:fs';
|
|
|
|
import { deviceIdPath } from './paths';
|
|
|
|
export function getOrCreateDeviceId(userData: string): string {
|
|
const p = deviceIdPath(userData);
|
|
try {
|
|
const existing = fs.readFileSync(p, 'utf8').trim();
|
|
if (existing.length >= 8) return existing;
|
|
} catch {
|
|
/* empty */
|
|
}
|
|
const id = randomUUID();
|
|
fs.mkdirSync(userData, { recursive: true });
|
|
fs.writeFileSync(p, `${id}\n`, 'utf8');
|
|
return id;
|
|
}
|