immutable-dataloader v1.0.1
immutable-dataloader
dataloader, but calls to load() return new copies of the data, every time
Note: This doesn't mean that data is reloaded from the data source, just that each call to load() or loadMany() returns a new copy of the data.
Install
npm i immutable-dataloader
OR
yarn add immutable-dataloaderHow to use
This is meant to be a drop in replacement for dataloader, thus usage is identical to dataloader
import DataLoader from 'immutable-dataloader'
const dataloader = new DataLoader(...)Why
It may be desirable to manipulate data returned from a dataloader ie.
const res = await dataloader.load(1)
res.foo = 'bar'
// or an array
const resArray = await dataloader.load(2) // ['foo']
const lastItem = resArray.pop() // mututes the arrayBecause the data returned from the dataloader was directly mutated, subsequent calls to load, will return that cached, but same mutated, data:
const resArray = await dataloader.load(2) // [] 'foo' was removed by the last pop() call
const lastItem = resArray.pop() // array is empty, so lastItem is now undefinedDepending on the order or the calls to load, this can cause some funky gotchas, and bugs that are difficult to trace.
With immutable-dataloader, each call to load or loadMany returns a new copy of the data, so this whole class of bugs is removed.
License
MIT