First build

This commit is contained in:
olcxja 2026-09-25 17:09:38 +02:00
commit fd773f5832
954 changed files with 305115 additions and 2 deletions

78
src/prefixes.js Normal file
View file

@ -0,0 +1,78 @@
'use strict'
const path = require('path')
const fs = require('fs')
const { DIRS, readJson, writeJson } = require('./paths')
const REGISTRY = path.join(DIRS.DATA, 'prefixes.json')
const MAIN = 'Main'
function seed() {
const defs = readJson(REGISTRY, null)
if (!defs || !Array.isArray(defs.prefixes) || !defs.prefixes.length) {
const seeded = { default: MAIN, prefixes: [{ name: MAIN, created: Date.now(), locked: true }] }
if (!fs.existsSync(prefixPath(MAIN))) fs.mkdirSync(prefixPath(MAIN), { recursive: true })
writeJson(REGISTRY, seeded)
}
}
function listPrefixes() {
seed()
return readJson(REGISTRY, { default: MAIN, prefixes: [] })
}
function savePrefixes(defs) {
writeJson(REGISTRY, defs)
}
function normalizeName(name) {
return String(name || '').trim().replace(/[^\w .-]/g, '').replace(/\s+/g, ' ')
}
function prefixPath(name) {
return path.join(DIRS.PREFIXES, name)
}
function prefixExists(name) {
try {
fs.accessSync(prefixPath(name))
return true
} catch {
return false
}
}
function createPrefix(name) {
const clean = normalizeName(name)
if (!clean) return { ok: false, error: 'invalidName' }
if (clean.toLowerCase() === MAIN.toLowerCase()) return { ok: false, error: 'alreadyExists' }
if (fs.existsSync(prefixPath(clean))) return { ok: false, error: 'alreadyExists' }
fs.mkdirSync(prefixPath(clean), { recursive: true })
const defs = listPrefixes()
defs.prefixes.push({ name: clean, created: Date.now() })
if (!defs.prefixes.some(p => p.name === defs.default)) defs.default = clean
savePrefixes(defs)
return { ok: true, name: clean }
}
function deletePrefix(name) {
if (String(name).toLowerCase() === MAIN.toLowerCase()) return { ok: false, error: 'isMain' }
const defs = listPrefixes()
defs.prefixes = defs.prefixes.filter(p => p.name !== name)
if (defs.default === name) defs.default = MAIN
savePrefixes(defs)
try {
fs.rmSync(prefixPath(name), { recursive: true, force: true })
} catch {}
return { ok: true }
}
function setDefaultPrefix(name) {
const defs = listPrefixes()
if (name && !defs.prefixes.some(p => p.name === name)) return { ok: false, error: 'notFound' }
defs.default = name || ''
savePrefixes(defs)
return { ok: true }
}
module.exports = { listPrefixes, createPrefix, deletePrefix, setDefaultPrefix, prefixPath, prefixExists, normalizeName, MAIN }