@graphql_ru
GraphQL — русскоговорящее сообщество

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 1 февраля 2018 г.

01:29:57 ДП
User 321317845
Ребят, а покидаете идей как неймспейсы запилить красиво?

Кейворд неймспейса:
1) namespace
2) package
3) module
4) ?

Кейворд импорта
1) use Def as Alias
2) using Def as Alias
3) import Alias from Def
4) ?
01:30:26 ДП
01:31:19 ДП
User 321317845
За основу взят: https://github.com/facebook/graphql/issues/163
github.com/facebook/graphql/issues/163
At the moment all GraphQL types share one global namespace. This is also true for all of the fields in mutation/subscription type. It can be a concern for bigger projects which may contain several ...
01:35:05 ДП
User 228403837
User 321317845
Ребят, а покидаете идей как неймспейсы запилить красиво?

Кейворд неймспейса:
1) namespace
2) package
3) module
4) ?

Кейворд импорта
1) use Def as Alias
2) using Def as Alias
3) import Alias from Def
4) ?
я уже говорил тебе что это тупиковая ветвь?
01:36:16 ДП
User 228403837
если тебя интересует именно модульность и разруливание конфликтов имен - то тебе нужны именно модули
01:36:34 ДП
User 228403837
import {Foo, Bar} from 'my.graphql'
01:36:40 ДП
User 228403837
неймспейсы не нужны
01:38:11 ДП
01:38:13 ДП
User 321317845
автолоад
01:38:25 ДП
User 321317845
автолоад с этими реквайрами не запилишь
01:38:45 ДП
User 228403837
так может и не надо?)
01:39:01 ДП
User 228403837
имхо graphql выглядит уже как полуфабрикат
01:39:10 ДП
User 228403837
красивую идею превращаете в какаху
01:39:12 ДП
User 321317845
ну как бы в джавах, котлинах, похапэ и прочем есть же инклуды
01:39:20 ДП
User 321317845
но их не используют
01:39:27 ДП
User 321317845
т.к. это тупо не юзабельно
01:39:35 ДП
User 321317845
это в js альтернатив просто нету
01:39:35 ДП
User 228403837
где в джава инклуды?
01:39:54 ДП
User 228403837
User 321317845
это в js альтернатив просто нету
там другая семантика просто
01:40:11 ДП
User 321317845
import static some.any.Class;
01:40:15 ДП
User 321317845
это инклуд
01:40:20 ДП
User 321317845
ну грубо говоря
01:40:29 ДП
User 228403837
вызванная отсутствием ограничений которые есть в твоих этих джавах (привязка к файловой системе), пыхах (все находится в глобальной области видимости) и т.д.
01:40:32 ДП
User 321317845
просто в джаве по-дефолту psr-0
01:40:38 ДП
User 228403837
User 321317845
import static some.any.Class;
ну это не совсем инклуд)
01:40:44 ДП
01:40:50 ДП
User 321317845
он ориентируется на psr-0
01:40:59 ДП
User 228403837
ты меня печалишь
01:41:03 ДП
User 321317845
так что очевидно, что неймспейс === расположение файла
01:41:17 ДП
User 228403837
и это мега херово
01:41:21 ДП
User 321317845
я просто человеческим языком говорю проводя альтернативы
01:41:30 ДП
User 321317845
это не мегахерово
01:41:50 ДП
User 228403837
тот факт что у тебя модули являются файлами, и идет полная привязка к файловой системе очень ограничивает тебя.
01:41:53 ДП
User 321317845
посмотри на php, например. Там нет ни одного реквайра и можно вообще без импортов писать.
01:42:00 ДП
User 321317845
да что далеко ходить
01:42:02 ДП
User 321317845
ruby тот же
01:42:08 ДП
User 228403837
User 321317845
посмотри на php, например. Там нет ни одного реквайра и можно вообще без импортов писать.
да, и в компайлтайме типы не разрулишь
01:42:35 ДП
User 228403837
User 321317845
ruby тот же
руби это тот же перл
01:42:36 ДП
User 321317845
User 228403837
тот факт что у тебя модули являются файлами, и идет полная привязка к файловой системе очень ограничивает тебя.
зависит от коллбека автолоада
01:42:40 ДП
User 321317845
так что не аргумент
01:43:11 ДП
User 228403837
ты начал дискуссию не ответив на один простой вопрос - нахера тебе автолоад?
01:43:17 ДП
User 228403837
вместо явного ресолва модулей?
01:43:27 ДП
User 321317845
потому что это не удобно
01:43:30 ДП
User 228403837
и возможности задать в конфиге что откуда ресолвить?
01:43:30 ДП
User 321317845
очевидно же
01:44:03 ДП
User 321317845
последнее не понял
01:44:07 ДП
User 228403837
User 321317845
потому что это не удобно
не удобно ~= не привычно
01:44:14 ДП
User 321317845
нет, не удобно
01:44:27 ДП
User 228403837
User 321317845
последнее не понял
ну сделать декларативную систему модулей как в JS но без ее минусов - то есть возможность подменять резолюцию модулей
01:44:33 ДП
User 228403837
тот же автолоад просто чуть по другому
01:44:53 ДП
User 228403837
причем желательно автолоад так же сделать декларативным
01:44:57 ДП
User 321317845
не просто же так все существующие языки ориентируются либо на виртуальную ФС, либо на конфиги
01:45:10 ДП
User 321317845
это толкьо в JS явное прописывание инклудов
01:45:24 ДП
User 228403837
User 321317845
не просто же так все существующие языки ориентируются либо на виртуальную ФС, либо на конфиги
ну так я тебе конфиги и предлагаю. Я считаю что привязка к файловой системе это плохо
01:45:27 ДП
User 228403837
а вот конфиги - более менее
01:45:43 ДП
User 321317845
это уже как реализует тот, кто использует
01:46:02 ДП
User 321317845
import в JS как раз и привязка к ФС
01:46:20 ДП
User 321317845
там же ты просто указываешь корневые папки и от них пляшешь
01:46:38 ДП
User 228403837
User 321317845
import в JS как раз и привязка к ФС
да, и я хочу что бы он таковым небыл)
01:46:44 ДП
01:46:53 ДП
User 228403837
что бы как в webpack - прописываешь откуда чего ресолвится и все клево
01:46:59 ДП
01:47:17 ДП
User 321317845
так вебпак и работает, приехали
01:47:17 ДП
User 321317845
import в JS как раз и привязка к ФС
01:47:17 ДП
User 321317845
там же ты просто указываешь корневые папки и от них пляшешь
01:47:46 ДП
User 321317845
import Some from "~/some/any/../ololo";
01:48:02 ДП
User 228403837
User 321317845
там же ты просто указываешь корневые папки и от них пляшешь
я про элиасы
01:48:17 ДП
User 321317845
с этим согласен
01:48:23 ДП
User 321317845
мне from не нравится как в JS
01:48:33 ДП
User 228403837
причем тут from?
01:48:45 ДП
User 321317845
хорошо, давай ещё раз с самого начала)))
01:48:53 ДП
User 228403837
мне лень
01:48:56 ДП
User 228403837
делай что хочешь)
01:49:02 ДП
User 228403837
всеравно заруинили уже почти красивую идею
01:49:14 ДП
User 321317845
ты предлагаешь:
improt Alias from Some/Any/Type;

