@ackplus/nest-crud-request 1.1.9 → 1.1.18

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/README.md CHANGED
@@ -1,11 +1,713 @@
1
- # nest-crud-request
1
+ # @ackplus/nest-crud-request
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ Framework-agnostic query builder for REST APIs - build complex queries with filtering, relations, and pagination for both frontend and backend.
4
4
 
5
- ## Building
5
+ ## Features
6
6
 
7
- Run `nx build nest-crud-request` to build the library.
7
+ - 🎯 **Framework-agnostic** - Works with any JavaScript/TypeScript framework
8
+ - 🌐 **Frontend & Backend** - Use in React, Angular, Vue, Node.js, or any other environment
9
+ - 🔍 **Type-safe** - Full TypeScript support with comprehensive type definitions
10
+ - 🔗 **Fluent API** - Chainable methods for building complex queries
11
+ - 📦 **Zero dependencies** - Lightweight with minimal footprint
12
+ - 🎨 **Clean syntax** - Intuitive and readable query construction
13
+ - 🔄 **Flexible output** - Export as query string, JSON, or object
8
14
 
9
- ## Running unit tests
15
+ ## Installation
10
16
 
11
- Run `nx test nest-crud-request` to execute the unit tests via [Jest](https://jestjs.io).
17
+ ```bash
18
+ npm install @ackplus/nest-crud-request
19
+ # or
20
+ pnpm add @ackplus/nest-crud-request
21
+ # or
22
+ yarn add @ackplus/nest-crud-request
23
+ ```
24
+
25
+ ## Quick Start
26
+
27
+ ```typescript
28
+ import { QueryBuilder, WhereOperatorEnum, OrderDirectionEnum } from '@ackplus/nest-crud-request';
29
+
30
+ // Create a query builder
31
+ const query = new QueryBuilder()
32
+ .where('isActive', WhereOperatorEnum.EQ, true)
33
+ .andWhere('role', WhereOperatorEnum.IN, ['admin', 'moderator'])
34
+ .addRelation('posts', ['id', 'title'])
35
+ .setSkip(0)
36
+ .setTake(10)
37
+ .addOrder('createdAt', OrderDirectionEnum.DESC);
38
+
39
+ // Convert to query string parameters
40
+ const params = query.toObject();
41
+ // {
42
+ // where: '{"isActive":{"$eq":true},"$and":[{"role":{"$in":["admin","moderator"]}}]}',
43
+ // relations: '{"posts":{"select":["id","title"]}}',
44
+ // skip: 0,
45
+ // take: 10,
46
+ // order: '{"createdAt":"DESC"}'
47
+ // }
48
+
49
+ // Use with fetch or axios
50
+ const response = await fetch(`/api/users?${new URLSearchParams(params)}`);
51
+ ```
52
+
53
+ ## Usage Examples
54
+
55
+ ### Frontend Usage (React)
56
+
57
+ ```typescript
58
+ import { QueryBuilder, WhereOperatorEnum, OrderDirectionEnum } from '@ackplus/nest-crud-request';
59
+ import { useState, useEffect } from 'react';
60
+
61
+ function UserList() {
62
+ const [users, setUsers] = useState([]);
63
+ const [page, setPage] = useState(0);
64
+ const pageSize = 10;
65
+
66
+ useEffect(() => {
67
+ const fetchUsers = async () => {
68
+ const query = new QueryBuilder()
69
+ .where('isActive', WhereOperatorEnum.EQ, true)
70
+ .addRelation('posts')
71
+ .setSkip(page * pageSize)
72
+ .setTake(pageSize)
73
+ .addOrder('createdAt', OrderDirectionEnum.DESC);
74
+
75
+ const params = query.toObject();
76
+ const queryString = new URLSearchParams(params).toString();
77
+
78
+ const response = await fetch(`/api/users?${queryString}`);
79
+ const data = await response.json();
80
+ setUsers(data);
81
+ };
82
+
83
+ fetchUsers();
84
+ }, [page]);
85
+
86
+ return (
87
+ <div>
88
+ {users.map(user => (
89
+ <div key={user.id}>{user.email}</div>
90
+ ))}
91
+ <button onClick={() => setPage(page - 1)} disabled={page === 0}>
92
+ Previous
93
+ </button>
94
+ <button onClick={() => setPage(page + 1)}>
95
+ Next
96
+ </button>
97
+ </div>
98
+ );
99
+ }
100
+ ```
101
+
102
+ ### Frontend Usage (Angular)
103
+
104
+ ```typescript
105
+ import { QueryBuilder, WhereOperatorEnum, OrderDirectionEnum } from '@ackplus/nest-crud-request';
106
+ import { HttpClient } from '@angular/common/http';
107
+ import { Injectable } from '@angular/core';
108
+ import { Observable } from 'rxjs';
109
+
110
+ @Injectable()
111
+ export class UserService {
112
+ constructor(private http: HttpClient) {}
113
+
114
+ getUsers(page: number = 0, pageSize: number = 10): Observable<User[]> {
115
+ const query = new QueryBuilder()
116
+ .where('isActive', WhereOperatorEnum.EQ, true)
117
+ .addRelation('posts')
118
+ .setSkip(page * pageSize)
119
+ .setTake(pageSize)
120
+ .addOrder('createdAt', OrderDirectionEnum.DESC);
121
+
122
+ const params = query.toObject();
123
+
124
+ return this.http.get<User[]>('/api/users', { params });
125
+ }
126
+
127
+ searchUsers(searchTerm: string): Observable<User[]> {
128
+ const query = new QueryBuilder()
129
+ .where((builder) => {
130
+ builder
131
+ .where('email', WhereOperatorEnum.ILIKE, `%${searchTerm}%`)
132
+ .orWhere('firstName', WhereOperatorEnum.ILIKE, `%${searchTerm}%`)
133
+ .orWhere('lastName', WhereOperatorEnum.ILIKE, `%${searchTerm}%`);
134
+ })
135
+ .addOrder('email', OrderDirectionEnum.ASC);
136
+
137
+ const params = query.toObject();
138
+
139
+ return this.http.get<User[]>('/api/users', { params });
140
+ }
141
+ }
142
+ ```
143
+
144
+ ### Frontend Usage (Vue 3)
145
+
146
+ ```typescript
147
+ import { QueryBuilder, WhereOperatorEnum, OrderDirectionEnum } from '@ackplus/nest-crud-request';
148
+ import { ref, onMounted } from 'vue';
149
+ import axios from 'axios';
150
+
151
+ export function useUsers() {
152
+ const users = ref([]);
153
+ const loading = ref(false);
154
+ const page = ref(0);
155
+ const pageSize = 10;
156
+
157
+ const fetchUsers = async () => {
158
+ loading.value = true;
159
+
160
+ const query = new QueryBuilder()
161
+ .where('isActive', WhereOperatorEnum.EQ, true)
162
+ .addRelation('posts')
163
+ .setSkip(page.value * pageSize)
164
+ .setTake(pageSize)
165
+ .addOrder('createdAt', OrderDirectionEnum.DESC);
166
+
167
+ const params = query.toObject();
168
+
169
+ const response = await axios.get('/api/users', { params });
170
+ users.value = response.data;
171
+ loading.value = false;
172
+ };
173
+
174
+ const searchUsers = async (searchTerm: string) => {
175
+ const query = new QueryBuilder()
176
+ .where((builder) => {
177
+ builder
178
+ .where('email', WhereOperatorEnum.ILIKE, `%${searchTerm}%`)
179
+ .orWhere('firstName', WhereOperatorEnum.ILIKE, `%${searchTerm}%`);
180
+ });
181
+
182
+ const params = query.toObject();
183
+ const response = await axios.get('/api/users', { params });
184
+ users.value = response.data;
185
+ };
186
+
187
+ onMounted(fetchUsers);
188
+
189
+ return {
190
+ users,
191
+ loading,
192
+ page,
193
+ fetchUsers,
194
+ searchUsers,
195
+ };
196
+ }
197
+ ```
198
+
199
+ ### Backend Usage (Node.js/Express)
200
+
201
+ ```typescript
202
+ import { QueryBuilder, WhereOperatorEnum } from '@ackplus/nest-crud-request';
203
+
204
+ // Parse query from request
205
+ app.get('/api/users', (req, res) => {
206
+ // Build query from request params
207
+ const query = new QueryBuilder({
208
+ where: req.query.where,
209
+ relations: req.query.relations,
210
+ select: req.query.select,
211
+ skip: req.query.skip ? parseInt(req.query.skip) : 0,
212
+ take: req.query.take ? parseInt(req.query.take) : 10,
213
+ order: req.query.order,
214
+ });
215
+
216
+ // Use the query to fetch data from database
217
+ // ... your database logic
218
+ });
219
+ ```
220
+
221
+ ## API Reference
222
+
223
+ ### QueryBuilder
224
+
225
+ #### Constructor
226
+
227
+ ```typescript
228
+ new QueryBuilder(options?: QueryBuilderOptions)
229
+ ```
230
+
231
+ #### Methods
232
+
233
+ ##### `setOptions(options: QueryBuilderOptions): this`
234
+
235
+ Set all options at once.
236
+
237
+ ```typescript
238
+ query.setOptions({
239
+ where: { isActive: { $eq: true } },
240
+ relations: ['posts'],
241
+ skip: 0,
242
+ take: 10,
243
+ });
244
+ ```
245
+
246
+ ##### `mergeOptions(options: QueryBuilderOptions, deep?: boolean): this`
247
+
248
+ Merge options with existing options.
249
+
250
+ ```typescript
251
+ query.mergeOptions({
252
+ skip: 10,
253
+ take: 20,
254
+ });
255
+ ```
256
+
257
+ ##### `addSelect(fields: string | string[]): this`
258
+
259
+ Add fields to select.
260
+
261
+ ```typescript
262
+ query.addSelect(['id', 'email', 'firstName']);
263
+ query.addSelect('lastName');
264
+ ```
265
+
266
+ ##### `removeSelect(fields: string | string[]): this`
267
+
268
+ Remove fields from select.
269
+
270
+ ```typescript
271
+ query.removeSelect(['password', 'secretKey']);
272
+ ```
273
+
274
+ ##### `addRelation(relation: string, select?: string[], where?: Record<string, any>): this`
275
+
276
+ Add a relation to load.
277
+
278
+ ```typescript
279
+ // Simple relation
280
+ query.addRelation('posts');
281
+
282
+ // Relation with specific fields
283
+ query.addRelation('posts', ['id', 'title', 'content']);
284
+
285
+ // Relation with filter
286
+ query.addRelation('posts', ['id', 'title'], {
287
+ published: { $eq: true }
288
+ });
289
+ ```
290
+
291
+ ##### `removeRelation(relation: string): this`
292
+
293
+ Remove a relation.
294
+
295
+ ```typescript
296
+ query.removeRelation('posts');
297
+ ```
298
+
299
+ ##### `where(...args: WhereBuilderCondition): this`
300
+
301
+ Set where condition (replaces existing).
302
+
303
+ ```typescript
304
+ // Simple equality
305
+ query.where('email', 'john@example.com');
306
+
307
+ // With operator
308
+ query.where('age', WhereOperatorEnum.GT, 18);
309
+
310
+ // Object syntax
311
+ query.where({ isActive: { $eq: true } });
312
+
313
+ // Function syntax for complex conditions
314
+ query.where((builder) => {
315
+ builder
316
+ .where('role', WhereOperatorEnum.EQ, 'admin')
317
+ .orWhere('role', WhereOperatorEnum.EQ, 'moderator');
318
+ });
319
+ ```
320
+
321
+ ##### `andWhere(...args: WhereBuilderCondition): this`
322
+
323
+ Add an AND where condition.
324
+
325
+ ```typescript
326
+ query.where('isActive', WhereOperatorEnum.EQ, true)
327
+ .andWhere('role', WhereOperatorEnum.EQ, 'admin');
328
+ ```
329
+
330
+ ##### `orWhere(...args: WhereBuilderCondition): this`
331
+
332
+ Add an OR where condition.
333
+
334
+ ```typescript
335
+ query.where('role', WhereOperatorEnum.EQ, 'admin')
336
+ .orWhere('role', WhereOperatorEnum.EQ, 'moderator');
337
+ ```
338
+
339
+ ##### `addOrder(orderBy: string, order: OrderDirectionEnum): this`
340
+
341
+ Add an order clause.
342
+
343
+ ```typescript
344
+ query.addOrder('createdAt', OrderDirectionEnum.DESC);
345
+ query.addOrder('email', OrderDirectionEnum.ASC);
346
+ ```
347
+
348
+ ##### `removeOrder(orderBy: string): this`
349
+
350
+ Remove an order clause.
351
+
352
+ ```typescript
353
+ query.removeOrder('createdAt');
354
+ ```
355
+
356
+ ##### `setSkip(skip: number): this`
357
+
358
+ Set the skip (offset) value.
359
+
360
+ ```typescript
361
+ query.setSkip(10);
362
+ ```
363
+
364
+ ##### `setTake(take: number): this`
365
+
366
+ Set the take (limit) value.
367
+
368
+ ```typescript
369
+ query.setTake(10);
370
+ ```
371
+
372
+ ##### `setWithDeleted(withDeleted: boolean): this`
373
+
374
+ Include soft-deleted records.
375
+
376
+ ```typescript
377
+ query.setWithDeleted(true);
378
+ ```
379
+
380
+ ##### `setOnlyDeleted(onlyDeleted: boolean): this`
381
+
382
+ Only show soft-deleted records.
383
+
384
+ ```typescript
385
+ query.setOnlyDeleted(true);
386
+ ```
387
+
388
+ ##### `set(key: string, value: any): this`
389
+
390
+ Set a custom option.
391
+
392
+ ```typescript
393
+ query.set('customField', 'customValue');
394
+ ```
395
+
396
+ ##### `toObject(constrainToNestedObject?: boolean): QueryBuilderOptions`
397
+
398
+ Convert to object (suitable for query parameters).
399
+
400
+ ```typescript
401
+ const params = query.toObject();
402
+ // By default, nested objects are converted to JSON strings
403
+ // {
404
+ // where: '{"isActive":{"$eq":true}}',
405
+ // relations: '["posts"]',
406
+ // skip: 0,
407
+ // take: 10
408
+ // }
409
+
410
+ // Keep nested objects as objects
411
+ const paramsNested = query.toObject(true);
412
+ // {
413
+ // where: { isActive: { $eq: true } },
414
+ // relations: ['posts'],
415
+ // skip: 0,
416
+ // take: 10
417
+ // }
418
+ ```
419
+
420
+ ##### `toJson(): string`
421
+
422
+ Convert to JSON string.
423
+
424
+ ```typescript
425
+ const json = query.toJson();
426
+ // '{"where":{"isActive":{"$eq":true}},"relations":["posts"],"skip":0,"take":10}'
427
+ ```
428
+
429
+ ### WhereBuilder
430
+
431
+ The WhereBuilder is used internally by QueryBuilder but can also be used standalone.
432
+
433
+ ```typescript
434
+ import { WhereBuilder, WhereOperatorEnum } from '@ackplus/nest-crud-request';
435
+
436
+ const whereBuilder = new WhereBuilder()
437
+ .where('isActive', WhereOperatorEnum.EQ, true)
438
+ .andWhere('role', WhereOperatorEnum.IN, ['admin', 'moderator']);
439
+
440
+ const whereObject = whereBuilder.toObject();
441
+ const whereJson = whereBuilder.toJson();
442
+ ```
443
+
444
+ ### Operators
445
+
446
+ ```typescript
447
+ enum WhereOperatorEnum {
448
+ EQ = '$eq', // Equal
449
+ NOT_EQ = '$ne', // Not equal
450
+ GT = '$gt', // Greater than
451
+ GT_OR_EQ = '$gte', // Greater than or equal
452
+ LT = '$lt', // Less than
453
+ LT_OR_EQ = '$lte', // Less than or equal
454
+ IN = '$in', // In array
455
+ NOT_IN = '$notIn', // Not in array
456
+ LIKE = '$like', // Like (case-sensitive)
457
+ NOT_LIKE = '$notLike', // Not like
458
+ ILIKE = '$iLike', // Like (case-insensitive)
459
+ NOT_ILIKE = '$notIlike', // Not like (case-insensitive)
460
+ IS_NULL = '$isNull', // Is null
461
+ IS_NOT_NULL = '$isNotNull', // Is not null
462
+ BETWEEN = '$between', // Between
463
+ NOT_BETWEEN = '$notBetween', // Not between
464
+ IS_TRUE = '$isTrue', // Is true
465
+ IS_FALSE = '$isFalse', // Is false
466
+ }
467
+ ```
468
+
469
+ ### Order Direction
470
+
471
+ ```typescript
472
+ enum OrderDirectionEnum {
473
+ ASC = 'ASC',
474
+ DESC = 'DESC',
475
+ }
476
+ ```
477
+
478
+ ## Advanced Examples
479
+
480
+ ### Complex Filtering
481
+
482
+ ```typescript
483
+ const query = new QueryBuilder()
484
+ .where((builder) => {
485
+ builder
486
+ .where('isActive', WhereOperatorEnum.EQ, true)
487
+ .andWhere((subBuilder) => {
488
+ subBuilder
489
+ .where('role', WhereOperatorEnum.EQ, 'admin')
490
+ .orWhere('role', WhereOperatorEnum.EQ, 'moderator');
491
+ })
492
+ .andWhere('age', WhereOperatorEnum.BETWEEN, [18, 65]);
493
+ });
494
+
495
+ // Results in:
496
+ // {
497
+ // isActive: { $eq: true },
498
+ // $and: [
499
+ // {
500
+ // $or: [
501
+ // { role: { $eq: 'admin' } },
502
+ // { role: { $eq: 'moderator' } }
503
+ // ]
504
+ // },
505
+ // { age: { $between: [18, 65] } }
506
+ // ]
507
+ // }
508
+ ```
509
+
510
+ ### Search Functionality
511
+
512
+ ```typescript
513
+ function buildSearchQuery(searchTerm: string) {
514
+ return new QueryBuilder()
515
+ .where((builder) => {
516
+ builder
517
+ .where('email', WhereOperatorEnum.ILIKE, `%${searchTerm}%`)
518
+ .orWhere('firstName', WhereOperatorEnum.ILIKE, `%${searchTerm}%`)
519
+ .orWhere('lastName', WhereOperatorEnum.ILIKE, `%${searchTerm}%`);
520
+ })
521
+ .addOrder('email', OrderDirectionEnum.ASC);
522
+ }
523
+
524
+ // Usage
525
+ const searchQuery = buildSearchQuery('john');
526
+ const params = searchQuery.toObject();
527
+ ```
528
+
529
+ ### Pagination Helper
530
+
531
+ ```typescript
532
+ function buildPaginatedQuery(page: number, pageSize: number = 10) {
533
+ return new QueryBuilder()
534
+ .setSkip(page * pageSize)
535
+ .setTake(pageSize);
536
+ }
537
+
538
+ // Usage
539
+ const paginatedQuery = buildPaginatedQuery(2, 20); // Page 3, 20 items per page
540
+ ```
541
+
542
+ ### Reusable Query Builder
543
+
544
+ ```typescript
545
+ class UserQueryBuilder {
546
+ private builder: QueryBuilder;
547
+
548
+ constructor() {
549
+ this.builder = new QueryBuilder();
550
+ }
551
+
552
+ activeUsers() {
553
+ this.builder.andWhere('isActive', WhereOperatorEnum.EQ, true);
554
+ return this;
555
+ }
556
+
557
+ admins() {
558
+ this.builder.andWhere('role', WhereOperatorEnum.EQ, 'admin');
559
+ return this;
560
+ }
561
+
562
+ withPosts() {
563
+ this.builder.addRelation('posts', ['id', 'title', 'createdAt']);
564
+ return this;
565
+ }
566
+
567
+ paginate(page: number, pageSize: number = 10) {
568
+ this.builder.setSkip(page * pageSize).setTake(pageSize);
569
+ return this;
570
+ }
571
+
572
+ orderByNewest() {
573
+ this.builder.addOrder('createdAt', OrderDirectionEnum.DESC);
574
+ return this;
575
+ }
576
+
577
+ build() {
578
+ return this.builder.toObject();
579
+ }
580
+ }
581
+
582
+ // Usage
583
+ const params = new UserQueryBuilder()
584
+ .activeUsers()
585
+ .admins()
586
+ .withPosts()
587
+ .paginate(0, 10)
588
+ .orderByNewest()
589
+ .build();
590
+ ```
591
+
592
+ ### Dynamic Filters
593
+
594
+ ```typescript
595
+ interface FilterOptions {
596
+ search?: string;
597
+ role?: string;
598
+ isActive?: boolean;
599
+ minAge?: number;
600
+ maxAge?: number;
601
+ }
602
+
603
+ function buildDynamicQuery(filters: FilterOptions) {
604
+ const query = new QueryBuilder();
605
+
606
+ if (filters.search) {
607
+ query.where((builder) => {
608
+ builder
609
+ .where('email', WhereOperatorEnum.ILIKE, `%${filters.search}%`)
610
+ .orWhere('firstName', WhereOperatorEnum.ILIKE, `%${filters.search}%`)
611
+ .orWhere('lastName', WhereOperatorEnum.ILIKE, `%${filters.search}%`);
612
+ });
613
+ }
614
+
615
+ if (filters.role) {
616
+ query.andWhere('role', WhereOperatorEnum.EQ, filters.role);
617
+ }
618
+
619
+ if (filters.isActive !== undefined) {
620
+ query.andWhere('isActive', WhereOperatorEnum.EQ, filters.isActive);
621
+ }
622
+
623
+ if (filters.minAge !== undefined && filters.maxAge !== undefined) {
624
+ query.andWhere('age', WhereOperatorEnum.BETWEEN, [filters.minAge, filters.maxAge]);
625
+ } else if (filters.minAge !== undefined) {
626
+ query.andWhere('age', WhereOperatorEnum.GT_OR_EQ, filters.minAge);
627
+ } else if (filters.maxAge !== undefined) {
628
+ query.andWhere('age', WhereOperatorEnum.LT_OR_EQ, filters.maxAge);
629
+ }
630
+
631
+ return query;
632
+ }
633
+
634
+ // Usage
635
+ const params = buildDynamicQuery({
636
+ search: 'john',
637
+ role: 'admin',
638
+ isActive: true,
639
+ minAge: 18,
640
+ maxAge: 65,
641
+ }).toObject();
642
+ ```
643
+
644
+ ## TypeScript Support
645
+
646
+ Full TypeScript support with type definitions:
647
+
648
+ ```typescript
649
+ import {
650
+ QueryBuilder,
651
+ QueryBuilderOptions,
652
+ WhereOperatorEnum,
653
+ OrderDirectionEnum,
654
+ WhereBuilder,
655
+ WhereOptions,
656
+ RelationOptions,
657
+ } from '@ackplus/nest-crud-request';
658
+
659
+ // Type-safe query building
660
+ const options: QueryBuilderOptions = {
661
+ where: { isActive: { $eq: true } },
662
+ relations: ['posts'],
663
+ select: ['id', 'email'],
664
+ skip: 0,
665
+ take: 10,
666
+ order: { createdAt: 'DESC' },
667
+ };
668
+
669
+ const query = new QueryBuilder(options);
670
+ ```
671
+
672
+ ## Best Practices
673
+
674
+ 1. **Validate user input** - Always sanitize and validate search terms and filters from user input
675
+ 2. **Set reasonable limits** - Use `setTake()` with reasonable defaults to prevent large data transfers
676
+ 3. **Use select fields** - Only select fields you need to reduce payload size
677
+ 4. **Reuse query builders** - Create reusable query builder classes for common patterns
678
+ 5. **Type your responses** - Use TypeScript interfaces for API responses
679
+ 6. **Handle errors** - Always handle network errors and invalid responses
680
+ 7. **Cache when possible** - Cache query results when data doesn't change frequently
681
+ 8. **Optimize relations** - Only load relations you actually need
682
+
683
+ ## Framework-Specific Tips
684
+
685
+ ### React
686
+
687
+ - Use `useMemo` to memoize query builders
688
+ - Create custom hooks for common queries
689
+ - Combine with React Query or SWR for caching
690
+
691
+ ### Angular
692
+
693
+ - Create service classes for query building
694
+ - Use Angular's HttpClient for automatic JSON parsing
695
+ - Leverage RxJS operators for query composition
696
+
697
+ ### Vue
698
+
699
+ - Use composables for query logic
700
+ - Leverage Vue's reactivity for dynamic queries
701
+ - Combine with Pinia for state management
702
+
703
+ ## License
704
+
705
+ MIT
706
+
707
+ ## Contributing
708
+
709
+ Contributions are welcome! Please feel free to submit a Pull Request.
710
+
711
+ ## Related Packages
712
+
713
+ - [@ackplus/nest-crud](../nest-crud) - NestJS CRUD operations with TypeORM
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./lib/query-builder"), exports);
18
+ __exportStar(require("./lib/where-builder"), exports);
19
+ __exportStar(require("./lib/types"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,sDAAoC;AACpC,8CAA4B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/lib/query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElE,OAAO,EAAgB,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGtE,qBAAa,YAAY;IAErB,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO,CAAC,eAAe,CAA0C;gBAErD,OAAO,CAAC,EAAE,mBAAmB;IAMzC,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAO9C,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,UAAQ,GAAG,IAAI;IAc9D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAa1C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAY7C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKnF,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKtC,KAAK,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK3C,QAAQ,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK9C,OAAO,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAQ1D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAKlC,QAAQ,CAAC,uBAAuB,UAAQ;;;;;;;;;;;IAoDxC,MAAM;CAKT"}
@@ -34,7 +34,6 @@ class QueryBuilder {
34
34
  return this;
35
35
  }
36
36
  addSelect(fields) {
37
- // Ensure select is always an array
38
37
  if (!this.options.select || typeof this.options.select === 'string') {
39
38
  this.options.select = [];
40
39
  }
@@ -47,7 +46,6 @@ class QueryBuilder {
47
46
  return this;
48
47
  }
49
48
  removeSelect(fields) {
50
- // Ensure select is an array before filtering
51
49
  if (this.options.select && Array.isArray(this.options.select)) {
52
50
  if (Array.isArray(fields)) {
53
51
  this.options.select = this.options.select.filter(field => !fields.includes(field));
@@ -115,7 +113,6 @@ class QueryBuilder {
115
113
  const options = {
116
114
  ...this.options,
117
115
  };
118
- // Convert where conditions to JSON string
119
116
  if (this.whereBuilder.hasConditions()) {
120
117
  if (constrainToNestedObject) {
121
118
  options.where = this.whereBuilder.toObject();
@@ -127,7 +124,6 @@ class QueryBuilder {
127
124
  else {
128
125
  delete options.where;
129
126
  }
130
- // Convert relations to JSON string
131
127
  if (this.relationBuilder.hasRelations()) {
132
128
  if (constrainToNestedObject) {
133
129
  options.relations = this.relationBuilder.toObject();
@@ -139,7 +135,6 @@ class QueryBuilder {
139
135
  else {
140
136
  delete options.relations;
141
137
  }
142
- // Convert order to JSON string if it exists
143
138
  if (options.order && Object.keys(options.order).length > 0) {
144
139
  if (constrainToNestedObject) {
145
140
  options.order = options.order;
@@ -151,7 +146,6 @@ class QueryBuilder {
151
146
  else {
152
147
  delete options.order;
153
148
  }
154
- // Convert select to JSON string if it exists
155
149
  if (options.select && options.select.length > 0) {
156
150
  if (constrainToNestedObject) {
157
151
  options.select = options.select;
@@ -171,3 +165,4 @@ class QueryBuilder {
171
165
  }
172
166
  }
173
167
  exports.QueryBuilder = QueryBuilder;
168
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/lib/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-builder.d.ts","sourceRoot":"","sources":["../../src/lib/relation-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAuB,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/E,qBAAa,eAAe;IAExB,OAAO,CAAC,SAAS,CAAsB;gBAE3B,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM;IAOhD,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAe9C,KAAK,IAAI,IAAI;IAKb,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAgB3E,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,IAAI,OAAO;IAIvB,QAAQ,IAAI,cAAc;IAI1B,MAAM,IAAI,MAAM;CAInB"}
@@ -60,3 +60,4 @@ class RelationBuilder {
60
60
  }
61
61
  }
62
62
  exports.RelationBuilder = RelationBuilder;
63
+ //# sourceMappingURL=relation-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-builder.js","sourceRoot":"","sources":["../../src/lib/relation-builder.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAEhB,SAAS,GAAmB,EAAE,CAAC;IAEvC,YAAY,SAAoC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,eAAe,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1F,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,SAA0B;QACnC,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,QAAgB,EAAE,MAAiB,EAAE,KAA2B;QAChE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,GAAQ,EAAE,CAAC;YACpB,IAAI,MAAM,EAAE,CAAC;gBACT,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,CAAC;YACD,IAAI,KAAK,EAAE,CAAC;gBACR,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,QAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CAEJ;AAhED,0CAgEC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IACrC,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,oBAAY,wBAAwB;IAChC,GAAG,SAAS;IACZ,EAAE,QAAQ;CACb;AAED,oBAAY,iBAAiB;IACzB,EAAE,QAAQ;IACV,MAAM,QAAQ;IACd,EAAE,QAAQ;IACV,QAAQ,SAAS;IACjB,EAAE,QAAQ;IACV,QAAQ,SAAS;IACjB,EAAE,QAAQ;IACV,MAAM,WAAW;IACjB,IAAI,UAAU;IACd,QAAQ,aAAa;IACrB,KAAK,WAAW;IAChB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,WAAW,eAAe;IAC1B,OAAO,aAAa;IACpB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAED,oBAAY,kBAAkB;IAC1B,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,MAAM,MAAM,WAAW,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACnC,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,EAAE,CAAC;AAGvD,MAAM,MAAM,mBAAmB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC;AAE3E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC"}
@@ -32,3 +32,4 @@ var OrderDirectionEnum;
32
32
  OrderDirectionEnum["ASC"] = "ASC";
33
33
  OrderDirectionEnum["DESC"] = "DESC";
34
34
  })(OrderDirectionEnum || (exports.OrderDirectionEnum = OrderDirectionEnum = {}));
35
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";;;AAYA,IAAY,wBAGX;AAHD,WAAY,wBAAwB;IAChC,wCAAY,CAAA;IACZ,sCAAU,CAAA;AACd,CAAC,EAHW,wBAAwB,wCAAxB,wBAAwB,QAGnC;AAED,IAAY,iBAmBX;AAnBD,WAAY,iBAAiB;IACzB,+BAAU,CAAA;IACV,mCAAc,CAAA;IACd,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,+BAAU,CAAA;IACV,sCAAiB,CAAA;IACjB,mCAAc,CAAA;IACd,0CAAqB,CAAA;IACrB,qCAAgB,CAAA;IAChB,4CAAuB,CAAA;IACvB,wCAAmB,CAAA;IACnB,+CAA0B,CAAA;IAC1B,yCAAoB,CAAA;IACpB,gDAA2B,CAAA;IAC3B,wCAAmB,CAAA;IACnB,0CAAqB,CAAA;AACzB,CAAC,EAnBW,iBAAiB,iCAAjB,iBAAiB,QAmB5B;AAED,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,iCAAW,CAAA;IACX,mCAAa,CAAA;AACjB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAUvD"}
@@ -12,3 +12,4 @@ function deepMerge(target, source) {
12
12
  ...source,
13
13
  };
14
14
  }
15
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":";;AAAA,8BAUC;AAVD,SAAgB,SAAS,CAAC,MAAW,EAAE,MAAW;IAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IACD,OAAO;QACH,GAAG,MAAM;QACT,GAAG,MAAM;KACZ,CAAC;AACN,CAAC"}
@@ -14,9 +14,6 @@ export declare class WhereBuilder {
14
14
  toJson(): string;
15
15
  private parseCondition;
16
16
  private updateCondition;
17
- /**
18
- * Intelligently merge two condition objects, handling logical operators properly
19
- */
20
17
  private mergeConditions;
21
18
  }
22
19
  //# sourceMappingURL=where-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where-builder.d.ts","sourceRoot":"","sources":["../../src/lib/where-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGtE,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC;AAEjJ,qBAAa,YAAY;IAErB,OAAO,CAAC,WAAW,CAA2B;gBAElC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAIhD,OAAO,CAAC,UAAU;IAIlB,KAAK,IAAI,IAAI;IAKb,KAAK,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK3C,QAAQ,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK9C,OAAO,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK7C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAehC,aAAa,IAAI,OAAO;IAIxB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAI/B,MAAM,IAAI,MAAM;IAIhB,OAAO,CAAC,cAAc;IAuDtB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,eAAe;CA0B1B"}
@@ -31,7 +31,7 @@ class WhereBuilder {
31
31
  let current = this.whereObject;
32
32
  for (let i = 0; i < keys.length - 1; i++) {
33
33
  if (!current[keys[i]]) {
34
- return this; // If the path doesn't exist, do nothing
34
+ return this;
35
35
  }
36
36
  current = current[keys[i]];
37
37
  }
@@ -52,33 +52,27 @@ class WhereBuilder {
52
52
  let operator;
53
53
  let value;
54
54
  if (args.length === 0) {
55
- // Do nothing
56
55
  }
57
56
  else if (args.length === 1) {
58
57
  const condition = args[0];
59
58
  if (typeof condition === 'function') {
60
- // If the condition is a function, create a new WhereBuilder and call the function with it
61
59
  const builder = new WhereBuilder();
62
60
  condition(builder);
63
61
  this.updateCondition(builder.toObject(), type);
64
62
  }
65
63
  else if (condition instanceof WhereBuilder) {
66
- // If the condition is a WhereBuilder
67
64
  this.updateCondition(condition.toObject(), type);
68
65
  }
69
66
  else {
70
- // If the condition is a simple object
71
67
  this.updateCondition(condition, type);
72
68
  }
73
69
  }
74
70
  else if (args.length === 2 || args.length === 3) {
75
71
  if (args.length === 2) {
76
- // if there are only two arguments, the operator is EQ
77
72
  field = args[0];
78
73
  value = args[1];
79
74
  if (typeof value === 'object') {
80
75
  const firstKey = Object.keys(value)[0];
81
- // if the first key is a operator, update the value with the operator
82
76
  if (firstKey.startsWith('$')) {
83
77
  this.updateCondition({ [field]: value }, type);
84
78
  }
@@ -94,7 +88,6 @@ class WhereBuilder {
94
88
  }
95
89
  }
96
90
  else {
97
- // if there are three arguments, the operator is the second argument
98
91
  field = args[0];
99
92
  operator = args[1];
100
93
  value = args[2];
@@ -103,44 +96,30 @@ class WhereBuilder {
103
96
  }
104
97
  return this;
105
98
  }
106
- // private updateCondition(condition: Record<string, any>, type: '$and' | '$or'): void {
107
- // this.whereObject[type] = [...(this.whereObject[type] || []), condition].filter(Boolean);
108
- // }
109
99
  updateCondition(condition, type) {
110
100
  if (type === null) {
111
- // For direct where conditions, we need to merge intelligently
112
101
  this.mergeConditions(this.whereObject, condition);
113
102
  }
114
103
  else {
115
- // For logical operators ($and, $or), add to the array
116
104
  this.whereObject[type] = [...(this.whereObject[type] || []), condition].filter(Boolean);
117
105
  }
118
106
  }
119
- /**
120
- * Intelligently merge two condition objects, handling logical operators properly
121
- */
122
107
  mergeConditions(target, source) {
123
108
  for (const key in source) {
124
109
  const sourceValue = source[key];
125
110
  if (key === '$and' || key === '$or') {
126
- // Handle logical operators - merge arrays
127
111
  if (target[key]) {
128
- // If target already has this logical operator, merge the arrays
129
112
  target[key] = [...(target[key] || []), ...(Array.isArray(sourceValue) ? sourceValue : [sourceValue])];
130
113
  }
131
114
  else {
132
- // If target doesn't have this logical operator, set it
133
115
  target[key] = Array.isArray(sourceValue) ? sourceValue : [sourceValue];
134
116
  }
135
117
  }
136
118
  else {
137
- // Handle regular field conditions
138
119
  if (target[key] && typeof target[key] === 'object' && typeof sourceValue === 'object') {
139
- // If both target and source have the same field with object values, merge them
140
120
  target[key] = { ...target[key], ...sourceValue };
141
121
  }
142
122
  else {
143
- // Otherwise, simply assign the value
144
123
  target[key] = sourceValue;
145
124
  }
146
125
  }
@@ -148,3 +127,4 @@ class WhereBuilder {
148
127
  }
149
128
  }
150
129
  exports.WhereBuilder = WhereBuilder;
130
+ //# sourceMappingURL=where-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where-builder.js","sourceRoot":"","sources":["../../src/lib/where-builder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,47 @@
1
1
  {
2
2
  "name": "@ackplus/nest-crud-request",
3
- "version": "1.1.9",
3
+ "version": "1.1.18",
4
+ "description": "Framework-agnostic query builder for REST APIs - build complex queries with filtering, relations, and pagination for both frontend and backend",
4
5
  "type": "commonjs",
5
- "main": "./src/index.js",
6
- "types": "./src/index.d.ts",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "scripts": {
9
+ "clean": "rm -rf dist",
10
+ "build": "tsc -p tsconfig.build.json",
11
+ "format": "prettier --write \"src/**/*.ts\"",
12
+ "lint": "eslint \"src/**/*.ts\" --fix",
13
+ "prepublishOnly": "npm run build"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "keywords": [
21
+ "query-builder",
22
+ "rest",
23
+ "api",
24
+ "frontend",
25
+ "backend",
26
+ "filtering",
27
+ "pagination",
28
+ "relations",
29
+ "typescript",
30
+ "nestjs",
31
+ "react",
32
+ "angular",
33
+ "vue"
34
+ ],
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/ack-solutions/nest-crud"
38
+ },
39
+ "license": "MIT",
40
+ "author": "Ackplus",
7
41
  "dependencies": {
8
42
  "tslib": "^2.3.0"
43
+ },
44
+ "devDependencies": {
45
+ "typescript": "^5.7.3"
9
46
  }
10
- }
47
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/nest-crud-request/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC"}
package/src/index.js DELETED
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./lib/query-builder"), exports);
5
- tslib_1.__exportStar(require("./lib/where-builder"), exports);
6
- tslib_1.__exportStar(require("./lib/types"), exports);
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElE,OAAO,EAAgB,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGtE,qBAAa,YAAY;IAErB,OAAO,CAAC,OAAO,CAA2B;IAE1C,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO,CAAC,eAAe,CAA0C;gBAErD,OAAO,CAAC,EAAE,mBAAmB;IAMzC,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAO9C,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,UAAQ,GAAG,IAAI;IAc9D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAa1C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAY7C,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKnF,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKtC,KAAK,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK3C,QAAQ,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK9C,OAAO,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAQ1D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAKlC,QAAQ,CAAC,uBAAuB,UAAQ;;;;;;;;;;;IAoDxC,MAAM;CAKT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"relation-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/relation-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAuB,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/E,qBAAa,eAAe;IAExB,OAAO,CAAC,SAAS,CAAsB;gBAE3B,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM;IAOhD,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAe9C,KAAK,IAAI,IAAI;IAKb,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAgB3E,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK9B,YAAY,IAAI,OAAO;IAIvB,QAAQ,IAAI,cAAc;IAI1B,MAAM,IAAI,MAAM;CAInB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IACrC,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,oBAAY,wBAAwB;IAChC,GAAG,SAAS;IACZ,EAAE,QAAQ;CACb;AAED,oBAAY,iBAAiB;IACzB,EAAE,QAAQ;IACV,MAAM,QAAQ;IACd,EAAE,QAAQ;IACV,QAAQ,SAAS;IACjB,EAAE,QAAQ;IACV,QAAQ,SAAS;IACjB,EAAE,QAAQ;IACV,MAAM,WAAW;IACjB,IAAI,UAAU;IACd,QAAQ,aAAa;IACrB,KAAK,WAAW;IAChB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,WAAW,eAAe;IAC1B,OAAO,aAAa;IACpB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAED,oBAAY,kBAAkB;IAC1B,GAAG,QAAQ;IACX,IAAI,SAAS;CAChB;AAED,MAAM,MAAM,WAAW,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACnC,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,EAAE,CAAC;AAGvD,MAAM,MAAM,mBAAmB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC;AAE3E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAUvD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"where-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/nest-crud-request/src/lib/where-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGtE,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC;AAEjJ,qBAAa,YAAY;IAErB,OAAO,CAAC,WAAW,CAA2B;gBAElC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAIhD,OAAO,CAAC,UAAU;IAIlB,KAAK,IAAI,IAAI;IAKb,KAAK,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK3C,QAAQ,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK9C,OAAO,CAAC,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI;IAK7C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAehC,aAAa,IAAI,OAAO;IAIxB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAI/B,MAAM,IAAI,MAAM;IAIhB,OAAO,CAAC,cAAc;IAuDtB,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,eAAe;CA0B1B"}
File without changes
File without changes
File without changes
File without changes
File without changes