bun-query-builder 0.1.15 → 0.1.17
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/actions/data.d.ts +0 -8
- package/dist/bin/cli.js +1451 -2823
- package/dist/browser.d.ts +18 -16
- package/dist/drivers/mysql.d.ts +1 -13
- package/dist/drivers/postgres.d.ts +1 -13
- package/dist/drivers/sqlite.d.ts +1 -13
- package/dist/dynamodb/migration-tracker.d.ts +4 -0
- package/dist/dynamodb-single-table.d.ts +16 -8
- package/dist/orm.d.ts +25 -4
- package/dist/src/browser.js +0 -1
- package/dist/src/dynamodb/index.js +0 -1
- package/dist/src/index.js +1372 -2742
- package/package.json +5 -5
- package/dist/__tests__/type-narrowing-compile.d.ts +0 -1
- package/dist/__tests__/type-narrowing.test.d.ts +0 -1
- package/dist/db.d.ts +0 -31
package/dist/browser.d.ts
CHANGED
|
@@ -56,38 +56,29 @@ export declare function createBrowserDb<Tables extends Record<string, any>>(): {
|
|
|
56
56
|
export declare function createBrowserModel<const TDef extends BrowserModelDefinition>(definition: TDef): void;
|
|
57
57
|
/**
|
|
58
58
|
* Auth helpers for browser
|
|
59
|
-
* @defaultValue
|
|
60
|
-
* ```ts
|
|
61
|
-
* {
|
|
62
|
-
* async login: (credentials: { email: string, password: string }) => unknown,
|
|
63
|
-
* async register: (data: { name: string, email: string, password: string }) => unknown,
|
|
64
|
-
* async logout: () => unknown,
|
|
65
|
-
* async user: () => unknown,
|
|
66
|
-
* async check: () => unknown
|
|
67
|
-
* }
|
|
68
|
-
* ```
|
|
59
|
+
* @defaultValue `{ async login: () => unknown, async register: () => unknown }`
|
|
69
60
|
*/
|
|
70
61
|
export declare const browserAuth: {
|
|
71
62
|
/**
|
|
72
63
|
* Login and store token
|
|
73
64
|
*/
|
|
74
|
-
async login: (credentials:
|
|
65
|
+
async login: (credentials: BrowserAuthCredentials) => Promise<BrowserAuthResult>;
|
|
75
66
|
/**
|
|
76
67
|
* Register a new user
|
|
77
68
|
*/
|
|
78
|
-
async register: (data:
|
|
69
|
+
async register: (data: BrowserAuthRegistrationData) => Promise<BrowserAuthResult>;
|
|
79
70
|
/**
|
|
80
71
|
* Logout and clear token
|
|
81
72
|
*/
|
|
82
|
-
async logout: () =>
|
|
73
|
+
async logout: () => Promise<void>;
|
|
83
74
|
/**
|
|
84
75
|
* Get current authenticated user
|
|
85
76
|
*/
|
|
86
|
-
async user:
|
|
77
|
+
async user: unknown;
|
|
87
78
|
/**
|
|
88
79
|
* Check if user is authenticated
|
|
89
80
|
*/
|
|
90
|
-
async check: () =>
|
|
81
|
+
async check: () => Promise<boolean>;
|
|
91
82
|
/**
|
|
92
83
|
* Get the current token
|
|
93
84
|
*/
|
|
@@ -168,6 +159,17 @@ declare interface QueryState {
|
|
|
168
159
|
selectColumns: string[]
|
|
169
160
|
withRelations: string[]
|
|
170
161
|
}
|
|
162
|
+
export declare interface BrowserAuthCredentials {
|
|
163
|
+
email: string
|
|
164
|
+
password: string
|
|
165
|
+
}
|
|
166
|
+
export declare interface BrowserAuthRegistrationData extends BrowserAuthCredentials {
|
|
167
|
+
name: string
|
|
168
|
+
}
|
|
169
|
+
export declare interface BrowserAuthResult {
|
|
170
|
+
user: Record<string, unknown>
|
|
171
|
+
token: string
|
|
172
|
+
}
|
|
171
173
|
// Primitive type mappings
|
|
172
174
|
declare type PrimitiveTypeMap = {
|
|
173
175
|
string: string
|
|
@@ -256,7 +258,7 @@ declare type BrowserRelationNames<TDef> = | BrowserBelongsToNames<TDef>
|
|
|
256
258
|
| BrowserHasOneThroughNames<TDef>
|
|
257
259
|
| BrowserHasManyThroughNames<TDef>;
|
|
258
260
|
// Types for query building
|
|
259
|
-
export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in' | 'not in' | 'is' | 'is not';
|
|
261
|
+
export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'not like' | 'in' | 'not in' | 'is' | 'is not';
|
|
260
262
|
/**
|
|
261
263
|
* Custom error class for browser query errors
|
|
262
264
|
*/
|
package/dist/drivers/mysql.d.ts
CHANGED
|
@@ -15,17 +15,5 @@ export declare interface DialectDriver {
|
|
|
15
15
|
recordMigrationQuery: () => string
|
|
16
16
|
}
|
|
17
17
|
export declare class MySQLDriver implements DialectDriver {
|
|
18
|
-
|
|
19
|
-
createTable(table: TablePlan): string;
|
|
20
|
-
createIndex(tableName: string, index: IndexPlan): string;
|
|
21
|
-
addForeignKey(tableName: string, columnName: string, refTable: string, refColumn: string, onDelete?: string, onUpdate?: string): string;
|
|
22
|
-
addColumn(tableName: string, column: ColumnPlan): string;
|
|
23
|
-
modifyColumn(tableName: string, column: ColumnPlan): string;
|
|
24
|
-
dropTable(tableName: string): string;
|
|
25
|
-
dropColumn(tableName: string, columnName: string): string;
|
|
26
|
-
dropIndex(tableName: string, indexName: string): string;
|
|
27
|
-
dropEnumType(_enumTypeName: string): string;
|
|
28
|
-
createMigrationsTable(): string;
|
|
29
|
-
getExecutedMigrationsQuery(): string;
|
|
30
|
-
recordMigrationQuery(): string;
|
|
18
|
+
|
|
31
19
|
}
|
|
@@ -15,17 +15,5 @@ export declare interface DialectDriver {
|
|
|
15
15
|
recordMigrationQuery: () => string
|
|
16
16
|
}
|
|
17
17
|
export declare class PostgresDriver implements DialectDriver {
|
|
18
|
-
|
|
19
|
-
createTable(table: TablePlan): string;
|
|
20
|
-
createIndex(tableName: string, index: IndexPlan): string;
|
|
21
|
-
addForeignKey(tableName: string, columnName: string, refTable: string, refColumn: string, onDelete?: string, onUpdate?: string): string;
|
|
22
|
-
addColumn(tableName: string, column: ColumnPlan): string;
|
|
23
|
-
modifyColumn(tableName: string, column: ColumnPlan): string;
|
|
24
|
-
dropTable(tableName: string): string;
|
|
25
|
-
dropColumn(tableName: string, columnName: string): string;
|
|
26
|
-
dropIndex(tableName: string, indexName: string): string;
|
|
27
|
-
dropEnumType(enumTypeName: string): string;
|
|
28
|
-
createMigrationsTable(): string;
|
|
29
|
-
getExecutedMigrationsQuery(): string;
|
|
30
|
-
recordMigrationQuery(): string;
|
|
18
|
+
|
|
31
19
|
}
|
package/dist/drivers/sqlite.d.ts
CHANGED
|
@@ -15,17 +15,5 @@ export declare interface DialectDriver {
|
|
|
15
15
|
recordMigrationQuery: () => string
|
|
16
16
|
}
|
|
17
17
|
export declare class SQLiteDriver implements DialectDriver {
|
|
18
|
-
|
|
19
|
-
createTable(table: TablePlan): string;
|
|
20
|
-
createIndex(tableName: string, index: IndexPlan): string;
|
|
21
|
-
addForeignKey(tableName: string, columnName: string, refTable: string, refColumn: string, onDelete?: string, onUpdate?: string): string;
|
|
22
|
-
addColumn(tableName: string, column: ColumnPlan): string;
|
|
23
|
-
modifyColumn(tableName: string, column: ColumnPlan): string;
|
|
24
|
-
dropTable(tableName: string): string;
|
|
25
|
-
dropColumn(tableName: string, columnName: string): string;
|
|
26
|
-
dropIndex(tableName: string, indexName: string): string;
|
|
27
|
-
dropEnumType(_enumTypeName: string): string;
|
|
28
|
-
createMigrationsTable(): string;
|
|
29
|
-
getExecutedMigrationsQuery(): string;
|
|
30
|
-
recordMigrationQuery(): string;
|
|
18
|
+
|
|
31
19
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { DynamoDBClient } from './client';
|
|
2
2
|
import type { DynamoDBMigrationState } from './migrations';
|
|
3
3
|
import type { DynamoDBTableDefinition } from '../drivers/dynamodb';
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Constants
|
|
6
|
+
// ============================================================================
|
|
7
|
+
declare const MIGRATIONS_TABLE: '_qb_migrations';
|
|
4
8
|
/**
|
|
5
9
|
* Tracks and manages DynamoDB migration state
|
|
6
10
|
*/
|
|
@@ -13,16 +13,16 @@ export declare function createRepository<T extends Record<string, any>>(manager:
|
|
|
13
13
|
* @defaultValue
|
|
14
14
|
* ```ts
|
|
15
15
|
* {
|
|
16
|
-
* simpleEntity: (entityName: string, idField?: string) =>
|
|
16
|
+
* simpleEntity: (entityName: string, idField?: string) => SingleTableEntity,
|
|
17
17
|
* oneToMany: (parentEntity: string,
|
|
18
18
|
* childEntity: string,
|
|
19
19
|
* parentIdField?: string,
|
|
20
|
-
* childIdField?: string,) =>
|
|
20
|
+
* childIdField?: string,) => OneToManyPattern,
|
|
21
21
|
* manyToMany: (entityName: string,
|
|
22
22
|
* relationName: string,
|
|
23
23
|
* idField?: string,
|
|
24
|
-
* relatedIdField?: string,) =>
|
|
25
|
-
* hierarchical: (entityName: string, rootIdField?: string, pathField?: string) =>
|
|
24
|
+
* relatedIdField?: string,) => ManyToManyPattern,
|
|
25
|
+
* hierarchical: (entityName: string, rootIdField?: string, pathField?: string) => SingleTableEntity
|
|
26
26
|
* }
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
@@ -32,26 +32,26 @@ export declare const SingleTablePatterns: {
|
|
|
32
32
|
* PK: USER#<userId>
|
|
33
33
|
* SK: PROFILE for metadata, or related items like ORDER#<orderId>
|
|
34
34
|
*/
|
|
35
|
-
simpleEntity: (entityName: string, idField?: string) =>
|
|
35
|
+
simpleEntity: (entityName: string, idField?: string) => SingleTableEntity;
|
|
36
36
|
/**
|
|
37
37
|
* One-to-many relationship pattern
|
|
38
38
|
* Parent: PK=PARENT#<parentId>, SK=METADATA
|
|
39
39
|
* Child: PK=PARENT#<parentId>, SK=CHILD#<childId>
|
|
40
40
|
*/
|
|
41
|
-
oneToMany: (parentEntity: string, childEntity: string, parentIdField?: string, childIdField?: string,) =>
|
|
41
|
+
oneToMany: (parentEntity: string, childEntity: string, parentIdField?: string, childIdField?: string,) => OneToManyPattern;
|
|
42
42
|
/**
|
|
43
43
|
* Many-to-many relationship pattern using adjacency list
|
|
44
44
|
* Entity: PK=ENTITY#<entityId>, SK=METADATA
|
|
45
45
|
* Relationship: PK=ENTITY#<entityId>, SK=RELATED#<relatedId>
|
|
46
46
|
* Inverse: PK=ENTITY#<relatedId>, SK=RELATED#<entityId> (via GSI)
|
|
47
47
|
*/
|
|
48
|
-
manyToMany: (entityName: string, relationName: string, idField?: string, relatedIdField?: string,) =>
|
|
48
|
+
manyToMany: (entityName: string, relationName: string, idField?: string, relatedIdField?: string,) => ManyToManyPattern;
|
|
49
49
|
/**
|
|
50
50
|
* Hierarchical data pattern (e.g., org chart, file system)
|
|
51
51
|
* PK: ROOT#<rootId>
|
|
52
52
|
* SK: PATH#<path> (e.g., PATH#/folder1/folder2/file)
|
|
53
53
|
*/
|
|
54
|
-
hierarchical: (entityName: string, rootIdField?: string, pathField?: string) =>
|
|
54
|
+
hierarchical: (entityName: string, rootIdField?: string, pathField?: string) => SingleTableEntity
|
|
55
55
|
};
|
|
56
56
|
/**
|
|
57
57
|
* Entity definition for single table design
|
|
@@ -86,6 +86,14 @@ export declare interface SingleTableConfig {
|
|
|
86
86
|
}[]
|
|
87
87
|
entities: SingleTableEntity[]
|
|
88
88
|
}
|
|
89
|
+
export declare interface OneToManyPattern {
|
|
90
|
+
parent: SingleTableEntity
|
|
91
|
+
child: SingleTableEntity
|
|
92
|
+
}
|
|
93
|
+
export declare interface ManyToManyPattern {
|
|
94
|
+
entity: SingleTableEntity
|
|
95
|
+
relation: SingleTableEntity
|
|
96
|
+
}
|
|
89
97
|
/**
|
|
90
98
|
* Single Table Design Manager
|
|
91
99
|
*
|
package/dist/orm.d.ts
CHANGED
|
@@ -41,6 +41,11 @@ export declare interface TypedAttribute<T = unknown> {
|
|
|
41
41
|
// eslint-disable-next-line ts/no-empty-object-type
|
|
42
42
|
export declare interface ModelHookInstance extends Record<string, unknown> {
|
|
43
43
|
get(key: string): unknown
|
|
44
|
+
getAttribute?(key: string): unknown
|
|
45
|
+
getAttributes?(): Record<string, unknown>
|
|
46
|
+
only?(keys: ReadonlyArray<string>): Record<string, unknown>
|
|
47
|
+
except?(keys: ReadonlyArray<string>): Record<string, unknown>
|
|
48
|
+
toArray?(): Record<string, unknown>
|
|
44
49
|
}
|
|
45
50
|
// Base model definition
|
|
46
51
|
export declare interface ModelDefinition {
|
|
@@ -203,14 +208,18 @@ export type InferRelationNames<TDef> = | InferBelongsToNames<TDef>
|
|
|
203
208
|
| InferBelongsToManyNames<TDef>
|
|
204
209
|
| InferHasOneThroughNames<TDef>
|
|
205
210
|
| InferHasManyThroughNames<TDef>;
|
|
206
|
-
declare type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in' | 'not in';
|
|
211
|
+
declare type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'not like' | 'in' | 'not in';
|
|
207
212
|
/**
|
|
208
213
|
* Model instance - represents a single database record
|
|
209
214
|
*/
|
|
210
215
|
declare class ModelInstance<TDef extends ModelDefinition, TSelected extends ColumnName<TDef> = ColumnName<TDef>> {
|
|
211
216
|
constructor(definition: TDef, attributes?: Partial<ModelAttributes<TDef>>);
|
|
212
217
|
get<K extends TSelected>(key: K): K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : never;
|
|
218
|
+
getAttribute<K extends TSelected>(key: K): K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown;
|
|
219
|
+
getAttributes(): Pick<ModelAttributes<TDef>, TSelected & keyof ModelAttributes<TDef>>;
|
|
213
220
|
set<K extends ColumnName<TDef>>(key: K, value: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown): void;
|
|
221
|
+
only<K extends TSelected>(keys: ReadonlyArray<K>): Partial<ModelAttributes<TDef>>;
|
|
222
|
+
except<K extends TSelected>(keys: ReadonlyArray<K>): Partial<ModelAttributes<TDef>>;
|
|
214
223
|
getRelation(name: string): ModelInstance<any, any>[] | ModelInstance<any, any> | null | undefined;
|
|
215
224
|
setRelation(name: string, data: ModelInstance<any, any>[] | ModelInstance<any, any> | null): void;
|
|
216
225
|
getLoadedRelations(): Record<string, ModelInstance<any, any>[] | ModelInstance<any, any> | null>;
|
|
@@ -224,8 +233,9 @@ declare class ModelInstance<TDef extends ModelDefinition, TSelected extends Colu
|
|
|
224
233
|
forceFill(data: Partial<InferModelAttributes<TDef>>): this;
|
|
225
234
|
save(): this;
|
|
226
235
|
update(data: Partial<Pick<InferModelAttributes<TDef>, FillableKeys<TDef>>>): this;
|
|
236
|
+
fresh(): ModelInstance<TDef, TSelected> | null;
|
|
227
237
|
delete(): boolean;
|
|
228
|
-
refresh(): this;
|
|
238
|
+
refresh(): this | null;
|
|
229
239
|
replicate(): ModelInstance<TDef, TSelected>;
|
|
230
240
|
toJSON(): Omit<Pick<ModelAttributes<TDef>, TSelected & keyof ModelAttributes<TDef>>, HiddenKeys<TDef>>;
|
|
231
241
|
toArray(): Omit<Pick<ModelAttributes<TDef>, TSelected & keyof ModelAttributes<TDef>>, HiddenKeys<TDef>>;
|
|
@@ -242,10 +252,21 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
|
|
|
242
252
|
orWhere<K extends ColumnName<TDef>>(column: K, operator: WhereOperator, value: K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown): ModelQueryBuilder<TDef, TSelected>;
|
|
243
253
|
orWhere<K extends ColumnName<TDef>>(column: K, operatorOrValue: WhereOperator | unknown, value?: unknown): ModelQueryBuilder<TDef, TSelected>;
|
|
244
254
|
whereIn<K extends ColumnName<TDef>>(column: K, values: (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[]): ModelQueryBuilder<TDef, TSelected>;
|
|
255
|
+
orWhereIn<K extends ColumnName<TDef>>(column: K, values: (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[]): ModelQueryBuilder<TDef, TSelected>;
|
|
245
256
|
whereNotIn<K extends ColumnName<TDef>>(column: K, values: (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[]): ModelQueryBuilder<TDef, TSelected>;
|
|
257
|
+
orWhereNotIn<K extends ColumnName<TDef>>(column: K, values: (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[]): ModelQueryBuilder<TDef, TSelected>;
|
|
246
258
|
whereNull<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
|
|
259
|
+
orWhereNull<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
|
|
247
260
|
whereNotNull<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
|
|
261
|
+
orWhereNotNull<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
|
|
248
262
|
whereLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
|
|
263
|
+
orWhereLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
|
|
264
|
+
whereNotLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
|
|
265
|
+
orWhereNotLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
|
|
266
|
+
whereRaw(fragment: string, ...params: unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
267
|
+
orWhereRaw(fragment: string, ...params: unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
268
|
+
whereGroup(callback: (builder: ModelQueryBuilder<TDef, TSelected>) => unknown): ModelQueryBuilder<TDef, TSelected>;
|
|
269
|
+
orWhereGroup(callback: (builder: ModelQueryBuilder<TDef, TSelected>) => unknown): ModelQueryBuilder<TDef, TSelected>;
|
|
249
270
|
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, TSelected>;
|
|
250
271
|
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, TSelected>;
|
|
251
272
|
when(condition: unknown, callback: (builder: ModelQueryBuilder<TDef, TSelected>) => ModelQueryBuilder<TDef, TSelected>): ModelQueryBuilder<TDef, TSelected>;
|
|
@@ -283,8 +304,8 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
|
|
|
283
304
|
to: number | null
|
|
284
305
|
};
|
|
285
306
|
pluck<K extends ColumnName<TDef>>(column: K): (K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown)[];
|
|
286
|
-
max<K extends ColumnName<TDef>>(column: K): number;
|
|
287
|
-
min<K extends ColumnName<TDef>>(column: K): number;
|
|
307
|
+
max<K extends ColumnName<TDef>>(column: K): number | null;
|
|
308
|
+
min<K extends ColumnName<TDef>>(column: K): number | null;
|
|
288
309
|
avg<K extends NumericColumns<TDef>>(column: K): number;
|
|
289
310
|
sum<K extends NumericColumns<TDef>>(column: K): number;
|
|
290
311
|
delete(): number;
|
package/dist/src/browser.js
CHANGED