@quvel-kit/core 1.3.19 → 1.3.21
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/orm/QueryBuilder.d.ts +410 -0
- package/dist/orm/QueryBuilder.d.ts.map +1 -0
- package/dist/orm/QueryBuilder.js +569 -0
- package/dist/orm/index.d.ts +21 -0
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/orm/index.js +18 -0
- package/dist/orm/relationships/types.d.ts +60 -0
- package/dist/orm/relationships/types.d.ts.map +1 -0
- package/dist/orm/relationships/types.js +1 -0
- package/dist/orm/types.d.ts +60 -0
- package/dist/orm/types.d.ts.map +1 -0
- package/dist/orm/types.js +5 -0
- package/dist/services/logger/BetterStackLogger.d.ts +29 -0
- package/dist/services/logger/BetterStackLogger.d.ts.map +1 -0
- package/dist/services/logger/BetterStackLogger.js +77 -0
- package/dist/services/logger/MultiLogger.d.ts +28 -0
- package/dist/services/logger/MultiLogger.d.ts.map +1 -0
- package/dist/services/logger/MultiLogger.js +32 -0
- package/dist/types/logging.types.d.ts +3 -1
- package/dist/types/logging.types.d.ts.map +1 -1
- package/dist/types/logging.types.js +2 -0
- package/dist/utils/logging.d.ts.map +1 -1
- package/dist/utils/logging.js +24 -0
- package/package.json +5 -1
package/dist/index.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export * from './utils/error.js';
|
|
|
42
42
|
export * from './utils/scripts.js';
|
|
43
43
|
export * from './utils/assets.js';
|
|
44
44
|
export * from './utils/pagination.js';
|
|
45
|
+
export * from './orm/index.js';
|
|
45
46
|
export { defineQuvelBoot } from './boot/quvel.js';
|
|
46
47
|
export { serviceContainerPlugin } from './stores/plugins/serviceContainer.js';
|
|
47
48
|
export { defineQuvelModule } from './module.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AAGjC,YAAY,EACV,OAAO,IAAI,QAAQ,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AAGjC,YAAY,EACV,OAAO,IAAI,QAAQ,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -53,6 +53,8 @@ export * from './utils/error.js';
|
|
|
53
53
|
export * from './utils/scripts.js';
|
|
54
54
|
export * from './utils/assets.js';
|
|
55
55
|
export * from './utils/pagination.js';
|
|
56
|
+
// ORM - Active Record pattern for models
|
|
57
|
+
export * from './orm/index.js';
|
|
56
58
|
// Boot
|
|
57
59
|
export { defineQuvelBoot } from './boot/quvel.js';
|
|
58
60
|
// Stores
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import type { FilterOperator } from './types.js';
|
|
2
|
+
import type { ServiceContainer } from '../container/ServiceContainer.js';
|
|
3
|
+
import type { LengthAwarePaginatorResponse, SimplePaginatorResponse, CursorPaginatorResponse } from '../types/laravel.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Fluent Query Builder for Models
|
|
6
|
+
*
|
|
7
|
+
* Builds Spatie Query Builder compatible query strings and executes queries.
|
|
8
|
+
*
|
|
9
|
+
* Supports:
|
|
10
|
+
* - Filtering: where(), whereIn(), whereNotNull()
|
|
11
|
+
* - Eager loading: with()
|
|
12
|
+
* - Field selection: fields()
|
|
13
|
+
* - Sorting: sort()
|
|
14
|
+
* - Pagination: page(), perPage(), paginate()
|
|
15
|
+
*
|
|
16
|
+
* @template T - Model class type
|
|
17
|
+
* @template A - API response interface type
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const users = await User.query()
|
|
22
|
+
* .where('status', 'active')
|
|
23
|
+
* .where('age', '>', 18)
|
|
24
|
+
* .with('posts.comments', 'profile')
|
|
25
|
+
* .fields('users', ['id', 'name', 'email'])
|
|
26
|
+
* .fields('posts', ['id', 'title'])
|
|
27
|
+
* .sort('-created_at', 'name')
|
|
28
|
+
* .paginate(20);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class QueryBuilder<T = any, A = any> {
|
|
32
|
+
private modelClass;
|
|
33
|
+
private container?;
|
|
34
|
+
/**
|
|
35
|
+
* Map of filters to apply
|
|
36
|
+
* Key: field name, Value: operator and value
|
|
37
|
+
*/
|
|
38
|
+
private filters;
|
|
39
|
+
/**
|
|
40
|
+
* Set of relationships to eager load
|
|
41
|
+
*/
|
|
42
|
+
private includes;
|
|
43
|
+
/**
|
|
44
|
+
* Map of field selections per resource type
|
|
45
|
+
* Key: resource name (e.g., 'users'), Value: array of field names
|
|
46
|
+
*/
|
|
47
|
+
private fieldSelections;
|
|
48
|
+
/**
|
|
49
|
+
* Array of sort fields (prefix with - for descending)
|
|
50
|
+
*/
|
|
51
|
+
private sortFields;
|
|
52
|
+
/**
|
|
53
|
+
* Page number for pagination
|
|
54
|
+
*/
|
|
55
|
+
private pageNumber?;
|
|
56
|
+
/**
|
|
57
|
+
* Items per page
|
|
58
|
+
*/
|
|
59
|
+
private perPage?;
|
|
60
|
+
/**
|
|
61
|
+
* Cursor value for cursor pagination
|
|
62
|
+
*/
|
|
63
|
+
private cursorValue?;
|
|
64
|
+
/**
|
|
65
|
+
* Constructor
|
|
66
|
+
*
|
|
67
|
+
* @param modelClass - Model class constructor
|
|
68
|
+
* @param container - ServiceContainer instance
|
|
69
|
+
*/
|
|
70
|
+
constructor(modelClass: new (attrs: Partial<A>, container?: ServiceContainer) => T, container?: ServiceContainer | undefined);
|
|
71
|
+
/**
|
|
72
|
+
* Get the API service
|
|
73
|
+
* @throws Error if no container provided
|
|
74
|
+
*/
|
|
75
|
+
private get api();
|
|
76
|
+
/**
|
|
77
|
+
* Get model configuration
|
|
78
|
+
*/
|
|
79
|
+
private get config();
|
|
80
|
+
/**
|
|
81
|
+
* Add a where clause
|
|
82
|
+
*
|
|
83
|
+
* Supports two syntaxes:
|
|
84
|
+
* - where(field, value) - Equality check
|
|
85
|
+
* - where(field, operator, value) - Custom operator
|
|
86
|
+
*
|
|
87
|
+
* @param field - Field name
|
|
88
|
+
* @param operatorOrValue - Operator or value (if using equality)
|
|
89
|
+
* @param value - Value (if using custom operator)
|
|
90
|
+
* @returns this for method chaining
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* query.where('status', 'active') // status = 'active'
|
|
95
|
+
* query.where('age', '>', 18) // age > 18
|
|
96
|
+
* query.where('name', 'like', '%john%') // name like '%john%'
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
where(field: string, operatorOrValue: FilterOperator | any, value?: any): this;
|
|
100
|
+
/**
|
|
101
|
+
* Add a whereIn clause (field IN values)
|
|
102
|
+
*
|
|
103
|
+
* @param field - Field name
|
|
104
|
+
* @param values - Array of values
|
|
105
|
+
* @returns this for method chaining
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* query.whereIn('id', ['1', '2', '3'])
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
whereIn(field: string, values: any[]): this;
|
|
113
|
+
/**
|
|
114
|
+
* Add a whereNotNull clause
|
|
115
|
+
*
|
|
116
|
+
* @param field - Field name
|
|
117
|
+
* @returns this for method chaining
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* query.whereNotNull('email_verified_at')
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
whereNotNull(field: string): this;
|
|
125
|
+
/**
|
|
126
|
+
* Add a whereNull clause
|
|
127
|
+
*
|
|
128
|
+
* @param field - Field name
|
|
129
|
+
* @returns this for method chaining
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* query.whereNull('deleted_at')
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
whereNull(field: string): this;
|
|
137
|
+
/**
|
|
138
|
+
* Add eager loading relationships
|
|
139
|
+
*
|
|
140
|
+
* Supports nested relationships with dot notation
|
|
141
|
+
*
|
|
142
|
+
* @param relations - Relationship names (method names on model)
|
|
143
|
+
* @returns this for method chaining
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* query.with('posts', 'profile')
|
|
148
|
+
* query.with('posts.comments.author')
|
|
149
|
+
* query.with('posts.tags', 'posts.comments')
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
with(...relations: string[]): this;
|
|
153
|
+
/**
|
|
154
|
+
* Select specific fields for a resource type (sparse fieldsets)
|
|
155
|
+
*
|
|
156
|
+
* @param resource - Resource name (e.g., 'users', 'posts')
|
|
157
|
+
* @param fields - Array of field names to select
|
|
158
|
+
* @returns this for method chaining
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* query.fields('users', ['id', 'name', 'email'])
|
|
163
|
+
* query.fields('posts', ['id', 'title', 'created_at'])
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
fields(resource: string, fields: string[]): this;
|
|
167
|
+
/**
|
|
168
|
+
* Add sorting (prefix with - for descending)
|
|
169
|
+
*
|
|
170
|
+
* @param fields - Field names (prefix with '-' for DESC)
|
|
171
|
+
* @returns this for method chaining
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* query.sort('name') // ASC
|
|
176
|
+
* query.sort('-created_at') // DESC
|
|
177
|
+
* query.sort('-created_at', 'name') // Multiple fields
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
sort(...fields: string[]): this;
|
|
181
|
+
/**
|
|
182
|
+
* Set page number for pagination
|
|
183
|
+
*
|
|
184
|
+
* @param page - Page number (1-indexed)
|
|
185
|
+
* @returns this for method chaining
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```typescript
|
|
189
|
+
* query.page(2)
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
page(page: number): this;
|
|
193
|
+
/**
|
|
194
|
+
* Set items per page
|
|
195
|
+
*
|
|
196
|
+
* @param count - Number of items per page
|
|
197
|
+
* @returns this for method chaining
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* query.perPage(50)
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
limit(count: number): this;
|
|
205
|
+
/**
|
|
206
|
+
* Set cursor for cursor pagination
|
|
207
|
+
*
|
|
208
|
+
* @param cursor - Cursor value from previous response
|
|
209
|
+
* @returns this for method chaining
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```typescript
|
|
213
|
+
* query.cursor(response.meta.next_cursor)
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
cursor(cursor: string): this;
|
|
217
|
+
/**
|
|
218
|
+
* Build query parameters for Spatie Query Builder
|
|
219
|
+
*
|
|
220
|
+
* Converts fluent API calls into URL query string format:
|
|
221
|
+
* - include=posts.comments,profile
|
|
222
|
+
* - filter[status]=active
|
|
223
|
+
* - filter[age]=>:18
|
|
224
|
+
* - fields[users]=id,name,email
|
|
225
|
+
* - sort=-created_at,name
|
|
226
|
+
* - page=1&per_page=20
|
|
227
|
+
*
|
|
228
|
+
* @returns Record of query parameters for Axios
|
|
229
|
+
*/
|
|
230
|
+
private buildParams;
|
|
231
|
+
/**
|
|
232
|
+
* Execute query and get all results
|
|
233
|
+
*
|
|
234
|
+
* @returns Array of model instances
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```typescript
|
|
238
|
+
* const users = await User.query().where('active', true).get();
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
get(): Promise<T[]>;
|
|
242
|
+
/**
|
|
243
|
+
* Execute query and get first result
|
|
244
|
+
*
|
|
245
|
+
* @returns First model instance or null if none found
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* const user = await User.query().where('email', 'john@example.com').first();
|
|
250
|
+
* if (user) {
|
|
251
|
+
* console.log(user.name);
|
|
252
|
+
* }
|
|
253
|
+
* ```
|
|
254
|
+
*/
|
|
255
|
+
first(): Promise<T | null>;
|
|
256
|
+
/**
|
|
257
|
+
* Execute query and get first result or fail
|
|
258
|
+
*
|
|
259
|
+
* @returns First model instance
|
|
260
|
+
* @throws Error if no results found
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```typescript
|
|
264
|
+
* const user = await User.query().where('email', 'john@example.com').firstOrFail();
|
|
265
|
+
* // Throws if user not found
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
firstOrFail(): Promise<T>;
|
|
269
|
+
/**
|
|
270
|
+
* Execute query with length-aware pagination
|
|
271
|
+
*
|
|
272
|
+
* Returns paginated response with total count and page metadata
|
|
273
|
+
*
|
|
274
|
+
* @param perPageCount - Items per page (default: 15)
|
|
275
|
+
* @returns Paginated response with metadata
|
|
276
|
+
*
|
|
277
|
+
* @example
|
|
278
|
+
* ```typescript
|
|
279
|
+
* const paginated = await User.query().where('active', true).paginate(20);
|
|
280
|
+
* console.log(paginated.data); // Array of User models
|
|
281
|
+
* console.log(paginated.meta.total); // Total count
|
|
282
|
+
* console.log(paginated.meta.current_page); // Current page
|
|
283
|
+
* console.log(paginated.links.next); // Next page URL
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
paginate(perPageCount?: number): Promise<LengthAwarePaginatorResponse<T>>;
|
|
287
|
+
/**
|
|
288
|
+
* Execute query with simple pagination (no total count)
|
|
289
|
+
*
|
|
290
|
+
* @param perPageCount - Items per page (default: 15)
|
|
291
|
+
* @returns Paginated response without total count
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```typescript
|
|
295
|
+
* const paginated = await User.query().simplePaginate(20);
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
simplePaginate(perPageCount?: number): Promise<SimplePaginatorResponse<T>>;
|
|
299
|
+
/**
|
|
300
|
+
* Execute query with cursor pagination
|
|
301
|
+
*
|
|
302
|
+
* @param perPageCount - Items per page (default: 15)
|
|
303
|
+
* @returns Cursor paginated response
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```typescript
|
|
307
|
+
* const paginated = await User.query().cursorPaginate(20);
|
|
308
|
+
* console.log(paginated.meta.next_cursor);
|
|
309
|
+
* console.log(paginated.meta.prev_cursor);
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
cursorPaginate(perPageCount?: number): Promise<CursorPaginatorResponse<T>>;
|
|
313
|
+
/**
|
|
314
|
+
* Get count of matching records
|
|
315
|
+
*
|
|
316
|
+
* Note: This makes a paginated request with per_page=1 and reads the total
|
|
317
|
+
*
|
|
318
|
+
* @returns Total count of matching records
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```typescript
|
|
322
|
+
* const activeUserCount = await User.query().where('active', true).count();
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
325
|
+
count(): Promise<number>;
|
|
326
|
+
/**
|
|
327
|
+
* Check if any records exist matching the query
|
|
328
|
+
*
|
|
329
|
+
* @returns true if at least one record exists
|
|
330
|
+
*
|
|
331
|
+
* @example
|
|
332
|
+
* ```typescript
|
|
333
|
+
* const hasActiveUsers = await User.query().where('active', true).exists();
|
|
334
|
+
* ```
|
|
335
|
+
*/
|
|
336
|
+
exists(): Promise<boolean>;
|
|
337
|
+
/**
|
|
338
|
+
* Hydrate models from API data
|
|
339
|
+
*
|
|
340
|
+
* Converts raw API response objects into model instances
|
|
341
|
+
*
|
|
342
|
+
* @param data - Array of raw API objects
|
|
343
|
+
* @returns Array of model instances
|
|
344
|
+
*/
|
|
345
|
+
private hydrate;
|
|
346
|
+
/**
|
|
347
|
+
* Clone the query builder
|
|
348
|
+
*
|
|
349
|
+
* Creates a new instance with the same filters, includes, etc.
|
|
350
|
+
* Useful for creating base queries and extending them
|
|
351
|
+
*
|
|
352
|
+
* @returns Cloned QueryBuilder instance
|
|
353
|
+
*
|
|
354
|
+
* @example
|
|
355
|
+
* ```typescript
|
|
356
|
+
* const baseQuery = User.query().where('active', true);
|
|
357
|
+
* const admins = await baseQuery.clone().where('role', 'admin').get();
|
|
358
|
+
* const users = await baseQuery.clone().where('role', 'user').get();
|
|
359
|
+
* ```
|
|
360
|
+
*/
|
|
361
|
+
clone(): QueryBuilder<T, A>;
|
|
362
|
+
/**
|
|
363
|
+
* Execute a callback with a fresh query clone
|
|
364
|
+
*
|
|
365
|
+
* @param callback - Function that modifies the query
|
|
366
|
+
* @returns Result of the callback
|
|
367
|
+
*
|
|
368
|
+
* @example
|
|
369
|
+
* ```typescript
|
|
370
|
+
* const baseQuery = User.query().where('active', true);
|
|
371
|
+
*
|
|
372
|
+
* const admins = await baseQuery.tap(q => q.where('role', 'admin')).get();
|
|
373
|
+
* const users = await baseQuery.tap(q => q.where('role', 'user')).get();
|
|
374
|
+
* ```
|
|
375
|
+
*/
|
|
376
|
+
tap<R>(callback: (query: QueryBuilder<T, A>) => R): R;
|
|
377
|
+
/**
|
|
378
|
+
* Apply a callback if condition is true
|
|
379
|
+
*
|
|
380
|
+
* @param condition - Boolean condition
|
|
381
|
+
* @param callback - Function to apply if condition is true
|
|
382
|
+
* @returns this for method chaining
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```typescript
|
|
386
|
+
* const query = User.query()
|
|
387
|
+
* .when(search, q => q.where('name', 'like', `%${search}%`))
|
|
388
|
+
* .when(role, q => q.where('role', role));
|
|
389
|
+
* ```
|
|
390
|
+
*/
|
|
391
|
+
when(condition: boolean | any, callback: (query: this) => void): this;
|
|
392
|
+
/**
|
|
393
|
+
* Dump the current query parameters (for debugging)
|
|
394
|
+
*
|
|
395
|
+
* @returns Query parameters object
|
|
396
|
+
*
|
|
397
|
+
* @example
|
|
398
|
+
* ```typescript
|
|
399
|
+
* const params = User.query()
|
|
400
|
+
* .where('active', true)
|
|
401
|
+
* .with('posts')
|
|
402
|
+
* .dump();
|
|
403
|
+
*
|
|
404
|
+
* console.log(params);
|
|
405
|
+
* // { include: 'posts', 'filter[active]': true }
|
|
406
|
+
* ```
|
|
407
|
+
*/
|
|
408
|
+
dump(): Record<string, any>;
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=QueryBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../src/orm/QueryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,KAAK,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AAUnC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IA6CtC,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS,CAAC;IA7CpB;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAuC;IAEtD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAA0B;IAE1C;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAoC;IAE3D;;OAEG;IACH,OAAO,CAAC,UAAU,CAAgB;IAElC;;OAEG;IACH,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB;;OAEG;IACH,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B;;;;;OAKG;gBAEO,UAAU,EAAE,KAAK,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,gBAAgB,KAAK,CAAC,EACtE,SAAS,CAAC,EAAE,gBAAgB,YAAA;IAGtC;;;OAGG;IACH,OAAO,KAAK,GAAG,GAQd;IAED;;OAEG;IACH,OAAO,KAAK,MAAM,GAEjB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI;IAW9E;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;IAK3C;;;;;;;;;;OAUG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAOlC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhD;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAK/B;;;;;;;;;;OAUG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IA6CnB;;;;;;;;;OASG;IACG,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAUzB;;;;;;;;;;;;OAYG;IACG,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBhC;;;;;;;;;;;OAWG;IACG,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC;IAQ/B;;;;;;;;;;;;;;;;OAgBG;IACG,QAAQ,CAAC,YAAY,SAAK,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;IAe3E;;;;;;;;;;OAUG;IACG,cAAc,CAAC,YAAY,SAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAe5E;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,YAAY,SAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAe5E;;;;;;;;;;;OAWG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAY9B;;;;;;;;;OASG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAKhC;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;IAIf;;;;;;;;;;;;;;OAcG;IACH,KAAK,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAY3B;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAIrD;;;;;;;;;;;;;OAaG;IACH,IAAI,CACF,SAAS,EAAE,OAAO,GAAG,GAAG,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,GAC9B,IAAI;IAOP;;;;;;;;;;;;;;;OAeG;IACH,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAG5B"}
|