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/browser.d.ts +2 -4
- package/dist/client.d.ts +10 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3914 -1745
- package/dist/orm.d.ts +82 -10
- package/dist/schema.d.ts +2 -1
- package/package.json +1 -1
package/dist/orm.d.ts
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { Database } from 'bun:sqlite';
|
|
2
|
-
|
|
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:
|
|
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
|
|
38
|
-
readonly
|
|
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
|
|
48
|
-
readonly
|
|
49
|
-
|
|
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:
|
|
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:
|
|
54
|
+
factory?: (faker: Faker) => any
|
|
54
55
|
validation: {
|
|
55
56
|
rule: ValidationType
|
|
56
57
|
message?: ValidatorMessage
|
package/package.json
CHANGED