-
Notifications
You must be signed in to change notification settings - Fork 134
Description
I'm not sure if this is a bug, a documentation issue or simply "tough luck, Brad" but here's what I've spent my afternoon on:
I have a Drupal json:api backend that serves up rather vanilla resources in compliance with the spec. Orbit has been working really well for me in that regard, with some tweaks to the initial client setup like overriding the URL builder, etc.
Here's the rub: I am using Drupal's consumer_image_styles module to add a meta member to the resource identifier object, which contains links to what Drupal calls "image derivatives," or basically URLs for different sizes and transformations of the referenced image.
(Yes, I'd say it's better to put this in the meta member of the resource linkage object, but the way Drupal implements hooks to alter the output of the field, it's much easier to put this inside of the data resource identifier object, and it's still valid. If not entirely semantically perfect.)
In my case, I make my life more difficult by signing these derivative URLs, because they reference access-controlled content. The URLs might also change due to attributes of the user accessing them (which is a whole other ball of wax.) The point is, though, that the data contained inside the meta member of the resource linkage may change, while the resource identities will not.
Problem is, Orbit's memory source throws these changes away, because the relationship identities do not change. (They're compared to match type and id of the current record.) This is in the "Inverse transform operator", but I will confess I'm not entirely sure what an inverse transform is yet.
It seems like in theory this could be overridden during setup, but it raises the questions:
- Is this the desired behavior? Could we perhaps always overwrite if we have a
metaobject in the resource identifier, or broaden the test to compare the contents of the two resource identifier objects more generally? - If this isn't a bug, what's the "right" way to work around this? It looks like I'd need to... pass
settings.inverseTransformOperatorsto a customized transform buffer on myMemoryCacheinstance?