Таймураз
Остальное типо все ок?)
Мне бы найти удобное решение под graphql а там пох
Ale
@wertlex @vkurchatkin @sergeysova @mkusher @ZeroBias @NordLuf https://github.com/yarax/tapi
по тесту не совсем понял, че происходит там
Ale
а, пример в папке controllers?
Ale
да, идея супер
Evgeny
а зачем require('./controllers/controller');?
Roman
а зачем require('./controllers/controller');?
там на самом деле надо рекваирить все из папки controllers, да
Ale
там на самом деле надо рекваирить все из папки controllers, да
у меня есть наброски похожей ерунды, но не для api. Я там иду по всему проекту и ищу экспорты помеченные декоратором
Roman
у меня есть наброски похожей ерунды, но не для api. Я там иду по всему проекту и ищу экспорты помеченные декоратором
да, у меня там вот собственно эта конструкция карированная в контроллере ее было бы шикарно сделать декоратором, но они деприкейтед, если не юзать ts, a будущее их мутновато
Roman
получилось бы как аннотации в спринге или хелперы в джанго
Ale
но будущее мутновато, да(
Roman
я в плане в бабеле же нет поддержки по дефолту
Sergey
блуберд в зависимостях
Sergey
лол
Ale
ну я декораторы юзанул только потому, что их проще в ast находить
Ale
чем вызов, и их лучше ts понимает, чем вызов функции с аргументом
Ilya
mvc мутите?
Ale
т.е. заменить потом на вызов не беда
Ale
mvc мутите?
mvc на сервере?)
Vladimir
Чет не понял как это тайпчекается
Sergey
чет не понял че за HTTPRoutes
Sergey
глобально чоль объявляет?
Ale
там на самом деле надо рекваирить все из папки controllers, да
ты по итогу будешь эмитить некий router.js, в котором будут все типы и валидация?
Roman
Чет не понял как это тайпчекается
чекается как обычно флоу, из флоу по ast формируется json schema для райнтайм валидации и построения апи
Roman
т.е перед запуском сервера проходит статическая проверка
Vladimir
Roman
в итоге типы флоу + неокоторые декораторы - источник апи
Vladimir
Как чекается что там вообще есть id
Vladimir
Или другие параметры
Roman
примерно как в серванте хаскелевском, но там естественно язык все тянет
Vladimir
Не, ну я не знаю как там
Ale
Как чекается что там вообще есть id
эт наверное только рантайм, не? Roman
Vladimir
Но здесь предполагаю что никак
Roman
не, контроллер щас тайп чекается ок, в чем проблема
Vladimir
Я вот такое делал по фану
Roman
есть типы для аргументов описанные, есть для выхода функции и соотв-но ендпоинта
Ale
"/path", function(id: Path<number>){}
Ale
как ты проверишь, что в path вообще есть id?
Ale
это только в рантайме прокатит
Roman
как ты проверишь, что в path вообще есть id?
да, в том и мякотка, что есть и статика и рантайм
Ale
ну точнее, самый простой вариант это в рантайме делать)
Vladimir
https://pbs.twimg.com/media/Cw6dImEXcAI514a.jpg:large
Roman
как ты проверишь, что в path вообще есть id?
из флоу по аст генерится json schema для рантайма
Ale
а как ты статически проверяешь?
Roman
а как ты статически проверяешь?
контроллер щас это корретктный флоу код
Vladimir
Вот здесь статическаятипизация роутнига
Anton
получилось бы как аннотации в спринге или хелперы в джанго
Будто это что-то хорошее. На спринговый код смотреть страшно, анотация на анотации и херова туча магии, будто не жабе уже пишешь
Roman
https://pbs.twimg.com/media/Cw6dImEXcAI514a.jpg:large
да, типо того, только еще райнтам
Vladimir
Не не, у тебя как раз статической проверки нет
Vladimir
Как я понял
Vladimir
Только динамическая
Roman
Будто это что-то хорошее. На спринговый код смотреть страшно, анотация на анотации и херова туча магии, будто не жабе уже пишешь
согласен, здесь будет короче, потому что все берется из типов, а аннотации - это декораторы
Ale
контроллер щас это корретктный флоу код
еще раз пример HTTPRoute({method: 'GET', path: '/pet/:id'})((id: Path<number>, token: Headers<string>): ок, есть такой параметр, как id HTTPRoute({method: 'GET', path: '/pet/'})((id: Path<number>, token: Headers<string>): нет такого параметра, как id
Ale
это ж только в рантайме будет падать
Ale
ну типа можно чето выдумать для статики, но это уже сбоку будет
Sergey
https://pbs.twimg.com/media/Cw6dImEXcAI514a.jpg:large
выглядит интересно но странно немного
Roman
это ж только в рантайме будет падать
в данном случае там под капотом создаются экспрессовые роуты и они будут разные, возможно это можно как-то лучше сделать, пока все очень сыро
Ale
в данном случае там под капотом создаются экспрессовые роуты и они будут разные, возможно это можно как-то лучше сделать, пока все очень сыро
да, я понимаю, но в любом случае проверки, что path и аргументы функции хоть как-то связаны в компайл-тайме пока нет
Roman
соотв-но когда придут данные, ручка проверит по рантайм валидации, есть ли в пути id и да, упадет с ошибкой валидации 400
Ale
ну да, я про это и говорил
Ale
что для этого кейса только рантайм будет
Ale
вообще дико не хватает удобного(=высокоуровневого) api для работы с типами в компайл-тайме
Roman
да, ключевое слово высокоуровневого
Roman
постоянно приходится возиться с транспортной имплементацией
Roman
или писать свои велосипеды
Roman
возможно это даже можно сделать лучше чем в спринге за счет хорошей экспрессии флоу
Roman
в общем, если кому-то оказалась интересна идея и хочет поучаствовать - пишите, let’s make node great again
Roman
где все обсуждения проходят я хочу участвовать
я соберу фидбек и наверное завтра приглашу в канал в телеге
Roman
хорошо
V
меня тоже добавляй :)
Николаич
Я тоже в теме