Як Patreon перевів 11 000 файлів на TypeScript за 7 років: від ручної роботи до AI-агентів
Побачила цікаву статтю в інженерному блозі Patreon. Вони детально розібрали свій перехід з JavaScript на TypeScript: 11 тисяч файлів, понад 1 мільйон рядків коду і цілих 7 років роботи (з 2019 по початок

Цікаво те, як вони змінювали підходи до міграції. Спочатку вони просто увімкнули підтримку TS і дозволили командам переходити на нього добровільно, але спрацювало це не дуже. Без обов’язкової перевірки типів у CI та спільних базових типів TypeScript працював як звичайний автокомпліт. Кодова база швидко обросла технічним боргом, бо кожен розробник описував сутності по-своєму або просто не додавав типи.
Тому пізніше підхід змінили: тайпчек зробили обов’язковим на рівні CI, а ядро системи, включно з API-об’єктами, роутингом та аналітикою, системно типізували. Це вирішило проблему для нового коду, але залишилось понад 2000 файлів старого легасі ще з 2013 року. Ручна міграція одного такого файлу займала б від двох до чотирьох годин.
Частину простих компонентів вони автоматично перегнали через опенсорсну утиліту ts-migrate від Airbnb. Потім почали писати кастомні codemods за допомогою GPT-4 та Claude, які обробляли специфічні патерни в коді, з якими ts-migrate не міг впоратися. А для найскладнішого легасі розробили систему з вузькоспеціалізованих AI-агентів.
Один агент шукав конкретні патерни у коді (наприклад, усі нетипізовані Redux-редьюсери). Другий аналізував їх, підтягував уже існуючі типи і додавав їх. Третій агент робив рев’ю, а підозрілі зміни позначав для перевірки людиною. Після цього кожен такий пакет змін обов’язково проганяли через CI з E2E та юніт-тестами.
Зараз у них немає жодного JS-файлу у проєкті, хоча ще залишилося розгрібати близько п’яти тисяч коментарів @ts-expect-error, які вони залишили як тимчасові милиці.
Оригінал статті можна почитати тут: www.patreon.com/...s-to-typescript-152144830
А чи був у вас досвід подібних масштабних міграцій на проєктах? Можливо, теж вже пробували автоматизувати рефакторинг через ШІ та скрипти?
1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів