export function safeEntryName(value){
 if(typeof value!=='string'||value.length<1||value.length>160)throw new Error('Имя записи: от 1 до 160 символов.');
 if(value!==value.trim()||value.startsWith('/')||value.includes('\\')||/[:\u0000-\u001f\u007f]/u.test(value))throw new Error('Нужен относительный путь с /, без диска, обратной косой черты и управляющих символов.');
 const parts=value.split('/');if(parts.some(p=>!p||p==='.'||p==='..'||/[. ]$/.test(p)||/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i.test(p)))throw new Error('Пустые сегменты, . и .., зарезервированные имена и пробел в конце запрещены.');
 return value;
}
export function validateOptions(input){
 if(!input||typeof input!=='object'||Array.isArray(input)||Object.keys(input).some(x=>!['scene','variant'].includes(x)))throw new Error('Разрешены только scene и variant.');
 if(typeof input.scene!=='string'||typeof input.variant!=='string')throw new Error('scene и variant должны быть строками.');return input;
}
