@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.
- package/CHANGELOG.md +25 -0
- package/README.md +115 -50
- package/cjs/src/index.js +2 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/lib/json-api-angular.js +7 -3
- package/cjs/src/lib/json-api-angular.js.map +1 -1
- package/cjs/src/lib/json-api-js.js +3 -3
- package/cjs/src/lib/json-api-js.js.map +1 -1
- package/cjs/src/lib/service/json-api-sdk.service.js +14 -11
- package/cjs/src/lib/service/json-api-sdk.service.js.map +1 -1
- package/cjs/src/lib/service/json-api-utils.service.js +93 -37
- package/cjs/src/lib/service/json-api-utils.service.js.map +1 -1
- package/cjs/src/lib/utils/utils.js +20 -0
- package/cjs/src/lib/utils/utils.js.map +1 -1
- package/cjs/src/ngModule.js.map +1 -1
- package/mjs/package.json +1 -0
- package/mjs/src/index.d.ts +1 -1
- package/mjs/src/index.js +1 -1
- package/mjs/src/index.js.map +1 -1
- package/mjs/src/lib/json-api-angular.d.ts +5 -7
- package/mjs/src/lib/json-api-angular.js +7 -3
- package/mjs/src/lib/json-api-angular.js.map +1 -1
- package/mjs/src/lib/json-api-js.d.ts +2 -2
- package/mjs/src/lib/json-api-js.js +3 -3
- package/mjs/src/lib/json-api-js.js.map +1 -1
- package/mjs/src/lib/service/json-api-sdk.service.js +14 -11
- package/mjs/src/lib/service/json-api-sdk.service.js.map +1 -1
- package/mjs/src/lib/service/json-api-utils.service.d.ts +4 -3
- package/mjs/src/lib/service/json-api-utils.service.js +94 -38
- package/mjs/src/lib/service/json-api-utils.service.js.map +1 -1
- package/mjs/src/lib/utils/utils.d.ts +10 -0
- package/mjs/src/lib/utils/utils.js +18 -0
- package/mjs/src/lib/utils/utils.js.map +1 -1
- package/mjs/src/ngModule.d.ts +1 -1
- package/mjs/src/ngModule.js.map +1 -1
- 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.
|
|
86
|
+
const users = await jsonSdk.jsonApiSdkService.getAll(Users);
|
|
86
87
|
|
|
87
88
|
// Fetch with filtering and relationships
|
|
88
|
-
const activeUsers = await jsonSdk.
|
|
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.
|
|
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.
|
|
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.
|
|
114
|
+
const updatedUser = await jsonSdk.jsonApiSdkService.patchOne(createdUser);
|
|
114
115
|
|
|
115
116
|
// Delete a user
|
|
116
|
-
await jsonSdk.
|
|
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.
|
|
256
|
+
const users = await jsonSdk.jsonApiSdkService.getAll(Users);
|
|
233
257
|
|
|
234
258
|
// With filtering
|
|
235
|
-
const activeUsers = await jsonSdk.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
319
|
+
const user = await jsonSdk.jsonApiSdkService.getOne(Users, '1');
|
|
296
320
|
|
|
297
321
|
// With relationships
|
|
298
|
-
const userWithRelations = await jsonSdk.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
376
|
+
const updatedUser = await jsonSdk.jsonApiSdkService.patchOne(user);
|
|
353
377
|
|
|
354
378
|
// Update relationships
|
|
355
|
-
const newAddress = await jsonSdk.
|
|
379
|
+
const newAddress = await jsonSdk.jsonApiSdkService.postOne(addressEntity);
|
|
356
380
|
user.addresses = newAddress;
|
|
357
381
|
|
|
358
|
-
const updatedUser = await jsonSdk.
|
|
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.
|
|
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.
|
|
403
|
+
await jsonSdk.jsonApiSdkService.deleteRelationships(user, 'roles');
|
|
380
404
|
|
|
381
405
|
// Remove manager from user
|
|
382
|
-
await jsonSdk.
|
|
406
|
+
await jsonSdk.jsonApiSdkService.deleteRelationships(user, 'manager');
|
|
383
407
|
|
|
384
408
|
// Remove all comments from user
|
|
385
|
-
await jsonSdk.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
486
|
+
const users = await jsonSdk.jsonApiSdkService.getAll<User>('Users', {
|
|
463
487
|
include: ['manager']
|
|
464
488
|
});
|
|
465
489
|
|
|
466
|
-
const user = await jsonSdk.
|
|
490
|
+
const user = await jsonSdk.jsonApiSdkService.getOne<User>('Users', '1', {
|
|
467
491
|
include: ['manager']
|
|
468
492
|
});
|
|
469
493
|
|
|
470
|
-
const userList = await jsonSdk.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
package/cjs/src/index.js.map
CHANGED
|
@@ -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,
|
|
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
|
|
9
|
+
const isFactory = (config) => typeof config === 'function';
|
|
10
|
+
const getProviders = (configOrFactory) => [
|
|
10
11
|
{
|
|
11
12
|
provide: token_1.JSON_API_SDK_CONFIG,
|
|
12
|
-
|
|
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 = (
|
|
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;
|
|
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
|
|
16
|
+
const jsonApiSdkService = new service_1.JsonApiSdkService(httpInnerClient, jsonApiUtilsService, resultJsonConfig);
|
|
17
17
|
jsonSdk['jsonApiUtilsService'] = jsonApiUtilsService;
|
|
18
|
-
jsonSdk['
|
|
18
|
+
jsonSdk['jsonApiSdkService'] = jsonApiSdkService;
|
|
19
19
|
jsonSdk['atomicFactory'] = () => new service_1.AtomicOperationsService(jsonApiUtilsService, resultJsonConfig, httpInnerClient);
|
|
20
20
|
if (returnPromise) {
|
|
21
|
-
jsonSdk['
|
|
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":";;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,
|
|
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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"}
|
|
@@ -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
|
|
30
|
-
|
|
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
|
|
89
|
-
|
|
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);
|