@klerick/json-api-nestjs-sdk 10.0.0-beta.10 → 10.0.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +115 -50
  3. package/cjs/src/index.js +2 -1
  4. package/cjs/src/index.js.map +1 -1
  5. package/cjs/src/lib/json-api-angular.js +7 -3
  6. package/cjs/src/lib/json-api-angular.js.map +1 -1
  7. package/cjs/src/lib/json-api-js.js +3 -3
  8. package/cjs/src/lib/json-api-js.js.map +1 -1
  9. package/cjs/src/lib/service/json-api-sdk.service.js +14 -11
  10. package/cjs/src/lib/service/json-api-sdk.service.js.map +1 -1
  11. package/cjs/src/lib/service/json-api-utils.service.js +93 -37
  12. package/cjs/src/lib/service/json-api-utils.service.js.map +1 -1
  13. package/cjs/src/lib/utils/utils.js +20 -0
  14. package/cjs/src/lib/utils/utils.js.map +1 -1
  15. package/cjs/src/ngModule.js.map +1 -1
  16. package/mjs/package.json +1 -0
  17. package/mjs/src/index.d.ts +1 -1
  18. package/mjs/src/index.js +1 -1
  19. package/mjs/src/index.js.map +1 -1
  20. package/mjs/src/lib/json-api-angular.d.ts +5 -7
  21. package/mjs/src/lib/json-api-angular.js +7 -3
  22. package/mjs/src/lib/json-api-angular.js.map +1 -1
  23. package/mjs/src/lib/json-api-js.d.ts +2 -2
  24. package/mjs/src/lib/json-api-js.js +3 -3
  25. package/mjs/src/lib/json-api-js.js.map +1 -1
  26. package/mjs/src/lib/service/json-api-sdk.service.js +14 -11
  27. package/mjs/src/lib/service/json-api-sdk.service.js.map +1 -1
  28. package/mjs/src/lib/service/json-api-utils.service.d.ts +4 -3
  29. package/mjs/src/lib/service/json-api-utils.service.js +94 -38
  30. package/mjs/src/lib/service/json-api-utils.service.js.map +1 -1
  31. package/mjs/src/lib/utils/utils.d.ts +10 -0
  32. package/mjs/src/lib/utils/utils.js +18 -0
  33. package/mjs/src/lib/utils/utils.js.map +1 -1
  34. package/mjs/src/ngModule.d.ts +1 -1
  35. package/mjs/src/ngModule.js.map +1 -1
  36. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ ## 10.0.0-beta.12 (2026-02-03)
