From 4bf07417a1ac676e280bfbe10f712e2f7ed80e47 Mon Sep 17 00:00:00 2001 From: Simon Morvan Date: Wed, 11 Dec 2019 15:10:12 -0500 Subject: [PATCH 1/2] Send `meta` when creating/updating a resource --- spec/utils.spec.ts | 27 +++++++++++++++++++++++++++ src/utils.ts | 5 +++++ 2 files changed, 32 insertions(+) diff --git a/spec/utils.spec.ts b/spec/utils.spec.ts index d14102f..c3186b7 100644 --- a/spec/utils.spec.ts +++ b/spec/utils.spec.ts @@ -1776,6 +1776,19 @@ describe('generatePayload', () => { expect(payload.query.type).toEqual('Article'); expect(payload.jsonApiData.data.id).toEqual('10'); expect(payload.jsonApiData.data.type).toEqual('Article'); + expect(payload.jsonApiData.meta).toBeUndefined(); + let resourceWithMeta = { + ...resource, + meta: { + testMetaData: 'test', + }, + }; + let payloadWithMeta = generatePayload(resourceWithMeta, 'POST'); + expect(payloadWithMeta.query.type).toEqual('Article'); + expect(payloadWithMeta.jsonApiData.data.id).toEqual('10'); + expect(payloadWithMeta.jsonApiData.data.type).toEqual('Article'); + expect(payloadWithMeta.jsonApiData.meta).toBeDefined(); + expect(payloadWithMeta.jsonApiData.meta.testMetaData).toEqual('test'); }); it('should generate a payload for a "update" request given a resource', () => { @@ -1788,6 +1801,20 @@ describe('generatePayload', () => { expect(payload.query.type).toEqual('Article'); expect(payload.jsonApiData.data.id).toEqual('10'); expect(payload.jsonApiData.data.type).toEqual('Article'); + expect(payload.jsonApiData.meta).toBeUndefined(); + let resourceWithMeta = { + ...resource, + meta: { + testMetaData: 'test', + }, + }; + let payloadWithMeta = generatePayload(resourceWithMeta, 'PATCH'); + expect(payloadWithMeta.query.id).toEqual('10'); + expect(payloadWithMeta.query.type).toEqual('Article'); + expect(payloadWithMeta.jsonApiData.data.id).toEqual('10'); + expect(payloadWithMeta.jsonApiData.data.type).toEqual('Article'); + expect(payloadWithMeta.jsonApiData.meta).toBeDefined(); + expect(payloadWithMeta.jsonApiData.meta.testMetaData).toEqual('test'); }); it('should generate a payload for a "delete" request given a resource', () => { diff --git a/src/utils.ts b/src/utils.ts index 1527539..5e08c24 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1043,6 +1043,11 @@ export const generatePayload = ( attributes: resource.attributes, relationships: resource.relationships, }, + ...(resource.meta + ? { + meta: resource.meta, + } + : null), }; } From 9f0d441d3dc964eb36c60845b41810ed25102aa6 Mon Sep 17 00:00:00 2001 From: Simon Morvan Date: Wed, 11 Dec 2019 15:06:50 -0500 Subject: [PATCH 2/2] Diff-mode PATCH with resource meta support --- spec/utils.spec.ts | 12 ++++++++++++ src/utils.ts | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spec/utils.spec.ts b/spec/utils.spec.ts index 437b3ae..2e170ed 100644 --- a/spec/utils.spec.ts +++ b/spec/utils.spec.ts @@ -1856,6 +1856,10 @@ describe('generatePayload', () => { ], }, }, + meta: { + updatedMeta: 'data', + keptMeta: 'same', + }, persistedResource: { id: '10', type: 'Article', @@ -1873,6 +1877,10 @@ describe('generatePayload', () => { data: [], }, }, + meta: { + existingMeta: 'test', + keptMeta: 'same', + }, }, }; let payload = generatePayload(resource, 'PATCH', true); @@ -1900,5 +1908,9 @@ describe('generatePayload', () => { payload.jsonApiData.data.relationships.existingEmptyToBeFilled.data[0] .type ).toEqual('foo-type'); + expect(payload.jsonApiData.meta).toBeDefined(); + expect(payload.jsonApiData.meta.existingMeta).toBeUndefined(); + expect(payload.jsonApiData.meta.updatedMeta).toBeDefined(); + expect(payload.jsonApiData.meta.keptMeta).toBeDefined(); }); }); diff --git a/src/utils.ts b/src/utils.ts index ac30181..479cf88 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1069,7 +1069,10 @@ export const generatePayload = ( ) : resource.relationships, }, - ...(resource.meta + ...(resource.meta && + (operation !== 'PATCH' || + !diffUpdate || + updatedData(resource.persistedResource.meta, resource.meta)) ? { meta: resource.meta, }