bun-query-builder 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/orm.d.ts CHANGED
@@ -1,5 +1,17 @@
1
1
  import { Database } from 'bun:sqlite';
2
- export type { ModelInstance, ModelQueryBuilder };
2
+ import type { Faker } from 'ts-mocker';
3
+ export type {
4
+ ModelInstance,
5
+ ModelQueryBuilder,
6
+ ModelAttributes,
7
+ InferModelAttributes,
8
+ InferAttributeType,
9
+ SystemFields,
10
+ ColumnName,
11
+ AttributeKeys,
12
+ FillableKeys,
13
+ HiddenKeys,
14
+ };
3
15
  export declare function configureOrm(options: { database?: string | Database; verbose?: boolean }): void;
4
16
  export declare function getDatabase(): Database;
5
17
  /**
@@ -22,7 +34,7 @@ export declare interface TypedAttribute<T = unknown> {
22
34
  rule: unknown
23
35
  message?: Record<string, string>
24
36
  }
25
- factory?: (faker: unknown) => InferType<T>
37
+ factory?: (faker: Faker) => InferType<T>
26
38
  }
27
39
  // Base model definition
28
40
  export declare interface ModelDefinition {
@@ -33,30 +45,68 @@ export declare interface ModelDefinition {
33
45
  connection?: string
34
46
  traits?: {
35
47
  readonly useUuid?: boolean
36
- readonly useTimestamps?: boolean
37
- readonly useSoftDeletes?: boolean
38
- readonly useSearch?: {
48
+ readonly useTimestamps?: boolean | object
49
+ readonly timestampable?: boolean | object
50
+ readonly useSoftDeletes?: boolean | object
51
+ readonly softDeletable?: boolean | object
52
+ readonly useSearch?: boolean | {
39
53
  readonly displayable?: readonly string[]
40
54
  readonly searchable?: readonly string[]
41
55
  readonly sortable?: readonly string[]
42
56
  readonly filterable?: readonly string[]
43
57
  }
44
- readonly useSeeder?: {
58
+ readonly useSeeder?: boolean | {
45
59
  readonly count: number
46
60
  }
47
- readonly useApi?: {
48
- readonly uri: string
49
- readonly routes: readonly string[]
61
+ readonly seedable?: boolean | {
62
+ readonly count: number
63
+ }
64
+ readonly useApi?: boolean | {
65
+ readonly uri?: string
66
+ readonly routes?: readonly string[]
67
+ readonly middleware?: readonly string[]
50
68
  }
69
+ readonly useAuth?: boolean | {
70
+ readonly usePasskey?: boolean
71
+ readonly useTwoFactor?: boolean
72
+ }
73
+ readonly authenticatable?: boolean | object
74
+ readonly observe?: boolean | readonly string[]
75
+ readonly billable?: boolean
76
+ readonly likeable?: boolean | object
77
+ readonly taggable?: boolean
78
+ readonly categorizable?: boolean
79
+ readonly commentables?: boolean
80
+ readonly useActivityLog?: boolean | object
81
+ readonly useSocials?: readonly string[]
51
82
  }
52
83
  belongsTo?: readonly string[]
53
84
  hasMany?: readonly string[]
54
85
  hasOne?: readonly string[]
86
+ belongsToMany?: readonly (string | object)[]
87
+ hasOneThrough?: readonly (string | object)[]
88
+ hasManyThrough?: readonly (string | object)[]
89
+ morphOne?: string | object
90
+ morphMany?: readonly (string | object)[]
91
+ morphTo?: object
92
+ morphToMany?: readonly string[]
93
+ morphedByMany?: readonly string[]
55
94
  attributes: {
56
95
  readonly [key: string]: TypedAttribute<unknown>
57
96
  }
58
97
  get?: Record<string, (attributes: Record<string, unknown>) => unknown>
59
98
  set?: Record<string, (attributes: Record<string, unknown>) => unknown>
99
+ scopes?: Record<string, (value: unknown) => unknown>
100
+ indexes?: readonly object[]
101
+ dashboard?: { readonly highlight?: boolean | number }
102
+ hooks?: {
103
+ readonly beforeCreate?: (data: any) => void | Promise<void>
104
+ readonly afterCreate?: (model: any) => void | Promise<void>
105
+ readonly beforeUpdate?: (model: any, data: any) => void | Promise<void>
106
+ readonly afterUpdate?: (model: any) => void | Promise<void>
107
+ readonly beforeDelete?: (model: any) => void | Promise<void>
108
+ readonly afterDelete?: (model: any) => void | Promise<void>
109
+ }
60
110
  }
61
111
  // Binding helper type for SQL queries
62
112
  declare type Bindings = SQLQueryBindings[]
@@ -77,7 +127,7 @@ declare type InferType<T> = T extends keyof PrimitiveTypeMap ? PrimitiveTypeMap[
77
127
  declare type AttributeKeys<TDef extends ModelDefinition> = keyof TDef['attributes'] & string
78
128
  // Infer single attribute type
79
129
  declare type InferAttributeType<TAttr> = TAttr extends { type: infer T } ? InferType<T> :
80
- TAttr extends { factory: (faker: unknown) => infer R } ? R :
130
+ TAttr extends { factory: (faker: Faker) => infer R } ? R :
81
131
  unknown
82
132
  // Build the full attributes type from definition
83
133
  declare type InferModelAttributes<TDef extends ModelDefinition> = {
@@ -104,6 +154,25 @@ declare type HiddenKeys<TDef extends ModelDefinition> = {
104
154
  declare type FillableKeys<TDef extends ModelDefinition> = {
105
155
  [K in AttributeKeys<TDef>]: TDef['attributes'][K] extends { fillable: true } ? K : never
106
156
  }[AttributeKeys<TDef>]
157
+ // Infer relation names from model definition
158
+ declare type InferBelongsToNames<TDef> = TDef extends { belongsTo: readonly (infer R)[] }
159
+ ? R extends string ? Lowercase<R> : never : never
160
+ declare type InferHasManyNames<TDef> = TDef extends { hasMany: readonly (infer R)[] }
161
+ ? R extends string ? Lowercase<R> : never : never
162
+ declare type InferHasOneNames<TDef> = TDef extends { hasOne: readonly (infer R)[] }
163
+ ? R extends string ? Lowercase<R> : never : never
164
+ declare type InferBelongsToManyNames<TDef> = TDef extends { belongsToMany: readonly (infer R)[] }
165
+ ? R extends string ? Lowercase<R> : R extends { model: infer M extends string } ? Lowercase<M> : never : never
166
+ declare type InferHasOneThroughNames<TDef> = TDef extends { hasOneThrough: readonly (infer R)[] }
167
+ ? R extends string ? Lowercase<R> : R extends { model: infer M extends string } ? Lowercase<M> : never : never
168
+ declare type InferHasManyThroughNames<TDef> = TDef extends { hasManyThrough: readonly (infer R)[] }
169
+ ? R extends string ? Lowercase<R> : R extends { model: infer M extends string } ? Lowercase<M> : never : never
170
+ export type InferRelationNames<TDef> = | InferBelongsToNames<TDef>
171
+ | InferHasManyNames<TDef>
172
+ | InferHasOneNames<TDef>
173
+ | InferBelongsToManyNames<TDef>
174
+ | InferHasOneThroughNames<TDef>
175
+ | InferHasManyThroughNames<TDef>
107
176
  declare type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in' | 'not in'
108
177
  /**
109
178
  * Model instance - represents a single database record
@@ -138,6 +207,7 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
138
207
  private _limit?: number;
139
208
  private _offset?: number;
140
209
  private _select: string[];
210
+ private _withRelations: string[];
141
211
  constructor(definition: TDef);
142
212
  where<K extends ColumnName<TDef>>(column: K, operatorOrValue: WhereOperator | (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown), value?: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown): ModelQueryBuilder<TDef, TSelected>;
143
213
  orWhere<K extends ColumnName<TDef>>(column: K, operatorOrValue: WhereOperator | (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown), value?: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown): ModelQueryBuilder<TDef, TSelected>;
@@ -154,6 +224,8 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
154
224
  offset(count: number): ModelQueryBuilder<TDef, TSelected>;
155
225
  skip(count: number): ModelQueryBuilder<TDef, TSelected>;
156
226
  select<K extends ColumnName<TDef>>(columns: K[]): ModelQueryBuilder<TDef, K>;
227
+ with<R extends InferRelationNames<TDef>>(relations: R[]): ModelQueryBuilder<TDef, TSelected>;
228
+ getWithRelations(): string[];
157
229
  private buildQuery(): { sql: string; params: unknown[] };
158
230
  get(): ModelInstance<TDef, TSelected>[];
159
231
  first(): ModelInstance<TDef, TSelected> | undefined;
package/dist/schema.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { Faker } from 'ts-mocker';
1
2
  /**
2
3
  * # `defineModel(model)`
3
4
  *
@@ -50,7 +51,7 @@ export declare interface Attribute {
50
51
  hidden?: boolean
51
52
  fillable?: boolean
52
53
  guarded?: boolean
53
- factory?: (faker: unknown) => any
54
+ factory?: (faker: Faker) => any
54
55
  validation: {
55
56
  rule: ValidationType
56
57
  message?: ValidatorMessage
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bun-query-builder",
3
3
  "type": "module",
4
- "version": "0.1.11",
4
+ "version": "0.1.12",
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",