2
+
3
+ ### 🩹 Fixes
4
+
5
+ - **json-api-nestjs-sdk:** handle invalid date parsing in attribute processing ([cd8943f](https://github.com/klerick/nestjs-json-api/commit/cd8943f))
6
+
7
+ ### ❤️ Thank You
8
+
9
+ - Alex H
10
+
11
+ ## 10.0.0-beta.11 (2026-02-01)
12
+
13
+ ### 🚀 Features
14
+
15
+ - **json-api-nestjs-sdk:** add emptyArrayRef for clearing to-many relationships and update SDK to handle id parsing and relationship markers ([58b2309](https://github.com/klerick/nestjs-json-api/commit/58b2309))
16
+ - **json-api-nestjs-sdk:** add support for plain objects, dynamic factory config, and relationship id preservation ([295de3c](https://github.com/klerick/nestjs-json-api/commit/295de3c))
17
+
18
+ ### 🧱 Updated Dependencies
19
+
20
+ - Updated json-api-nestjs-shared to 1.0.0-beta.7
21
+
22
+ ### ❤️ Thank You
23
+
24
+ - Alex H
25
+
1
26
  ## 10.0.0-beta.10 (2026-01-23)
2
27
 
3
28
  ### 🚀 Features
package/README.md CHANGED
@@ -38,6 +38,7 @@ Type-safe TypeScript/JavaScript client for consuming [JSON:API](https://jsonapi.
38
38
  - [Using entity() Method](#using-entity-method)
39
39
  - [Using String Type Names](#using-string-type-names)
40
40
  - [Nullifying Relationships](#-nullifying-relationships)
41
+ - [Clearing To-Many Relationships](#-clearing-to-many-relationships)
41
42
  - [Query Options](#-query-options)
42
43
  - [Filtering](#filtering)
43
44
  - [Sorting](#sorting)
@@ -82,10 +83,10 @@ const jsonSdk = JsonApiJs(
82
83
 
83
84
  // 3. Use SDK
84
85
  // Fetch all users
85
- const users = await jsonSdk.jonApiSdkService.getAll(Users);
86
+ const users = await jsonSdk.jsonApiSdkService.getAll(Users);
86
87
 
87
88
  // Fetch with filtering and relationships
88
- const activeUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
89
+ const activeUsers = await jsonSdk.jsonApiSdkService.getAll(Users, {
89
90
  filter: {
90
91
  target: {
91
92
  isActive: { [FilterOperand.eq]: 'true' }
@@ -95,7 +96,7 @@ const activeUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
95
96
  });
96
97
 
97
98
  // Get one user
98
- const user = await jsonSdk.jonApiSdkService.getOne(Users, '1', {
99
+ const user = await jsonSdk.jsonApiSdkService.getOne(Users, '1', {
99
100
  include: ['addresses', 'comments', 'roles', 'manager']
100
101
  });
101
102
 
@@ -106,14 +107,14 @@ newUser.lastName = 'Doe';
106
107
  newUser.login = 'johndoe';
107
108
  newUser.isActive = true;
108
109
 
109
- const createdUser = await jsonSdk.jonApiSdkService.postOne(newUser);
110
+ const createdUser = await jsonSdk.jsonApiSdkService.postOne(newUser);
110
111
 
111
112
  // Update a user
112
113
  createdUser.firstName = 'Jane';
113
- const updatedUser = await jsonSdk.jonApiSdkService.patchOne(createdUser);
114
+ const updatedUser = await jsonSdk.jsonApiSdkService.patchOne(createdUser);
114
115
 
115
116
  // Delete a user
116
- await jsonSdk.jonApiSdkService.deleteOne(createdUser);
117
+ await jsonSdk.jsonApiSdkService.deleteOne(createdUser);
117
118
  ```
118
119
 
119
120
  ### Angular Setup
@@ -132,6 +133,8 @@ import { Component, inject } from '@angular/core';
132
133
  import { bootstrapApplication } from '@angular/platform-browser';
133
134
 
134
135
  // 1. Configure in your main.ts or app.config.ts
136
+
137
+ // Option A: Direct configuration object
135
138
  const angularConfig = {
136
139
  apiHost: 'http://localhost:3000',
137
140
  idKey: 'id',
@@ -147,6 +150,23 @@ bootstrapApplication(AppComponent, {
147
150
  ],
148
151
  }).catch((err) => console.error(err));
149
152
 
153
+ // Option B: Factory function (useful for dynamic configuration)
154
+ bootstrapApplication(AppComponent, {
155
+ providers: [
156
+ provideHttpClient(withFetch()),
157
+ provideJsonApi(() => {
158
+ const env = inject(EnvironmentService);
159
+ return {
160
+ apiHost: env.apiUrl,
161
+ idKey: 'id',
162
+ apiPrefix: 'api',
163
+ operationUrl: 'operation',
164
+ dateFields: ['createdAt', 'updatedAt']
165
+ };
166
+ })
167
+ ],
168
+ }).catch((err) => console.error(err));
169
+
150
170
  // 2. Use in your components
151
171
  @Component({
152
172
  standalone: true,
@@ -190,6 +210,10 @@ type JsonSdkConfig = {
190
210
  type JsonConfig = JsonSdkConfig & {
191
211
  adapter?: HttpInnerClient; // HTTP client adapter (default: fetch)
192
212
  }
213
+
214
+ // Angular: provideJsonApi accepts config or factory function
215
+ type JsonSdkConfigFactory = () => JsonSdkConfig;
216
+ type JsonSdkConfigOrFactory = JsonSdkConfig | JsonSdkConfigFactory;
193
217
  ```
194
218
 
195
219
  ### HTTP Adapters
@@ -229,10 +253,10 @@ Fetch all resources with optional filtering, sorting, and relationships.
229
253
  import { FilterOperand } from '@klerick/json-api-nestjs-sdk';
230
254
 
231
255
  // Fetch all users
232
- const users = await jsonSdk.jonApiSdkService.getAll(Users);
256
+ const users = await jsonSdk.jsonApiSdkService.getAll(Users);
233
257
 
234
258
  // With filtering
235
- const activeUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
259
+ const activeUsers = await jsonSdk.jsonApiSdkService.getAll(Users, {
236
260
  filter: {
237
261
  target: {
238
262
  isActive: { [FilterOperand.eq]: 'true' },
@@ -243,7 +267,7 @@ const activeUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
243
267
  });
244
268
 
245
269
  // Filter by relationship
246
- const usersWithRoles = await jsonSdk.jonApiSdkService.getAll(Users, {
270
+ const usersWithRoles = await jsonSdk.jsonApiSdkService.getAll(Users, {
247
271
  filter: {
248
272
  target: {
249
273
  id: { [FilterOperand.in]: ['1', '2'] }
@@ -261,7 +285,7 @@ const usersWithRoles = await jsonSdk.jonApiSdkService.getAll(Users, {
261
285
  Fetch resources with pagination (returns paginated results).
262
286
 
263
287
  ```typescript
264
- const firstPage = await jsonSdk.jonApiSdkService.getList(Users, {
288
+ const firstPage = await jsonSdk.jsonApiSdkService.getList(Users, {
265
289
  page: {
266
290
  number: 1,
267
291
  size: 10
@@ -273,7 +297,7 @@ const firstPage = await jsonSdk.jonApiSdkService.getList(Users, {
273
297
  }
274
298
  });
275
299
 
276
- const secondPage = await jsonSdk.jonApiSdkService.getList(Users, {
300
+ const secondPage = await jsonSdk.jsonApiSdkService.getList(Users, {
277
301
  page: {
278
302
  number: 2,
279
303
  size: 10
@@ -292,15 +316,15 @@ Fetch a single resource by ID.
292
316
 
293
317
  ```typescript
294
318
  // Simple fetch
295
- const user = await jsonSdk.jonApiSdkService.getOne(Users, '1');
319
+ const user = await jsonSdk.jsonApiSdkService.getOne(Users, '1');
296
320
 
297
321
  // With relationships
298
- const userWithRelations = await jsonSdk.jonApiSdkService.getOne(Users, '1', {
322
+ const userWithRelations = await jsonSdk.jsonApiSdkService.getOne(Users, '1', {
299
323
  include: ['addresses', 'comments', 'roles', 'manager']
300
324
  });
301
325
 
302
326
  // With sparse fieldsets
303
- const userPartial = await jsonSdk.jonApiSdkService.getOne(Users, '1', {
327
+ const userPartial = await jsonSdk.jsonApiSdkService.getOne(Users, '1', {
304
328
  fields: {
305
329
  users: ['firstName', 'lastName', 'email']
306
330
  }
@@ -321,7 +345,7 @@ newUser.lastName = 'Doe';
321
345
  newUser.login = 'johndoe';
322
346
  newUser.isActive = true;
323
347
 
324
- const createdUser = await jsonSdk.jonApiSdkService.postOne(newUser);
348
+ const createdUser = await jsonSdk.jsonApiSdkService.postOne(newUser);
325
349
 
326
350
  // Create with relationships
327
351
  const newAddress = new Addresses();
@@ -329,7 +353,7 @@ newAddress.city = 'New York';
329
353
  newAddress.state = 'NY';
330
354
  newAddress.country = 'USA';
331
355
 
332
- const savedAddress = await jsonSdk.jonApiSdkService.postOne(newAddress);
356
+ const savedAddress = await jsonSdk.jsonApiSdkService.postOne(newAddress);
333
357
 
334
358
  const user = new Users();
335
359
  user.firstName = 'Jane';
@@ -337,7 +361,7 @@ user.lastName = 'Doe';
337
361
  user.login = 'janedoe';
338
362
  user.addresses = savedAddress; // Set relationship
339
363
 
340
- const createdUser = await jsonSdk.jonApiSdkService.postOne(user);
364
+ const createdUser = await jsonSdk.jsonApiSdkService.postOne(user);
341
365
  ```
342
366
 
343
367
  ### Updating Resources
@@ -349,13 +373,13 @@ Update an existing resource.
349
373
  ```typescript
350
374
  // Update attributes
351
375
  user.firstName = 'Updated Name';
352
- const updatedUser = await jsonSdk.jonApiSdkService.patchOne(user);
376
+ const updatedUser = await jsonSdk.jsonApiSdkService.patchOne(user);
353
377
 
354
378
  // Update relationships
355
- const newAddress = await jsonSdk.jonApiSdkService.postOne(addressEntity);
379
+ const newAddress = await jsonSdk.jsonApiSdkService.postOne(addressEntity);
356
380
  user.addresses = newAddress;
357
381
 
358
- const updatedUser = await jsonSdk.jonApiSdkService.patchOne(user);
382
+ const updatedUser = await jsonSdk.jsonApiSdkService.patchOne(user);
359
383
  ```
360
384
 
361
385
  ### Deleting Resources
@@ -365,7 +389,7 @@ const updatedUser = await jsonSdk.jonApiSdkService.patchOne(user);
365
389
  Delete a resource.
366
390
 
367
391
  ```typescript
368
- await jsonSdk.jonApiSdkService.deleteOne(user);
392
+ await jsonSdk.jsonApiSdkService.deleteOne(user);
369
393
  ```
370
394
 
371
395
  ### Relationship Operations
@@ -376,13 +400,13 @@ Remove relationships without deleting the related resources.
376
400
 
377
401
  ```typescript
378
402
  // Remove all roles from user
379
- await jsonSdk.jonApiSdkService.deleteRelationships(user, 'roles');
403
+ await jsonSdk.jsonApiSdkService.deleteRelationships(user, 'roles');
380
404
 
381
405
  // Remove manager from user
382
- await jsonSdk.jonApiSdkService.deleteRelationships(user, 'manager');
406
+ await jsonSdk.jsonApiSdkService.deleteRelationships(user, 'manager');
383
407
 
384
408
  // Remove all comments from user
385
- await jsonSdk.jonApiSdkService.deleteRelationships(user, 'comments');
409
+ await jsonSdk.jsonApiSdkService.deleteRelationships(user, 'comments');
386
410
  ```
387
411
 
388
412
  ---
@@ -412,7 +436,7 @@ interface User {
412
436
  const jsonSdk = JsonApiJs({ apiHost: 'http://localhost:3000', apiPrefix: 'api' }, true);
413
437
 
414
438
  // Create entity from plain object - chainable API
415
- const createdUser = await jsonSdk.jonApiSdkService
439
+ const createdUser = await jsonSdk.jsonApiSdkService
416
440
  .entity<User>('Users', {
417
441
  firstName: 'John',
418
442
  lastName: 'Doe',
@@ -421,7 +445,7 @@ const createdUser = await jsonSdk.jonApiSdkService
421
445
  .postOne();
422
446
 
423
447
  // Update entity - chainable API
424
- const updatedUser = await jsonSdk.jonApiSdkService
448
+ const updatedUser = await jsonSdk.jsonApiSdkService
425
449
  .entity<User>('Users', {
426
450
  id: 1,
427
451
  firstName: 'Jane'
@@ -429,12 +453,12 @@ const updatedUser = await jsonSdk.jonApiSdkService
429
453
  .patchOne();
430
454
 
431
455
  // Delete entity - chainable API
432
- await jsonSdk.jonApiSdkService
456
+ await jsonSdk.jsonApiSdkService
433
457
  .entity<User>('Users', { id: 1 })
434
458
  .deleteOne();
435
459
 
436
460
  // Work with relationships
437
- const userRelations = await jsonSdk.jonApiSdkService
461
+ const userRelations = await jsonSdk.jsonApiSdkService
438
462
  .entity<User>('Users', { id: 1 })
439
463
  .getRelationships('manager');
440
464
  ```
@@ -443,14 +467,14 @@ const userRelations = await jsonSdk.jonApiSdkService
443
467
 
444
468
  ```typescript
445
469
  // Get raw entity instance (third argument = true)
446
- const userEntity = jsonSdk.jonApiSdkService.entity<User>('Users', {
470
+ const userEntity = jsonSdk.jsonApiSdkService.entity<User>('Users', {
447
471
  firstName: 'John',
448
472
  lastName: 'Doe',
449
473
  login: 'johndoe'
450
474
  }, true);
451
475
 
452
476
  // Now use it with standard SDK methods
453
- const created = await jsonSdk.jonApiSdkService.postOne(userEntity);
477
+ const created = await jsonSdk.jsonApiSdkService.postOne(userEntity);
454
478
  ```
455
479
 
456
480
  ### Using String Type Names
@@ -459,15 +483,15 @@ GET methods also accept string type names instead of classes:
459
483
 
460
484
  ```typescript
461
485
  // Using string type name
462
- const users = await jsonSdk.jonApiSdkService.getAll<User>('Users', {
486
+ const users = await jsonSdk.jsonApiSdkService.getAll<User>('Users', {
463
487
  include: ['manager']
464
488
  });
465
489
 
466
- const user = await jsonSdk.jonApiSdkService.getOne<User>('Users', '1', {
490
+ const user = await jsonSdk.jsonApiSdkService.getOne<User>('Users', '1', {
467
491
  include: ['manager']
468
492
  });
469
493
 
470
- const userList = await jsonSdk.jonApiSdkService.getList<User>('Users', {
494
+ const userList = await jsonSdk.jsonApiSdkService.getList<User>('Users', {
471
495
  page: { number: 1, size: 10 }
472
496
  });
473
497
  ```
@@ -492,13 +516,13 @@ interface User {
492
516
  const jsonSdk = JsonApiJs({ apiHost: 'http://localhost:3000', apiPrefix: 'api' }, true);
493
517
 
494
518
  // Clear the manager relationship
495
- const user = jsonSdk.jonApiSdkService.entity<User>('Users', {
519
+ const user = jsonSdk.jsonApiSdkService.entity<User>('Users', {
496
520
  id: 1,
497
521
  firstName: 'John',
498
522
  manager: nullRef() // This will send { data: null } for the relationship
499
523
  }, true);
500
524
 
501
- const updatedUser = await jsonSdk.jonApiSdkService.patchOne(user);
525
+ const updatedUser = await jsonSdk.jsonApiSdkService.patchOne(user);
502
526
  // Result: user.manager is now null
503
527
  ```
504
528
 
@@ -510,7 +534,7 @@ const updatedUser = await jsonSdk.jonApiSdkService.patchOne(user);
510
534
  **Without nullRef:**
511
535
  ```typescript
512
536
  // This won't clear the relationship - it will be ignored
513
- const user = jsonSdk.jonApiSdkService.entity<User>('Users', {
537
+ const user = jsonSdk.jsonApiSdkService.entity<User>('Users', {
514
538
  id: 1,
515
539
  firstName: 'John',
516
540
  // manager is undefined - not included in request
@@ -520,13 +544,54 @@ const user = jsonSdk.jonApiSdkService.entity<User>('Users', {
520
544
  **With nullRef:**
521
545
  ```typescript
522
546
  // This explicitly clears the relationship
523
- const user = jsonSdk.jonApiSdkService.entity<User>('Users', {
547
+ const user = jsonSdk.jsonApiSdkService.entity<User>('Users', {
524
548
  id: 1,
525
549
  firstName: 'John',
526
550
  manager: nullRef() // Generates: relationships: { manager: { data: null } }
527
551
  }, true);
528
552
  ```
529
553
 
554
+ ## 🔗 Clearing To-Many Relationships
555
+
556
+ To clear all items from a to-many relationship (ManyToMany, OneToMany), use the `emptyArrayRef()` function:
557
+
558
+ ```typescript
559
+ import { JsonApiJs, emptyArrayRef } from '@klerick/json-api-nestjs-sdk';
560
+
561
+ interface User {
562
+ id?: number;
563
+ firstName: string;
564
+ roles?: Role[];
565
+ }
566
+
567
+ const jsonSdk = JsonApiJs({ apiHost: 'http://localhost:3000', apiPrefix: 'api' }, true);
568
+
569
+ // Clear all roles from user
570
+ const user = jsonSdk.jsonApiSdkService.entity<User>('Users', {
571
+ id: 1,
572
+ firstName: 'John',
573
+ roles: emptyArrayRef() // This will send { data: [] } for the relationship
574
+ }, true);
575
+
576
+ const updatedUser = await jsonSdk.jsonApiSdkService.patchOne(user);
577
+ // Result: user.roles is now an empty array
578
+ ```
579
+
580
+ **Why emptyArrayRef is needed:**
581
+ - An empty array `[]` would be treated as an attribute (not a relationship)
582
+ - `emptyArrayRef()` marks it as a relationship that should be cleared
583
+ - At runtime, the SDK generates `{ data: [] }` in the JSON:API request body
584
+
585
+ **Comparison:**
586
+ ```typescript
587
+ // ❌ This won't work - empty array treated as attribute
588
+ const user = { id: 1, roles: [] };
589
+
590
+ // ✅ This works - explicitly clears the relationship
591
+ const user = { id: 1, roles: emptyArrayRef() };
592
+ // Generates: relationships: { roles: { data: [] } }
593
+ ```
594
+
530
595
  ---
531
596
 
532
597
  ## 🔍 Query Options
@@ -554,7 +619,7 @@ enum FilterOperand {
554
619
 
555
620
  ```typescript
556
621
  // Equal
557
- const users = await jsonSdk.jonApiSdkService.getAll(Users, {
622
+ const users = await jsonSdk.jsonApiSdkService.getAll(Users, {
558
623
  filter: {
559
624
  target: {
560
625
  isActive: { [FilterOperand.eq]: 'true' }
@@ -563,7 +628,7 @@ const users = await jsonSdk.jonApiSdkService.getAll(Users, {
563
628
  });
564
629
 
565
630
  // Not equal
566
- const inactiveUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
631
+ const inactiveUsers = await jsonSdk.jsonApiSdkService.getAll(Users, {
567
632
  filter: {
568
633
  target: {
569
634
  isActive: { [FilterOperand.ne]: 'true' }
@@ -572,7 +637,7 @@ const inactiveUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
572
637
  });
573
638
 
574
639
  // In array
575
- const specificUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
640
+ const specificUsers = await jsonSdk.jsonApiSdkService.getAll(Users, {
576
641
  filter: {
577
642
  target: {
578
643
  id: { [FilterOperand.in]: ['1', '2', '3'] }
@@ -581,7 +646,7 @@ const specificUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
581
646
  });
582
647
 
583
648
  // LIKE search
584
- const searchUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
649
+ const searchUsers = await jsonSdk.jsonApiSdkService.getAll(Users, {
585
650
  filter: {
586
651
  target: {
587
652
  login: { [FilterOperand.like]: 'john' }
@@ -590,7 +655,7 @@ const searchUsers = await jsonSdk.jonApiSdkService.getAll(Users, {
590
655
  });
591
656
 
592
657
  // Check null/not null
593
- const usersWithManager = await jsonSdk.jonApiSdkService.getAll(Users, {
658
+ const usersWithManager = await jsonSdk.jsonApiSdkService.getAll(Users, {
594
659
  filter: {
595
660
  target: {
596
661
  manager: { [FilterOperand.ne]: null }
@@ -598,7 +663,7 @@ const usersWithManager = await jsonSdk.jonApiSdkService.getAll(Users, {
598
663
  }
599
664
  });
600
665
 
601
- const usersWithoutManager = await jsonSdk.jonApiSdkService.getAll(Users, {
666
+ const usersWithoutManager = await jsonSdk.jsonApiSdkService.getAll(Users, {
602
667
  filter: {
603
668
  target: {
604
669
  manager: { [FilterOperand.eq]: null }
@@ -611,7 +676,7 @@ const usersWithoutManager = await jsonSdk.jonApiSdkService.getAll(Users, {
611
676
 
612
677
  ```typescript
613
678
  // Sort by single field
614
- const users = await jsonSdk.jonApiSdkService.getList(Users, {
679
+ const users = await jsonSdk.jsonApiSdkService.getList(Users, {
615
680
  sort: {
616
681
  target: {
617
682
  id: 'ASC'
@@ -620,7 +685,7 @@ const users = await jsonSdk.jonApiSdkService.getList(Users, {
620
685
  });
621
686
 
622
687
  // Sort by multiple fields
623
- const sortedUsers = await jsonSdk.jonApiSdkService.getList(Users, {
688
+ const sortedUsers = await jsonSdk.jsonApiSdkService.getList(Users, {
624
689
  sort: {
625
690
  target: {
626
691
  createdAt: 'DESC',
@@ -633,7 +698,7 @@ const sortedUsers = await jsonSdk.jonApiSdkService.getList(Users, {
633
698
  ### Pagination
634
699
 
635
700
  ```typescript
636
- const paginatedUsers = await jsonSdk.jonApiSdkService.getList(Users, {
701
+ const paginatedUsers = await jsonSdk.jsonApiSdkService.getList(Users, {
637
702
  page: {
638
703
  number: 1, // Page number (1-indexed)
639
704
  size: 20 // Items per page
@@ -645,17 +710,17 @@ const paginatedUsers = await jsonSdk.jonApiSdkService.getList(Users, {
645
710
 
646
711
  ```typescript
647
712
  // Include single relationship
648
- const users = await jsonSdk.jonApiSdkService.getAll(Users, {
713
+ const users = await jsonSdk.jsonApiSdkService.getAll(Users, {
649
714
  include: ['addresses']
650
715
  });
651
716
 
652
717
  // Include multiple relationships
653
- const usersWithAll = await jsonSdk.jonApiSdkService.getAll(Users, {
718
+ const usersWithAll = await jsonSdk.jsonApiSdkService.getAll(Users, {
654
719
  include: ['addresses', 'roles', 'comments', 'manager']
655
720
  });
656
721
 
657
722
  // Include nested relationships
658
- const usersWithNested = await jsonSdk.jonApiSdkService.getAll(Users, {
723
+ const usersWithNested = await jsonSdk.jsonApiSdkService.getAll(Users, {
659
724
  include: ['addresses', 'manager.addresses', 'roles']
660
725
  });
661
726
  ```
@@ -665,7 +730,7 @@ const usersWithNested = await jsonSdk.jonApiSdkService.getAll(Users, {
665
730
  Request only specific fields to reduce payload size.
666
731
 
667
732
  ```typescript
668
- const users = await jsonSdk.jonApiSdkService.getAll(Users, {
733
+ const users = await jsonSdk.jsonApiSdkService.getAll(Users, {
669
734
  fields: {
670
735
  users: ['firstName', 'lastName', 'email'],
671
736
  addresses: ['city', 'country']
package/cjs/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.nullRef = exports.adapterForAxios = exports.JsonApiSdkService = exports.JsonApiUtilsService = exports.QueryField = exports.FilterOperand = void 0;
3
+ exports.emptyArrayRef = exports.nullRef = exports.adapterForAxios = exports.JsonApiSdkService = exports.JsonApiUtilsService = exports.QueryField = exports.FilterOperand = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var json_api_nestjs_shared_1 = require("@klerick/json-api-nestjs-shared");
6
6
  Object.defineProperty(exports, "FilterOperand", { enumerable: true, get: function () { return json_api_nestjs_shared_1.FilterOperand; } });
@@ -12,4 +12,5 @@ tslib_1.__exportStar(require("./lib/json-api-js"), exports);
12
12
  var utils_1 = require("./lib/utils");
13
13
  Object.defineProperty(exports, "adapterForAxios", { enumerable: true, get: function () { return utils_1.adapterForAxios; } });
14
14
  Object.defineProperty(exports, "nullRef", { enumerable: true, get: function () { return utils_1.nullRef; } });
15
+ Object.defineProperty(exports, "emptyArrayRef", { enumerable: true, get: function () { return utils_1.emptyArrayRef; } });
15
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/json-api/json-api-nestjs-sdk/src/index.ts"],"names":[],"mappings":";;;;AAAA,0EAIyC;AAHvC,uHAAA,aAAa,OAAA;AAEb,oHAAA,UAAU,OAAA;AAGZ,yCAAuE;AAA9D,8GAAA,mBAAmB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAC/C,4DAAkC;AAClC,qCAAuD;AAA9C,wGAAA,eAAe,OAAA;AAAE,gGAAA,OAAO,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/json-api/json-api-nestjs-sdk/src/index.ts"],"names":[],"mappings":";;;;AAAA,0EAIyC;AAHvC,uHAAA,aAAa,OAAA;AAEb,oHAAA,UAAU,OAAA;AAGZ,yCAAuE;AAA9D,8GAAA,mBAAmB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAC/C,4DAAkC;AAClC,qCAAsE;AAA7D,wGAAA,eAAe,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,sGAAA,aAAa,OAAA"}
@@ -6,10 +6,14 @@ const http_1 = require("@angular/common/http");
6
6
  const token_1 = require("./token");
7
7
  const utils_1 = require("./utils");
8
8
  const service_1 = require("./service");
9
- const getProviders = (config) => [
9
+ const isFactory = (config) => typeof config === 'function';
10
+ const getProviders = (configOrFactory) => [
10
11
  {
11
12
  provide: token_1.JSON_API_SDK_CONFIG,
12
- useValue: (0, utils_1.resultConfig)(config),
13
+ useFactory: () => {
14
+ const config = isFactory(configOrFactory) ? configOrFactory() : configOrFactory;
15
+ return (0, utils_1.resultConfig)(config);
16
+ },
13
17
  },
14
18
  {
15
19
  provide: service_1.JsonApiUtilsService,
@@ -32,7 +36,7 @@ const getProviders = (config) => [
32
36
  },
33
37
  ];
34
38
  exports.getProviders = getProviders;
35
- const provideJsonApi = (config) => (0, core_1.makeEnvironmentProviders)((0, exports.getProviders)(config));
39
+ const provideJsonApi = (configOrFactory) => (0, core_1.makeEnvironmentProviders)((0, exports.getProviders)(configOrFactory));
36
40
  exports.provideJsonApi = provideJsonApi;
37
41
  var token_2 = require("./token");
38
42
  Object.defineProperty(exports, "AtomicFactory", { enumerable: true, get: function () { return token_2.AtomicFactory; } });
@@ -1 +1 @@
1
- {"version":3,"file":"json-api-angular.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs-sdk/src/lib/json-api-angular.ts"],"names":[],"mappings":";;;AAAA,wCAAiE;AACjE,+CAAkD;AAElD,mCAA6D;AAC7D,mCAAuC;AACvC,uCAImB;AAEZ,MAAM,YAAY,GAAG,CAAC,MAAqB,EAAE,EAAE,CAAC;IACrD;QACE,OAAO,EAAE,2BAAmB;QAC5B,QAAQ,EAAE,IAAA,oBAAY,EAAC,MAAM,CAAC;KAC/B;IACD;QACE,OAAO,EAAE,6BAAmB;QAC5B,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,6BAAmB,CAAC,IAAA,aAAM,EAAC,2BAAmB,CAAC,CAAC;KACvE;IACD;QACE,OAAO,EAAE,2BAAiB;QAC1B,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,2BAAiB,CACnB,IAAA,aAAM,EAAkB,iBAAiB,CAAC,EAC1C,IAAA,aAAM,EAAC,6BAAmB,CAAC,EAC3B,IAAA,aAAM,EAAC,2BAAmB,CAAC,CAC5B;KACJ;IACD;QACE,OAAO,EAAE,qBAAa;QACtB,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,mBAAmB,GAAG,IAAA,aAAM,EAAC,6BAAmB,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,IAAA,aAAM,EAAC,2BAAmB,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,IAAA,aAAM,EAAkB,iBAAiB,CAAC,CAAC;YAE9D,OAAO,GAAG,EAAE;gBACV,OAAO,IAAI,iCAAuB,CAChC,mBAAmB,EACnB,MAAM,EACN,UAAU,CACX,CAAC;YACJ,CAAC,CAAC;QACJ,CAAC;KACF;CACF,CAAC;AAlCW,QAAA,YAAY,gBAkCvB;AAEK,MAAM,cAAc,GAAG,CAAC,MAAqB,EAAE,EAAE,CACtD,IAAA,+BAAwB,EAAC,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC,CAAC;AADpC,QAAA,cAAc,kBACsB;AAEjD,iCAA6D;AAApD,sGAAA,aAAa,OAAA;AAAE,4GAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"json-api-angular.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs-sdk/src/lib/json-api-angular.ts"],"names":[],"mappings":";;;AAAA,wCAAiE;AACjE,+CAAkD;AAElD,mCAA6D;AAC7D,mCAAuC;AACvC,uCAImB;AAKnB,MAAM,SAAS,GAAG,CAAC,MAA8B,EAAkC,EAAE,CACnF,OAAO,MAAM,KAAK,UAAU,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,eAAuC,EAAE,EAAE,CAAC;IACvE;QACE,OAAO,EAAE,2BAAmB;QAC5B,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;YAChF,OAAO,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;KACF;IACD;QACE,OAAO,EAAE,6BAAmB;QAC5B,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,6BAAmB,CAAC,IAAA,aAAM,EAAC,2BAAmB,CAAC,CAAC;KACvE;IACD;QACE,OAAO,EAAE,2BAAiB;QAC1B,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,2BAAiB,CACnB,IAAA,aAAM,EAAkB,iBAAiB,CAAC,EAC1C,IAAA,aAAM,EAAC,6BAAmB,CAAC,EAC3B,IAAA,aAAM,EAAC,2BAAmB,CAAC,CAC5B;KACJ;IACD;QACE,OAAO,EAAE,qBAAa;QACtB,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,mBAAmB,GAAG,IAAA,aAAM,EAAC,6BAAmB,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,IAAA,aAAM,EAAC,2BAAmB,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,IAAA,aAAM,EAAkB,iBAAiB,CAAC,CAAC;YAE9D,OAAO,GAAG,EAAE;gBACV,OAAO,IAAI,iCAAuB,CAChC,mBAAmB,EACnB,MAAM,EACN,UAAU,CACX,CAAC;YACJ,CAAC,CAAC;QACJ,CAAC;KACF;CACF,CAAC;AArCW,QAAA,YAAY,gBAqCvB;AAEK,MAAM,cAAc,GAAG,CAAC,eAAuC,EAAE,EAAE,CACxE,IAAA,+BAAwB,EAAC,IAAA,oBAAY,EAAC,eAAe,CAAC,CAAC,CAAC;AAD7C,QAAA,cAAc,kBAC+B;AAE1D,iCAA6D;AAApD,sGAAA,aAAa,OAAA;AAAE,4GAAA,mBAAmB,OAAA"}
@@ -13,12 +13,12 @@ function JsonApiJs(config, returnPromise) {
13
13
  const resultJsonConfig = (0, utils_1.resultConfig)(jsonSdkConfig);
14
14
  const jsonApiUtilsService = new service_1.JsonApiUtilsService(resultJsonConfig);
15
15
  const httpInnerClient = adapter ? adapter : new fetch_inner_client_1.FetchInnerClient();
16
- const jonApiSdkService = new service_1.JsonApiSdkService(httpInnerClient, jsonApiUtilsService, resultJsonConfig);
16
+ const jsonApiSdkService = new service_1.JsonApiSdkService(httpInnerClient, jsonApiUtilsService, resultJsonConfig);
17
17
  jsonSdk['jsonApiUtilsService'] = jsonApiUtilsService;
18
- jsonSdk['jonApiSdkService'] = jonApiSdkService;
18
+ jsonSdk['jsonApiSdkService'] = jsonApiSdkService;
19
19
  jsonSdk['atomicFactory'] = () => new service_1.AtomicOperationsService(jsonApiUtilsService, resultJsonConfig, httpInnerClient);
20
20
  if (returnPromise) {
21
- jsonSdk['jonApiSdkService'] = new Proxy(jonApiSdkService, {
21
+ jsonSdk['jsonApiSdkService'] = new Proxy(jsonApiSdkService, {
22
22
  get(target, p) {
23
23
  // Special handling for entity() method - it returns EntityChain, not Observable
24
24
  if (p === 'entity') {
@@ -1 +1 @@
1
- {"version":3,"file":"json-api-js.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs-sdk/src/lib/json-api-js.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-api-js.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs-sdk/src/lib/json-api-js.ts"],"names":[],"mappings":";;AAmCA,8BA4FC;AAvHD,mCAAuC;AACvC,uCAImB;AACnB,qEAAgE;AAChE,+BAAqC;AAkBrC,MAAM,OAAO,GAAG,EAAS,CAAC;AAE1B,SAAgB,SAAS,CACvB,MAAkB,EAClB,aAAiB;IAEjB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC;IAC7C,MAAM,gBAAgB,GAAG,IAAA,oBAAY,EAAC,aAAa,CAAC,CAAC;IAErD,MAAM,mBAAmB,GAAG,IAAI,6BAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,qCAAgB,EAAE,CAAC;IACnE,MAAM,iBAAiB,GAAG,IAAI,2BAAiB,CAC7C,eAAe,EACf,mBAAmB,EACnB,gBAAgB,CACjB,CAAC;IACF,OAAO,CAAC,qBAAqB,CAAC,GAAG,mBAAmB,CAAC;IACrD,OAAO,CAAC,mBAAmB,CAAC,GAAG,iBAAiB,CAAC;IACjD,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,EAAE,CAC9B,IAAI,iCAAuB,CACzB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,CAChB,CAAC;IAEJ,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAE;YAC1D,GAAG,CAID,MAAS,EAAE,CAAI;gBACf,gFAAgF;gBAChF,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACnB,OAAO,CAAC,CAAC,GAAG,IAAS,EAAO,EAAE;wBAC5B,MAAM,MAAM,GAAI,MAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;wBAC/C,uDAAuD;wBACvD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;4BACrB,OAAO,MAAM,CAAC;wBAChB,CAAC;wBACD,0EAA0E;wBAC1E,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;4BACvB,GAAG,CAAC,WAAgB,EAAE,WAAmB;gCACvC,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;gCACpC,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;oCAC7B,OAAO,CAAC,GAAG,SAAc,EAAE,EAAE,CAC3B,IAAA,oBAAa,EAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;gCACtD,CAAC;gCACD,OAAO,EAAE,CAAC;4BACZ,CAAC;yBACF,CAAC,CAAC;oBACL,CAAC,CAAQ,CAAC;gBACZ,CAAC;gBAED,OAAO,CAAC,GAAG,GAAQ,EAAO,EAAE,CAC1B,IAAA,oBAAa,EAAE,MAAM,CAAC,CAAC,CAAS,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACzD,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,eAAe,CAAC,GAAG,GAAG,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,IAAI,iCAAuB,CACzB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,CAChB,EACD;gBACE,GAAG,CAID,MAAS,EAAE,CAAI;oBACf,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;wBAChB,OAAO,GAAG,EAAE,CAAC,IAAA,oBAAa,EAAC,MAAM,CAAC,GAAG,EAAE,CAAQ,CAAC;oBAClD,CAAC;oBAED,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;wBACpC,OAAO,CAAC,GAAG,GAAQ,EAAE,EAAE;4BACrB,aAAa;4BACb,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;4BAClB,OAAO,KAAK,CAAC;wBACf,CAAC,CAAC;oBACJ,CAAC;oBACD,OAAO,MAAM,CAAC,CAAC,CAAQ,CAAC;gBAC1B,CAAC;aACF,CACF,CAAC;YAEF,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -4,6 +4,7 @@ exports.JsonApiSdkService = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const operators_1 = require("rxjs/operators");
6
6
  const utils_1 = require("../utils");
7
+ const AS_PLAIN_RESULT = Symbol('asPlainResult');
7
8
  class JsonApiSdkService {
8
9
  constructor(http, jsonApiUtilsService, jsonApiSdkConfig) {
9
10
  this.http = http;
@@ -15,6 +16,8 @@ class JsonApiSdkService {
15
16
  const entityObj = Object.assign(instance, data);
16
17
  if (raw)
17
18
  return entityObj;
19
+ // Mark for plain result when used via chain
20
+ Reflect.set(entityObj, AS_PLAIN_RESULT, true);
18
21
  return new Proxy(this, {
19
22
  get: (target, method) => {
20
23
  const fn = target[method];
@@ -26,9 +29,8 @@ class JsonApiSdkService {
26
29
  });
27
30
  }
28
31
  getList(entityOrTypeName, params) {
29
- const name = typeof entityOrTypeName === 'string'
30
- ? entityOrTypeName
31
- : entityOrTypeName.name;
32
+ const asPlain = typeof entityOrTypeName === 'string';
33
+ const name = asPlain ? entityOrTypeName : entityOrTypeName.name;
32
34
  const query = this.jsonApiUtilsService.getQueryStringParams(params);
33
35
  return this.http
34
36
  .get(this.jsonApiUtilsService.getUrlForResource(name), {
@@ -36,8 +38,8 @@ class JsonApiSdkService {
36
38
  })
37
39
  .pipe((0, operators_1.map)((result) => {
38
40
  const resource = params
39
- ? this.jsonApiUtilsService.convertResponseData(result, params.include)
40
- : this.jsonApiUtilsService.convertResponseData(result);
41
+ ? this.jsonApiUtilsService.convertResponseData(result, params.include, asPlain)
42
+ : this.jsonApiUtilsService.convertResponseData(result, undefined, asPlain);
41
43
  const { totalItems, pageSize, pageNumber } = Object.assign({
42
44
  totalItems: 0,
43
45
  pageNumber: 0,
@@ -85,17 +87,17 @@ class JsonApiSdkService {
85
87
  if (!id) {
86
88
  return (0, rxjs_1.throwError)(() => new Error('Id for resource is required'));
87
89
  }
88
- const name = typeof entityOrTypeName === 'string'
89
- ? entityOrTypeName
90
- : entityOrTypeName.name;
90
+ const asPlain = typeof entityOrTypeName === 'string';
91
+ const name = asPlain ? entityOrTypeName : entityOrTypeName.name;
91
92
  const query = this.jsonApiUtilsService.getQueryStringParams(params);
92
93
  return this.http
93
94
  .get(`${this.jsonApiUtilsService.getUrlForResource(name)}/${id}`, {
94
95
  params: query.toObject(),
95
96
  })
96
- .pipe((0, operators_1.map)((result) => this.jsonApiUtilsService.convertResponseData(result, params?.include)));
97
+ .pipe((0, operators_1.map)((result) => this.jsonApiUtilsService.convertResponseData(result, params?.include, asPlain)));
97
98
  }
98
99
  postOne(entity) {
100
+ const asPlain = Reflect.has(entity, AS_PLAIN_RESULT);
99
101
  const { attributes, relationships } = this.jsonApiUtilsService.generateBody(entity);
100
102
  const body = {
101
103
  data: {
@@ -106,13 +108,14 @@ class JsonApiSdkService {
106
108
  };
107
109
  return this.http
108
110
  .post(this.jsonApiUtilsService.getUrlForResource(entity.constructor.name), body)
109
- .pipe((0, operators_1.map)((r) => this.jsonApiUtilsService.convertResponseData(r)));
111
+ .pipe((0, operators_1.map)((r) => this.jsonApiUtilsService.convertResponseData(r, (Object.keys(relationships).length > 0 ? Object.keys(relationships) : undefined), asPlain)));
110
112
  }
111
113
  patchOne(entity) {
112
114
  const id = Reflect.get(entity, this.jsonApiSdkConfig.idKey);
113
115
  if (!id) {
114
116
  return (0, rxjs_1.throwError)(() => new Error('Resource params should be instance of resource with id params'));
115
117
  }
118
+ const asPlain = Reflect.has(entity, AS_PLAIN_RESULT);
116
119
  const { attributes, relationships } = this.jsonApiUtilsService.generateBody(entity);
117
120
  const body = {
118
121
  data: {
@@ -128,7 +131,7 @@ class JsonApiSdkService {
128
131
  }
129
132
  return this.http
130
133
  .patch(`${this.jsonApiUtilsService.getUrlForResource(entity.constructor.name)}/${id}`, body)
131
- .pipe((0, operators_1.map)((r) => this.jsonApiUtilsService.convertResponseData(r)));
134
+ .pipe((0, operators_1.map)((r) => this.jsonApiUtilsService.convertResponseData(r, (Object.keys(relationships).length > 0 ? Object.keys(relationships) : undefined), asPlain)));
132
135
  }
133
136
  deleteOne(entity) {
134
137
  const id = Reflect.get(entity, this.jsonApiSdkConfig.idKey);