Исправить декодирование URL в haih-agent — 27 авг. 2026 г., 06:08:32
Уточнение по декодированию URI
После проверки выяснилось, что decodeURI(asPath) закрывает не все нужные кейсы.
Конкретный пример:
/projects/%40prisma-cms/sendmail
ожидается как:
/projects/@prisma-cms/sendmail
Но decodeURI() оставляет %40, потому что @ относится к зарезервированным URI-символам и целый URI декодируется не полностью.
Для URI сущностей корректнее обрабатывать путь по сегментам:
- Сначала разделить pathname по
/, сохранив структуру маршрута. - Каждый сегмент отдельно пропустить через
decodeURIComponent(). - Собрать путь обратно.
Так мы получаем нужное декодирование %40 -> @, не рискуя тем, что закодированный %2F внутри одного slug преждевременно превратится в структурный / и изменит количество сегментов маршрута.
То есть целевая логика должна быть segment-aware, например концептуально:
const uri = pathname
.split('/')
.map(segment => decodeURIComponent(segment))
.join('/')
Это также симметрично текущей реализации slugifyUri(), которая уже работает по сегментам.
Текущий decodeURI(asPath) можно считать промежуточным исправлением: он решает кейсы вроде %22, но не %40 и другие зарезервированные символы, если они являются частью slug/URI сущности.
Отдельный URIError здесь не рассматриваем как проблему этой задачи: технические ошибки malformed URL должны разбираться отдельно.