Myślę, że najbezpieczniejszą drogą będzie, abyśmy wszędzie korzystali z natywnych promisów, a z Bluebirda korzystali tylko do koordynacji asynchroniczności, np. Bluebird.reduce
, Bluebird.props
, etc. Zamiast Bluebird.all
możemy korzystać z Promise.all
Mam pytanie, czasem stosujemy coś takiego, że jeżeli mamy nieprawidłowy action_name
to rzucamy DeveloperError
- sensowne w czystym JSie. Ale przyszedł mi do głowy pomysł, żeby rozbić typ ActionName
na podtypy ShowActionName
, CreateActionName
itd. i w poszczególnych subjectach zamiast rzucać wyjątek gdy action_name
nie jest obsługiwany, to wystawić to w deklaracji funkcji performAction(context: Context, action_name: ShowActionName,params: any)
. Wydaje się to ok?
Musimy pamiętać o tym, że type safety to jedno, ale wciąż musimy sprawdzać nazwę akcji w trakcie runtime’u. Więc ten wyjątek musimy rzucać, nawet jeżeli teoretycznie to nie jest możliwe z punktu widzenia typów. Wszak można będzie korzystać z Sealiousa za pomocą zwykłego JS-a, który nie rzuci błędu, gdy typy nie będą się zgadzały
A racja, bo do tego będzie dostęp z zewnątrz. A w sumie jakie mamy podejście do bibliotek, które oferują tzw. runtime types
? Mam na myśli io-ts, tutaj krótki artykuł
O, myślałem kiedyś o czymś takim! Ale jeszcze nigdy nie korzystałem. Myślę, że warto pomyśleć o io-ts jak już będziemy mieli ogarniętego typescripta w Sealiousie
Ustaliliśmy z @kuba-orlik, że jeśli ktoś napotka promisifyowanie method z fs
, to można śmiało to przepisać na fs Promises API
Pusznąłem kolejne zmiany. Zeszliśmy już do 1316 błędów (z ponad 2k ) Będę kontynuował prace nad field-typesami.
Kontynuuję prace nad field-typesami. Zeszło już do 1224 errorów.
Przysiedziałem dzisiaj jeszcze trochę. Mamy już tylko trzycyfrową ilość błędów: 973
U mnie ostatnio intensywnie w innych sprawach i niespecjalnie siedziałem nad tym, ale kontynuuję temat subjectów
Skończyłem dodawać typy do field-types’ów, ilość błędów aktualnie: 905.
Następnie będę siadał do graph.js
Usiądę na szybko do with-test-app
Done, ilość błędów zeszła do 858
Teraz siadam do time-units.js
i secure-hasher.js
Done, ilość błędów: 836. Siadam do test_utils
Done, ilość błędów: 819. Siadam do utils
Done, ilość błędów: 774, siadam do access-strategies
Done, ilość błędów: 766, siadam do special-filters
Done, ilość błędów: 750, siadam do config-manager
Done, ilość błędów: 737, siadam do file-manager
Done. Ilość błędów: 731. Siadam do hookable.subtest.ts
Done. Ilość blędów: 692. Siadam do request-multiple-items.subtest
Done. Ilość błędów: 676. Siadam do run-action-curry
Done. Ilość błędów : 666.
Używam od teraz tego skryptu, aby znaleźć najbardziej kłopotliwe pliki:
npm run build | grep -o -e '^[^(]*\.[jt]s' | sort | uniq -c | sort -n
Siadam do graph.test.js
Done. Ilość błędów: 609. Zabieram się za datastore
Done. Ilość błędów: 569. Zabieram się za query_and
Done. Ilość błędów: 562. Zabieram się za query.test
Done. Ilość błędów: 532. Zabieram się za query-step.ts
Wrzuciłem subjecty. Liczba błędów: 202. Wszystkiego nie udało mi się tam zrobić, ale jest dużo, dużo lepiej.
Dodam, że mam problem z 2 metodami z Collection
.
encodeFieldValues
-> wydaje mi się, że argument old_body
powinien być opcjonalny (gdy tworzymy).
validateFieldValues
-> argument field_type_name
jest w ogóle źle nazwany - na alphie jest przekazywany tutaj this.name
czyli nazwa kolekcji. Może po prostu wylecieć.
Mogę to naprostować? Póki co przyjrzę się http/routes
zgadzam się
to niech wyleci
Potypowałem trochę więcej. Zeszło do 156 errorów
Naprawianie testów idzie do przodu
Piekło zamarzło i powstała dokumentacja Sealiousa:
https://sealious.sealcode.org/docs/
Póki co jest do w postaci technicznego reference. Następnym krokiem będzie przygotowanie kilku poradników i use-case’ów.