@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 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';
@@ -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":"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"}