Przy review zauważyłem, że komponent responsive-image musi skądś wiedzieć, dokąd ma zapisywać przeskalowane zdjęcia. Myślę, że komponenty najłatwiej będzie pisało się, jeżeli nie będą musiały się przejmować tym, dokąd pisać pliki, w jaki sposób, czy takie pliki już istnieją, itp.
Dlatego proponuję, aby każdy komponent dostawał zawsze dokładnie dwa argumenty:
- sealpage - obiekt, który opiszę poniżej
- props - tradycyjne propsy danego komponentu
sealpage (może się nazywać inaczej, pozostawiam dowolność) jest obiektem, który będzie używany m.in. do pobierania konfiguracji aktualnego builda oraz zgłaszania wszelkich skutków ubocznych. Powinien zawierać metodę addOutputFile(), która przyjmuje argumenty:
- relative_path - ścieżka docelowa katalogu dla pliku. relatywna, względem docelowego katalogu outputu
- base_name - bazowa nazwa pliku,
- generator - funkcja asyncowa, która resolvuje się do Buffer zawierającego zawartość pliku do zapisania
- deps - lista zmiennych, które wpływają na to, jaka jest zawartość wyjściowego pliku. Podobnie do deps w Reactowych hookach, jeżeli przy ponownym renderze zostanie wywołany ten sam plik z takimi samymi wartościami w deps, to plik pozostaje bez zmian i go nie generujemy i nie zapisujemy ponownie. Jeżeli deps nie jest podane, to plik za każdym razem się generuje i zapisuje ponownie
Następnie trzeba przerobić ResponsiveImage tak, aby korzystał z tego nowego api.