так?
01:49:34 ДП
User 321317845
т.е. чтоб алиас всегда был прописан явно
01:49:48 ДП
User 228403837
тип того. ну собственно это ничем не отличается от use Vendor/FooBar as MyType
01:50:00 ДП
User 321317845
да, а когда алиас не нужен?
01:50:12 ДП
User 321317845
просто import Some/Any/Type?
01:50:25 ДП
User 228403837
это кастыль
01:50:44 ДП
User 228403837
по факту ты ничего не заимпортил, но бандлер заинлайнит сюда файл
01:50:47 ДП
User 321317845
это шорткат для import Type from Some/Any/Type
01:51:04 ДП
User 321317845
почему, я экспортнул тип Type
01:51:13 ДП
User 228403837
ну то есть, чем мне нравится JS-вский вариант модуля - это то что я явно прописываю что из модуля я юзаю
01:51:24 ДП
User 321317845
в gql так нельзя
01:51:26 ДП
User 321317845
кажется
01:51:29 ДП
User 321317845
хотя...
01:51:39 ДП
User 321317845
ну я про то, что там нет манки патчинга
01:51:44 ДП
User 228403837
я хз, вы все заруили сделав extend Query
01:51:45 ДП
User 321317845
но вот подумал тут
01:52:00 ДП
01:52:11 ДП
User 228403837
ну ты там бывает пишешь что-то))
01:52:23 ДП
User 228403837
все полимеры просраны
01:52:28 ДП
User 321317845
я один иссью открыл только с предложением сделать лискова для скаляров
01:52:44 ДП
User 228403837
да успокойся, я тебя ни в чем не обвиняю - ты полезные штуки делаешь
01:53:11 ДП
User 228403837
я просто грущу что есть красивая идея и та говно
01:53:23 ДП
User 321317845
я пытаюсь понять чем import Type from Some/Type лучше шортката import Some/Type
01:53:32 ДП
User 228403837
и еще больше грущу от статей в духе "graphql как замена rest"
01:53:48 ДП
User 228403837
User 321317845
я пытаюсь понять чем import Type from Some/Type лучше шортката import Some/Type
тем что import Type from Some в этом случае
01:53:49 ДП
User 321317845
User 228403837
я просто грущу что есть красивая идея и та говно
норм, я выправляю потихоньку)
01:53:56 ДП
01:53:58 ДП
User 321317845
понял
01:54:05 ДП
User 321317845
да, это гут
01:54:13 ДП
User 321317845
и можно группировать даже
01:54:25 ДП
User 321317845
import Type, Type2 from Some
01:54:40 ДП
User 228403837
именно, и при этом елси модуль эскпоузит 10 типов а мне надо только 2 - я это явно задам. Больше информации на будущее, ближе к ISP
01:54:59 ДП
User 228403837
User 321317845
import Type, Type2 from Some
import {Type, Type2} from Some что бы адаптироваться проще)
01:55:11 ДП
User 321317845
на последнее пофигу
01:55:16 ДП
User 321317845
там DCE режет их
01:55:17 ДП
User 228403837
но я так понял что синтаксиса точки нету так что... твой вариант норм)
01:55:38 ДП
User 228403837
ну и Import * FROM тогда еще предусмотреть
01:56:00 ДП
User 321317845
огонь
01:56:26 ДП
User 321317845
с импортом всё чётко, вариант самый лучший
01:56:31 ДП
User 321317845
мне нравится
01:56:37 ДП
User 228403837
экспорт?)
01:56:41 ДП
User 321317845
дефолтный
01:57:22 ДП
User 321317845
ну т.е. зачем скрывать какие-то типы в gql?
01:57:48 ДП
User 228403837
я хз если честно
01:57:54 ДП
User 228403837
у меня опыта с gql пока мало
01:58:08 ДП
User 228403837
и пока нет дженериков я не думаю что я буду юзать SDL
01:58:18 ДП
User 321317845
на скрине выше есть)
01:58:30 ДП
User 321317845
почти удалось их завести
01:58:58 ДП
User 321317845
проблема только в обобщённых типах, но это фигня
01:59:12 ДП
User 321317845
вопрос с неймспейсами остался только
01:59:23 ДП
User 228403837
User 321317845
проблема только в обобщённых типах, но это фигня
насколько я знаю все застопорилось на обсуждении о том как дженерики влияют на вывод интроспекции
01:59:34 ДП
User 321317845
нейм резолвер
01:59:37 ДП
01:59:41 ДП
01:59:53 ДП
User 321317845
т.е. чувак указывает как сериализовывать эти имена
01:59:57 ДП
User 228403837
типа Paginated<T> у тебя например (к слову можно будет ограничивать подтипы?)
02:00:12 ДП
User 228403837
ну я то сейчас тоже генерю PaginatedMyType
02:00:23 ДП
User 321317845
только type Paginated($var: T) { ... }
02:00:37 ДП
User 321317845
только вместо T указание типа
02:00:41 ДП
User 321317845
или реализации
02:00:46 ДП
02:00:59 ДП
User 321317845
тип == объект, скаляр, енам и проч
02:01:08 ДП
User 321317845
реализация == имя типа
02:01:22 ДП
User 321317845
с юнонами пока что не придумал
02:01:42 ДП
User 228403837
что в фигурных скобках?

