···11+---
22+'@urql/exchange-graphcache': patch
33+---
44+55+Ensure we aren't eagerly removing layers that are caused by subscriptions
+21
exchanges/graphcache/src/store/data.test.ts
···499499 expect(data.optimisticOrder).toEqual([]);
500500 });
501501502502+ it('does not erase data from a prior deferred layer when updating it', () => {
503503+ // initially it's unknown whether a layer is deferred
504504+ InMemoryData.reserveLayer(data, 1, true);
505505+ InMemoryData.reserveLayer(data, 2, true);
506506+507507+ InMemoryData.initDataState('write', data, 2);
508508+ InMemoryData.writeRecord('Query', 'index', 2);
509509+ InMemoryData.clearDataState();
510510+511511+ InMemoryData.initDataState('read', data, null);
512512+ expect(InMemoryData.readRecord('Query', 'index')).toBe(2);
513513+514514+ // A subsequent reserve layer call should not erase the layer
515515+ InMemoryData.reserveLayer(data, 2, true);
516516+ InMemoryData.initDataState('read', data, null);
517517+ expect(InMemoryData.readRecord('Query', 'index')).toBe(2);
518518+519519+ // The layers must not be squashed
520520+ expect(data.optimisticOrder).toEqual([2, 1]);
521521+ });
522522+502523 it('keeps a deferred layer around even if it is the lowest', () => {
503524 // initially it's unknown whether a layer is deferred
504525 InMemoryData.reserveLayer(data, 1);
+1-1
exchanges/graphcache/src/store/data.ts
···535535536536 let index = data.optimisticOrder.indexOf(layerKey);
537537 if (index > -1) {
538538- if (hasNext || !data.commutativeKeys.has(layerKey)) {
538538+ if (!data.commutativeKeys.has(layerKey) && !hasNext) {
539539 data.optimisticOrder.splice(index, 1);
540540 // Protect optimistic layers from being turned into non-optimistic layers
541541 // while preserving optimistic data