bun-query-builder 0.1.44 → 0.1.45

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/bin/cli.js CHANGED
@@ -26005,7 +26005,7 @@ class ModelQueryBuilder {
26005
26005
  return (await exec.run(sql2, params)).changes;
26006
26006
  }
26007
26007
  }
26008
- function createModel(definition) {
26008
+ function createModelInternal(definition) {
26009
26009
  const model = {
26010
26010
  query: () => new ModelQueryBuilder(definition),
26011
26011
  where(column, operatorOrValue, value) {
@@ -26150,6 +26150,9 @@ function createModel(definition) {
26150
26150
  }
26151
26151
  });
26152
26152
  }
26153
+ function createModel(definition) {
26154
+ return createModelInternal(definition);
26155
+ }
26153
26156
  async function createTableFromModel(definition) {
26154
26157
  const exec = getExecutor();
26155
26158
  const pk = definition.primaryKey || "id";
@@ -30898,7 +30901,7 @@ function getPrefix() {
30898
30901
  }
30899
30902
  var prefix = getPrefix();
30900
30903
  // package.json
30901
- var version2 = "0.1.44";
30904
+ var version2 = "0.1.45";
30902
30905
 
30903
30906
  // bin/cli.ts
30904
30907
  init_actions();
package/dist/browser.d.ts CHANGED
@@ -59,9 +59,9 @@ export declare function createBrowserModel<const TDef extends BrowserModelDefini
59
59
  * @defaultValue
60
60
  * ```ts
61
61
  * {
62
- * login: (credentials?: { email: string, password: string }): Promise<BrowserAuthResponse> {
62
+ * login: (credentials?: { email: string, password: string }): Promise<{ user: Record<string, unknown>, token: string }> {
63
63
  * const response) => Promise<unknown>,
64
- * register: (data?: { name: string, email: string, password: string }): Promise<BrowserAuthResponse> {
64
+ * register: (data?: { name: string, email: string, password: string }): Promise<{ user: Record<string, unknown>, token: string }> {
65
65
  * const response) => Promise<unknown>,
66
66
  * logout: () => unknown,
67
67
  * user: () => unknown,
@@ -73,11 +73,11 @@ export declare const browserAuth: {
73
73
  /**
74
74
  * Login and store token
75
75
  */
76
- login: (credentials: { email: string, password: string }) => Promise<BrowserAuthResponse>;
76
+ login: (credentials: { email: string, password: string }) => Promise<;
77
77
  /**
78
78
  * Register a new user
79
79
  */
80
- register: (data: { name: string, email: string, password: string }) => Promise<BrowserAuthResponse>;
80
+ register: (data: { name: string, email: string, password: string }) => Promise<;
81
81
  /**
82
82
  * Logout and clear token
83
83
  */
@@ -170,18 +170,6 @@ declare interface QueryState {
170
170
  selectColumns: string[]
171
171
  withRelations: string[]
172
172
  }
173
- /**
174
- * Response shape returned by `browserAuth.login` / `browserAuth.register`.
175
- * Lifted to a named type so the generated `.d.ts` doesn't carry a nested
176
- * inline object literal in the return position — bun-plugin-dtsx has a
177
- * bug where `Promise<{ ... }>` in that position emits as `Promise<;`,
178
- * breaking downstream typecheck for any consumer that imports from
179
- * `bun-query-builder/browser`.
180
- */
181
- export declare interface BrowserAuthResponse {
182
- user: Record<string, unknown>
183
- token: string
184
- }
185
173
  // Primitive type mappings
186
174
  declare type PrimitiveTypeMap = {
187
175
  string: string
@@ -9,6 +9,7 @@ export declare function createSingleTableManager(config: SingleTableConfig): Sin
9
9
  */
10
10
  export declare function createRepository<T extends Record<string, any>>(manager: SingleTableManager, entityName: string, options: DynamoDBQueryBuilderOptions): SingleTableRepository<T>;
11
11
  /**
12
+ * Common single table design patterns
12
13
  * @defaultValue
13
14
  * ```ts
14
15
  * {
@@ -16,11 +17,11 @@ export declare function createRepository<T extends Record<string, any>>(manager:
16
17
  * oneToMany: (parentEntity: string,
17
18
  * childEntity: string,
18
19
  * parentIdField?: string,
19
- * childIdField?: string,) => OneToManyPattern,
20
+ * childIdField?: string,) => { parent: SingleTableEntity, child: SingleTableEntity },
20
21
  * manyToMany: (entityName: string,
21
22
  * relationName: string,
22
23
  * idField?: string,
23
- * relatedIdField?: string,) => ManyToManyPattern,
24
+ * relatedIdField?: string,) => { entity: SingleTableEntity, relation: SingleTableEntity },
24
25
  * hierarchical: (entityName: string, rootIdField?: string, pathField?: string) => SingleTableEntity
25
26
  * }
26
27
  * ```
@@ -37,14 +38,20 @@ export declare const SingleTablePatterns: {
37
38
  * Parent: PK=PARENT#<parentId>, SK=METADATA
38
39
  * Child: PK=PARENT#<parentId>, SK=CHILD#<childId>
39
40
  */
40
- oneToMany: (parentEntity: string, childEntity: string, parentIdField?: string, childIdField?: string,) => OneToManyPattern;
41
+ oneToMany: (parentEntity: string,
42
+ childEntity: string,
43
+ parentIdField?: string,
44
+ childIdField?: string,) => ;
41
45
  /**
42
46
  * Many-to-many relationship pattern using adjacency list
43
47
  * Entity: PK=ENTITY#<entityId>, SK=METADATA
44
48
  * Relationship: PK=ENTITY#<entityId>, SK=RELATED#<relatedId>
45
49
  * Inverse: PK=ENTITY#<relatedId>, SK=RELATED#<entityId> (via GSI)
46
50
  */
47
- manyToMany: (entityName: string, relationName: string, idField?: string, relatedIdField?: string,) => ManyToManyPattern;
51
+ manyToMany: (entityName: string,
52
+ relationName: string,
53
+ idField?: string,
54
+ relatedIdField?: string,) => ;
48
55
  /**
49
56
  * Hierarchical data pattern (e.g., org chart, file system)
50
57
  * PK: ROOT#<rootId>
@@ -93,25 +100,6 @@ export declare interface ManyToManyPattern {
93
100
  entity: SingleTableEntity
94
101
  relation: SingleTableEntity
95
102
  }
96
- /**
97
- * Common single table design patterns
98
- */
99
- /**
100
- * Result shapes for relationship pattern helpers. Lifted to named
101
- * interfaces so the generated `.d.ts` doesn't carry an inline object
102
- * literal in the return position — bun-plugin-dtsx has a bug where
103
- * `(...) => { ... }` in that position emits as `=> ;`, breaking
104
- * downstream typecheck for any consumer importing from
105
- * `bun-query-builder/dynamodb-single-table`.
106
- */
107
- export declare interface OneToManyPattern {
108
- parent: SingleTableEntity
109
- child: SingleTableEntity
110
- }
111
- export declare interface ManyToManyPattern {
112
- entity: SingleTableEntity
113
- relation: SingleTableEntity
114
- }
115
103
  /**
116
104
  * Single Table Design Manager
117
105
  *
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  // Resolve ambiguous re-exports by explicitly choosing which module's version to use
2
2
  export type { WhereOperator } from './browser';
3
3
  export type { ModelQueryBuilder } from './dynamodb/index';
4
- export type { ColumnName } from './client';
4
+ export type { ColumnName, QueryBuilder } from './client';
5
+ export type { ModelRecord } from './schema';
6
+ export type { ModelDefinition as OrmModelDefinition, ModelStatic as OrmModelStatic } from './orm';
5
7
  // Re-export the type-inference version of InferRelationNames (supports wrapped models)
6
8
  // to resolve the ambiguity with orm.ts's InferRelationNames (which takes raw definitions)
7
9
  export type { InferRelationNames } from './type-inference';
package/dist/orm.d.ts CHANGED
@@ -37,10 +37,8 @@ export declare function configureOrm(options: { database?: string | Database; ve
37
37
  * low-level table setup).
38
38
  */
39
39
  export declare function getDatabase(): Database;
40
- /**
41
- * Create a model class from a definition with full type inference
42
- */
43
- export declare function createModel<const TDef extends ModelDefinition>(definition: TDef): void;
40
+ /** Create a model class from a definition with full type inference. */
41
+ export declare function createModel<const TDef extends ModelDefinition>(definition: TDef): ModelStatic<TDef>;
44
42
  export declare function createTableFromModel(definition: ModelDefinition): Promise<void>;
45
43
  export declare function seedModel(definition: ModelDefinition, count?: number, faker?: Record<string, unknown>): Promise<void>;
46
44
  // Attribute definition with explicit type
@@ -111,6 +109,7 @@ export declare interface ModelDefinition {
111
109
  readonly taggable?: boolean
112
110
  readonly categorizable?: boolean
113
111
  readonly commentables?: boolean
112
+ readonly commentable?: boolean
114
113
  readonly useActivityLog?: boolean | object
115
114
  readonly useSocials?: readonly string[]
116
115
  }
@@ -128,11 +127,11 @@ export declare interface ModelDefinition {
128
127
  readonly attributes: {
129
128
  readonly [key: string]: TypedAttribute<unknown>
130
129
  }
131
- readonly get?: Record<string, (attributes: Record<string, unknown>) => unknown>
132
- readonly set?: Record<string, (attributes: Record<string, unknown>) => unknown>
130
+ readonly get?: Record<string, (attributes: any) => unknown>
131
+ readonly set?: Record<string, (attributes: any) => unknown>
133
132
  readonly scopes?: Record<string, (value: unknown) => unknown>
134
133
  readonly indexes?: readonly object[]
135
- readonly dashboard?: { readonly highlight?: boolean | number }
134
+ readonly dashboard?: { readonly enabled?: boolean; readonly highlight?: boolean | number }
136
135
  readonly hooks?: {
137
136
  readonly beforeCreate?: (data: Record<string, unknown>) => void | Promise<void>
138
137
  readonly afterCreate?: (model: ModelHookInstance) => void | Promise<void>
@@ -179,6 +178,31 @@ declare interface ResolvedRelation {
179
178
  pivotModelName?: string
180
179
  pivotTimestamps?: boolean
181
180
  }
181
+ /**
182
+ * Overloaded where/orWhere signatures for static model methods.
183
+ * Object literals cannot have overloaded methods, so we express them as an interface
184
+ * and intersect with the concrete model object via a type assertion.
185
+ */
186
+ declare interface StaticWhereOverloads<TDef extends ModelDefinition> {
187
+ where<K extends ColumnName<TDef>>(
188
+ column: K,
189
+ value: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown
190
+ ): ModelQueryBuilder<TDef>
191
+ where<K extends ColumnName<TDef>>(
192
+ column: K,
193
+ operator: WhereOperator,
194
+ value: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown
195
+ ): ModelQueryBuilder<TDef>
196
+ orWhere<K extends ColumnName<TDef>>(
197
+ column: K,
198
+ value: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown
199
+ ): ModelQueryBuilder<TDef>
200
+ orWhere<K extends ColumnName<TDef>>(
201
+ column: K,
202
+ operator: WhereOperator,
203
+ value: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown
204
+ ): ModelQueryBuilder<TDef>
205
+ }
182
206
  // Binding helper type for SQL queries
183
207
  declare type Bindings = SQLQueryBindings[];
184
208
  // Primitive type mappings
@@ -193,12 +217,17 @@ declare type PrimitiveTypeMap = {
193
217
  declare type InferType<T> = T extends keyof PrimitiveTypeMap ? PrimitiveTypeMap[T] :
194
218
  T extends readonly (infer U)[] ? U :
195
219
  T extends (infer U)[] ? U :
220
+ T extends { validate: (value: infer U) => any } ? U :
196
221
  unknown;
197
222
  // Extract attribute keys from definition
198
223
  declare type AttributeKeys<TDef extends ModelDefinition> = keyof TDef['attributes'] & string;
199
224
  // Infer single attribute type
200
225
  declare type InferAttributeType<TAttr> = TAttr extends { type: infer T } ? InferType<T> :
201
- TAttr extends { factory: (faker: Faker) => infer R } ? R :
226
+ TAttr extends { factory: (faker: Faker) => infer R }
227
+ ? [Exclude<R, null | undefined>] extends [never]
228
+ ? TAttr extends { validation: { rule: infer V } } ? InferType<V> | Extract<R, null | undefined> : R
229
+ : R
230
+ : TAttr extends { validation: { rule: infer R } } ? InferType<R> :
202
231
  unknown;
203
232
  // Build the full attributes type from definition. Columns declared
204
233
  // `nullable: true` admit null — mirrors InferAttributes in type-inference.ts.
@@ -207,6 +236,14 @@ declare type InferModelAttributes<TDef extends ModelDefinition> = {
207
236
  ? InferAttributeType<TDef['attributes'][K]> | null
208
237
  : InferAttributeType<TDef['attributes'][K]>
209
238
  }
239
+ declare type SnakeCase<S extends string> = S extends `${infer C}${infer Rest}`
240
+ ? C extends Lowercase<C>
241
+ ? `${C}${SnakeCase<Rest>}`
242
+ : `_${Lowercase<C>}${SnakeCase<Rest>}`
243
+ : S;
244
+ declare type SnakeCaseAttributes<TDef extends ModelDefinition> = {
245
+ [K in keyof InferModelAttributes<TDef> & string as SnakeCase<K>]: InferModelAttributes<TDef>[K]
246
+ }
210
247
  // System fields added by traits. The primary-key column honors the model's
211
248
  // declared `primaryKey` (default 'id') — a custom-pk model exposes THAT
212
249
  // column, not a phantom 'id'. Mirrors InferAttributes in type-inference.ts.
@@ -219,9 +256,10 @@ declare type SystemFields<TDef extends ModelDefinition> = { [K in TDef extends {
219
256
  (TDef['traits'] extends { useAuth: true | object } ? { two_factor_secret: string | null; public_key: string | null } : {}) &
220
257
  (TDef['traits'] extends { billable: true | object } ? { stripe_id: string | null } : {});
221
258
  // Complete model type
222
- declare type ModelAttributes<TDef extends ModelDefinition> = InferModelAttributes<TDef> & SystemFields<TDef>;
259
+ declare type ModelAttributes<TDef extends ModelDefinition> = InferModelAttributes<TDef> & SnakeCaseAttributes<TDef> & SystemFields<TDef>;
223
260
  // All valid column names
224
261
  declare type ColumnName<TDef extends ModelDefinition> = | AttributeKeys<TDef>
262
+ | SnakeCase<AttributeKeys<TDef>>
225
263
  | (TDef extends { primaryKey: infer PK extends string } ? PK : 'id')
226
264
  | (TDef['traits'] extends { useUuid: true } ? 'uuid' : never)
227
265
  | (TDef['traits'] extends { useTimestamps: true } ? 'created_at' | 'updated_at' : never)
@@ -238,6 +276,10 @@ declare type HiddenKeys<TDef extends ModelDefinition> = {
238
276
  declare type FillableKeys<TDef extends ModelDefinition> = {
239
277
  [K in AttributeKeys<TDef>]: TDef['attributes'][K] extends { fillable: true } ? K : never
240
278
  }[AttributeKeys<TDef>];
279
+ declare type FillableAttributes<TDef extends ModelDefinition> = Partial<Pick<
280
+ ModelAttributes<TDef>,
281
+ FillableKeys<TDef> | SnakeCase<FillableKeys<TDef>>
282
+ >>;
241
283
  // Numeric attribute columns — constrains aggregate methods (sum, avg, etc.)
242
284
  declare type NumericColumns<TDef extends ModelDefinition> = {
243
285
  [K in AttributeKeys<TDef>]: TDef['attributes'][K] extends { type: 'number' } ? K : never
@@ -280,6 +322,10 @@ declare type LoadedRelationValue<TDef, R extends string> = 'one' extends Relatio
280
322
  : 'many' extends RelationCardinality<TDef, R>
281
323
  ? ModelInstance<any, any>[] | undefined
282
324
  : ModelInstance<any, any>[] | ModelInstance<any, any> | null | undefined;
325
+ /** A hydrated model instance with its selected columns exposed as proxy properties. */
326
+ export type ModelRecord<TDef extends ModelDefinition, TSelected extends ColumnName<TDef> = ColumnName<TDef>,> = ModelInstance<TDef, TSelected>
327
+ & Pick<ModelAttributes<TDef>, Extract<TSelected, keyof ModelAttributes<TDef>>>
328
+ & { [R in InferRelationNames<TDef>]?: LoadedRelationValue<TDef, R> }
283
329
  declare type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'not like' | 'in' | 'not in';
284
330
  // --- Dialect-aware execution layer -------------------------------------------
285
331
  //
@@ -295,6 +341,66 @@ declare type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'no
295
341
  // `selectFrom(...)` builder already uses. Because the network drivers are
296
342
  // async-only, every model read/write method now returns a Promise.
297
343
  declare type RunResult = { changes: number, lastInsertId: number | bigint | null }
344
+ /** The fully inferred static model API produced from a model definition. */
345
+ export type ModelStatic<TDef extends ModelDefinition> = StaticWhereOverloads<TDef> & {
346
+ query: () => ModelQueryBuilder<TDef>
347
+ whereIn: <K extends ColumnName<TDef>>(column: K, values: (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[]) => ModelQueryBuilder<TDef>
348
+ whereNotIn: <K extends ColumnName<TDef>>(column: K, values: (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[]) => ModelQueryBuilder<TDef>
349
+ whereNull: <K extends ColumnName<TDef>>(column: K) => ModelQueryBuilder<TDef>
350
+ whereNotNull: <K extends ColumnName<TDef>>(column: K) => ModelQueryBuilder<TDef>
351
+ whereLike: <K extends ColumnName<TDef>>(column: K, pattern: string) => ModelQueryBuilder<TDef>
352
+ orderBy: <K extends ColumnName<TDef>>(column: K, direction?: 'asc' | 'desc') => ModelQueryBuilder<TDef>
353
+ orderByDesc: <K extends ColumnName<TDef>>(column: K) => ModelQueryBuilder<TDef>
354
+ select: <K extends ColumnName<TDef>>(...columns: K[]) => ModelQueryBuilder<TDef, K>
355
+ with: <R extends InferRelationNames<TDef>>(...relations: R[]) => ModelQueryBuilder<TDef>
356
+ limit: (count: number) => ModelQueryBuilder<TDef>
357
+ take: (count: number) => ModelQueryBuilder<TDef>
358
+ skip: (count: number) => ModelQueryBuilder<TDef>
359
+ withTrashed: () => ModelQueryBuilder<TDef>
360
+ onlyTrashed: () => ModelQueryBuilder<TDef>
361
+ find: (id: number | string) => Promise<ModelRecord<TDef> | undefined>
362
+ findOrFail: (id: number | string) => Promise<ModelRecord<TDef>>
363
+ findMany: (ids: (number | string)[]) => Promise<ModelRecord<TDef>[]>
364
+ all: () => Promise<ModelRecord<TDef>[]>
365
+ first: () => Promise<ModelRecord<TDef> | undefined>
366
+ firstOrFail: () => Promise<ModelRecord<TDef>>
367
+ last: () => Promise<ModelRecord<TDef> | undefined>
368
+ count: () => Promise<number>
369
+ exists: () => Promise<boolean>
370
+ doesntExist: () => Promise<boolean>
371
+ paginate: (page?: number, perPage?: number) => Promise<{
372
+ data: ModelRecord<TDef>[]
373
+ total: number
374
+ page: number
375
+ perPage: number
376
+ lastPage: number
377
+ hasMorePages: boolean
378
+ isEmpty: boolean
379
+ from: number | null
380
+ to: number | null
381
+ }>
382
+ whereBetween: <K extends ColumnName<TDef>>(column: K, range: [min: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown, max: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown]) => ModelQueryBuilder<TDef>
383
+ whereNotBetween: <K extends ColumnName<TDef>>(column: K, range: [min: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown, max: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown]) => ModelQueryBuilder<TDef>
384
+ create: (data: FillableAttributes<TDef>) => Promise<ModelRecord<TDef>>
385
+ createMany: (items: FillableAttributes<TDef>[]) => Promise<ModelRecord<TDef>[]>
386
+ updateOrCreate: (search: Partial<ModelAttributes<TDef>>, data: FillableAttributes<TDef>) => Promise<ModelRecord<TDef>>
387
+ firstOrCreate: (search: Partial<ModelAttributes<TDef>>, data?: FillableAttributes<TDef>) => Promise<ModelRecord<TDef>>
388
+ destroy: (id: number | string) => Promise<boolean>
389
+ remove: (id: number | string) => Promise<boolean>
390
+ truncate: () => Promise<void>
391
+ getDefinition: () => TDef
392
+ getTable: () => string
393
+ make: (data?: Partial<ModelAttributes<TDef>>) => ModelInstance<TDef>
394
+ latest: (column?: ColumnName<TDef>) => ModelQueryBuilder<TDef>
395
+ oldest: (column?: ColumnName<TDef>) => ModelQueryBuilder<TDef>
396
+ max: <K extends ColumnName<TDef>>(column: K) => Promise<(K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown) | null>
397
+ min: <K extends ColumnName<TDef>>(column: K) => Promise<(K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown) | null>
398
+ avg: <K extends NumericColumns<TDef>>(column: K) => Promise<number>
399
+ sum: <K extends NumericColumns<TDef>>(column: K) => Promise<number>
400
+ pluck: <K extends ColumnName<TDef>>(column: K) => Promise<(K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[]>
401
+ } & {
402
+ [K in AttributeKeys<TDef> as `where${Capitalize<K>}`]: (value: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown) => ModelQueryBuilder<TDef>
403
+ }
298
404
  declare class SqliteExecutor implements OrmExecutor {
299
405
  readonly dialect: unknown;
300
406
  public readonly sqliteDb: Database;
@@ -332,10 +438,10 @@ declare class ModelInstance<TDef extends ModelDefinition, TSelected extends Colu
332
438
  isClean(column?: ColumnName<TDef>): boolean;
333
439
  getOriginal<K extends ColumnName<TDef>>(column: K): K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown;
334
440
  getChanges(): Partial<InferModelAttributes<TDef>>;
335
- fill(data: Partial<Pick<InferModelAttributes<TDef>, FillableKeys<TDef>>>): this;
441
+ fill(data: FillableAttributes<TDef>): this;
336
442
  forceFill(data: Partial<InferModelAttributes<TDef>>): this;
337
443
  save(): Promise<this>;
338
- update(data: Partial<Pick<InferModelAttributes<TDef>, FillableKeys<TDef>>>): Promise<this>;
444
+ update(data: FillableAttributes<TDef>): Promise<this>;
339
445
  fresh(): Promise<ModelInstance<TDef, TSelected> | null>;
340
446
  delete(): Promise<boolean>;
341
447
  restore(): Promise<this>;
@@ -421,14 +527,14 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
421
527
  with<R extends InferRelationNames<TDef>>(...relations: R[]): ModelQueryBuilder<TDef, TSelected>;
422
528
  getWithRelations(): string[];
423
529
  toSql(): { sql: string; params: unknown[] };
424
- get(): Promise<ModelInstance<TDef, TSelected>[]>;
425
- first(): Promise<ModelInstance<TDef, TSelected> | undefined>;
426
- firstOrFail(): Promise<ModelInstance<TDef, TSelected>>;
427
- last(): Promise<ModelInstance<TDef, TSelected> | undefined>;
530
+ get(): Promise<ModelRecord<TDef, TSelected>[]>;
531
+ first(): Promise<ModelRecord<TDef, TSelected> | undefined>;
532
+ firstOrFail(): Promise<ModelRecord<TDef, TSelected>>;
533
+ last(): Promise<ModelRecord<TDef, TSelected> | undefined>;
428
534
  count(): Promise<number>;
429
535
  exists(): Promise<boolean>;
430
536
  doesntExist(): Promise<boolean>;
431
- sole(): Promise<ModelInstance<TDef, TSelected>>;
537
+ sole(): Promise<ModelRecord<TDef, TSelected>>;
432
538
  increment<K extends NumericColumns<TDef>>(column: K, amount?: number): Promise<number>;
433
539
  decrement<K extends NumericColumns<TDef>>(column: K, amount?: number): Promise<number>;
434
540
  chunk(size: number, callback: (items: ModelInstance<TDef, TSelected>[]) => void | false | Promise<void | false>): Promise<void>;
package/dist/src/index.js CHANGED
@@ -26005,7 +26005,7 @@ class ModelQueryBuilder {
26005
26005
  return (await exec.run(sql2, params)).changes;
26006
26006
  }
26007
26007
  }
26008
- function createModel(definition) {
26008
+ function createModelInternal(definition) {
26009
26009
  const model = {
26010
26010
  query: () => new ModelQueryBuilder(definition),
26011
26011
  where(column, operatorOrValue, value) {
@@ -26150,6 +26150,9 @@ function createModel(definition) {
26150
26150
  }
26151
26151
  });
26152
26152
  }
26153
+ function createModel(definition) {
26154
+ return createModelInternal(definition);
26155
+ }
26153
26156
  async function createTableFromModel(definition) {
26154
26157
  const exec = getExecutor();
26155
26158
  const pk = definition.primaryKey || "id";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bun-query-builder",
3
3
  "type": "module",
4
- "version": "0.1.44",
4
+ "version": "0.1.45",
5
5
  "description": "A simple yet performant query builder for TypeScript. Built with Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",