type Paginated ($item: T) {
    items: [$item]!
}
02:01:45 ДП
User 228403837
так что-ли?
02:01:50 ДП
User 321317845
ну т.е.:
type Paginated($var: Object | Scalar) {
    items: [$var!]!
}
02:01:59 ДП
User 228403837
и использование latestPosts(): Paginated(Post)?
02:02:08 ДП
User 321317845
всё верно
02:02:12 ДП
User 228403837
а ну терпимо
02:02:14 ДП
User 321317845
аргумент может быть не один
02:02:26 ДП
User 321317845
т.е. тупо согласованность с оригинальным синтаксисом
02:02:38 ДП
User 228403837
так вот - продай мне свой парсер SDL
02:02:50 ДП
User 321317845
зачем? о_0
02:02:56 ДП
User 321317845
я дженерики ещё не доделал
02:03:07 ДП
User 228403837
ну мол... я сейчас думаю - допиливать webonyx по быстрому, свой парсер пилить что бы чисто под свои нужды или твой попробовать заюзать
02:03:22 ДП
User 228403837
меня пугает что твоя либка для рефлекшена мягко скажем жирная для такой простой задачи
02:03:36 ДП
User 228403837
но возможно мне это кажется
02:03:57 ДП
User 321317845
Ну когда (если) Никита допилит роутер: https://github.com/railt/railt/issues/16#issuecomment-361564547 тогда и можно продавать
github.com/railt/railt/issues/16
Divide the routing component into two component parts: Routing Decorators Routing The route must return complete data for the response, including all available relations. Definitions The followin...
02:04:05 ДП
User 321317845
это киллерфича решения N+1
02:04:09 ДП
User 228403837
мне не нужен ваш роутер, у меня свой
02:04:30 ДП
User 228403837
более того я тебе уже говорил что это отвратительная идея
02:04:38 ДП
User 321317845
какая?)
02:04:42 ДП
User 321317845
ты её даже не видел
02:06:10 ДП
User 321317845
просто на директиве указывается "поинткат" как соединять родителя с потмком и можно возвращать сразу всё, оно само сджойнит данные
02:06:38 ДП
User 321317845
там есть ещё скрытая фича - указание резолверов на типах
02:06:50 ДП
User 321317845
т.е. на них можно вешать сериалайзеры, например
02:07:41 ДП
User 321317845
scalar DateTime @resolve(action: "DateTimeResolver")
02:07:45 ДП
User 321317845
as example
02:07:59 ДП
User 228403837
User 321317845
просто на директиве указывается "поинткат" как соединять родителя с потмком и можно возвращать сразу всё, оно само сджойнит данные
вот мне это не надо)
02:08:14 ДП
User 228403837
мне нужен тупо парсер SDL что бы схему получать
02:08:22 ДП
User 228403837
объектное представление
02:08:24 ДП
User 321317845
а, ну прям сейчас можешь
02:08:29 ДП
User 228403837
я понимаю что могу
02:08:36 ДП
User 228403837
меня смущает что овер дофига зависимостей
02:08:40 ДП
User 228403837
для такой простой задачи
02:08:57 ДП
User 321317845
там только зенд генератор и хоа итератор
02:09:03 ДП
User 321317845
а, ну и иллюминейт
02:09:09 ДП
User 321317845
который я выкинуть хочу
02:09:18 ДП
User 228403837
railt/reflection
02:09:24 ДП
User 228403837
railt/storage
02:09:28 ДП
02:09:32 ДП
User 228403837
нафига они?
02:09:38 ДП
User 321317845
сторадж - это тупо бриджы по psr кеш
02:09:45 ДП
User 321317845
io - файловая система
02:09:58 ДП
User 321317845
чтоб я мог ловить сырцы и место указания
02:10:02 ДП
User 321317845
и строить трейс
02:10:14 ДП
User 321317845
рефлекшн - тупо интерфейсы и базовые классы рефлексии
02:10:44 ДП
User 321317845
ты видел сторадж? https://github.com/railt/storage
github.com/railt/storage
storage - [READ ONLY] Subtree split of the Storage (Cache) component (see railt/railt)
02:11:08 ДП
User 321317845
ну или io
02:11:23 ДП
User 228403837
видел и не понимаю для чего они)
02:11:27 ДП
User 321317845
там пара файлов и интерфейс)
02:11:32 ДП
User 228403837
если psr - почему завязка идет на них а не на psr
02:11:52 ДП
User 321317845
какой из?
02:11:57 ДП
User 321317845
psr-6 или psr-16?
02:12:01 ДП
02:12:02 ДП
User 228403837
мне почем знать какой тебе нужен
02:12:14 ДП
User 321317845
симфоня использует psr-6
02:12:22 ДП
User 321317845
а я, хочу, например 16
02:12:26 ДП
User 321317845
и что делать?
02:12:36 ДП
User 321317845
для этого и нужен
02:12:47 ДП
User 228403837
юзать psr-16
02:12:49 ДП
User 228403837
очевидно)
02:12:54 ДП
User 228403837
симфони и в него могет если что
02:12:59 ДП
User 228403837
(вроде как)
02:12:59 ДП
User 321317845
ну я просто обобщил их в одном интерфейсе: https://github.com/railt/storage/blob/master/Persister.php
github.com/railt/storage/blob/master/Persister.php
storage - [READ ONLY] Subtree split of the Storage (Cache) component (see railt/railt)
02:13:07 ДП
User 321317845
нет, не могёт =\
02:13:10 ДП
User 321317845
ну до 3.4
02:13:13 ДП
User 228403837
ну короч ладно, с этим понятно
02:13:17 ДП
User 228403837
бенчмарки? тесты?
02:13:29 ДП
User 321317845
ну ты видешь что я сократил тупо до одного метода всё?
02:13:46 ДП
User 321317845
тесты = 90% на рефлексию + компилер
02:13:47 ДП
User 228403837
так, тесты порядок
02:14:12 ДП
User 228403837
по перформансу я так понимаю у вас это на втором плане, ну а производительность hoa/compiler в целом норм
02:14:29 ДП
User 321317845
нет, не норм
02:14:50 ДП
User 321317845
вот мои оптимизации, например: https://github.com/hoaproject/Compiler/issues/81
github.com/hoaproject/Compiler/issues/81
If you remove the support for the token namespaces, then can significantly speed up the Lexer. This will simply completely rewrite the algorithm. Benchmarks: 3000 code lines 11867 tokens 5 times ...
02:15:06 ДП
User 321317845
из 408 токенов в секунду до 56 тысяч
02:15:23 ДП
User 321317845
пока что в мастере у меня висит, но на неделе в релиз пойдёт
02:16:30 ДП
User 228403837
прикольно, доктрине пригодится
02:16:49 ДП
User 228403837
они ж свой DQL на hoa перевести хотят
02:17:23 ДП
User 321317845
не получится
02:17:33 ДП
User 321317845
там внутри зависимости, которые всё ломают нахрен
02:17:39 ДП
User 321317845
глобальные функции, например
02:17:55 ДП
User 228403837
внутри hoa?
02:18:01 ДП
02:18:46 ДП
User 321317845
Hoa: https://github.com/hoaproject/Compiler/blob/master/composer.json#L30-L38
Мой форк: https://github.com/railt/compiler/blob/master/composer.json#L51-L54
github.com/hoaproject/Compiler/blob/master/composer.json
The Hoa\Compiler library.
02:19:01 ДП
User 228403837
грусть тоска
02:19:08 ДП
User 228403837
ну тогда решено - леняю с похапе
02:19:11 ДП
User 228403837
вжопу все
02:19:20 ДП
User 228403837
надоело
02:19:37 ДП
User 228403837
вот почему все через жопу...
02:19:45 ДП
02:19:54 ДП
User 321317845
я всё пофиксил+
02:19:59 ДП
02:20:06 ДП
User 228403837
да я не о том
02:20:29 ДП
User 321317845
Короче.
02:20:38 ДП
User 321317845
с неймспейсами что?
02:20:42 ДП
02:20:46 ДП
User 321317845
там конфликт имён тогда будет
02:21:02 ДП
User 321317845
если без явного их указания
02:21:31 ДП
User 321317845
внутри одной программы (т.е. апишки gql) не может быть два типа с одним именем и разной реализацией
02:22:06 ДП
02:23:27 ДП
User 321317845
1) import T from X/Y
2) 
namespace X/Y

type T { ... }
а разруливать пути конфигами/автолоадером
02:23:30 ДП
02:28:23 ДП
User 321317845
ладно, если будут идеи - пишите, а я пока что спать
02:28:38 ДП
User 321317845
с импортами - продано, запилю эту реализацию
02:28:59 ДП
User 321317845
но если что, можно будет допилить потом
09:51:45 ДП
User 371133717
Кто apollo использует?
09:52:10 ДП
User 371133717
Совмещаете onError + apollo-link-retry?