data-home.mjs 1.3 KB

123456789101112131415161718192021222324
  1. import { existsSync, readFileSync } from 'node:fs'
  2. import { homedir } from 'node:os'
  3. import { join, resolve } from 'node:path'
  4. export const legacyDataHome = (userHome = homedir()) => join(userHome, '.hermes-yaoyao')
  5. export const defaultDataHome = (userHome = homedir()) => join(userHome, '.yaoyao')
  6. export function legacyUpdateActive(userHome = homedir()) {
  7. const old = legacyDataHome(userHome)
  8. try {
  9. const { pid } = JSON.parse(readFileSync(join(old, 'updates', 'active.lock'), 'utf8'))
  10. if (Number.isSafeInteger(pid) && pid > 0) {
  11. try { process.kill(pid, 0); return true } catch (error) { if (error.code !== 'ESRCH') return true }
  12. }
  13. } catch { /* No active updater. */ }
  14. return existsSync(join(old, 'updates', 'transition.json'))
  15. }
  16. /** Preserve explicit custom directories. Old official defaults migrate together. */
  17. export function resolveDataHome(value, { userHome = homedir(), preserveActiveUpdate = false } = {}) {
  18. const requested = resolve(value?.trim() || defaultDataHome(userHome))
  19. if (![legacyDataHome(userHome), defaultDataHome(userHome)].includes(requested)) return requested
  20. // An old updater must finish its transaction against the original directory.
  21. if (preserveActiveUpdate && legacyUpdateActive(userHome)) return legacyDataHome(userHome)
  22. return defaultDataHome(userHome)
  23. }