kysely 0.14.0 → 0.15.2
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/README.md +95 -39
- package/dist/cjs/dialect/mysql/mysql-introspector.js +3 -3
- package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -3
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +3 -3
- package/dist/cjs/index-nodeless.d.ts +148 -0
- package/dist/cjs/index-nodeless.js +149 -0
- package/dist/cjs/index.d.ts +6 -150
- package/dist/cjs/index.js +6 -139
- package/dist/cjs/kysely.d.ts +7 -39
- package/dist/cjs/kysely.js +8 -40
- package/dist/cjs/migration/file-migration-provider.d.ts +52 -0
- package/dist/cjs/migration/file-migration-provider.js +52 -0
- package/dist/cjs/migration/{migration.d.ts → migrator.d.ts} +159 -134
- package/dist/cjs/migration/{migration.js → migrator.js} +166 -57
- package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
- package/dist/cjs/parser/insert-values-parser.js +2 -3
- package/dist/cjs/parser/reference-parser.d.ts +4 -3
- package/dist/cjs/parser/select-parser.d.ts +10 -4
- package/dist/cjs/parser/update-set-parser.d.ts +2 -1
- package/dist/cjs/query-builder/delete-query-builder.d.ts +2 -4
- package/dist/cjs/query-builder/insert-query-builder.d.ts +5 -21
- package/dist/cjs/query-builder/insert-query-builder.js +2 -7
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +5 -3
- package/dist/cjs/query-builder/on-conflict-builder.js +2 -2
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -4
- package/dist/cjs/query-builder/select-query-builder.d.ts +1 -1
- package/dist/cjs/query-builder/update-query-builder.d.ts +2 -4
- package/dist/cjs/query-creator.d.ts +0 -2
- package/dist/cjs/query-creator.js +0 -2
- package/dist/cjs/util/column-type.d.ts +165 -0
- package/dist/cjs/util/column-type.js +2 -0
- package/dist/cjs/util/private-symbols.d.ts +5 -0
- package/dist/cjs/util/private-symbols.js +8 -0
- package/dist/cjs/util/type-utils.d.ts +6 -42
- package/dist/esm/dialect/mysql/mysql-introspector.js +1 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
- package/dist/esm/index-nodeless.d.ts +148 -0
- package/dist/esm/index-nodeless.js +137 -0
- package/dist/esm/index.d.ts +6 -150
- package/dist/esm/index.js +6 -139
- package/dist/esm/kysely.d.ts +7 -39
- package/dist/esm/kysely.js +8 -40
- package/dist/esm/migration/file-migration-provider.d.ts +52 -0
- package/dist/esm/migration/file-migration-provider.js +48 -0
- package/dist/esm/migration/{migration.d.ts → migrator.d.ts} +159 -134
- package/dist/esm/migration/{migration.js → migrator.js} +165 -56
- package/dist/esm/parser/insert-values-parser.d.ts +4 -4
- package/dist/esm/parser/insert-values-parser.js +2 -3
- package/dist/esm/parser/reference-parser.d.ts +4 -3
- package/dist/esm/parser/select-parser.d.ts +10 -4
- package/dist/esm/parser/update-set-parser.d.ts +2 -1
- package/dist/esm/query-builder/delete-query-builder.d.ts +2 -4
- package/dist/esm/query-builder/insert-query-builder.d.ts +5 -21
- package/dist/esm/query-builder/insert-query-builder.js +1 -6
- package/dist/esm/query-builder/on-conflict-builder.d.ts +5 -3
- package/dist/esm/query-builder/on-conflict-builder.js +2 -2
- package/dist/esm/query-builder/returning-interface.d.ts +2 -4
- package/dist/esm/query-builder/select-query-builder.d.ts +1 -1
- package/dist/esm/query-builder/update-query-builder.d.ts +2 -4
- package/dist/esm/query-creator.d.ts +0 -2
- package/dist/esm/query-creator.js +0 -2
- package/dist/esm/util/column-type.d.ts +165 -0
- package/dist/esm/util/column-type.js +1 -0
- package/dist/esm/util/private-symbols.d.ts +5 -0
- package/dist/esm/util/private-symbols.js +5 -0
- package/dist/esm/util/type-utils.d.ts +6 -42
- package/package.json +1 -1
- package/test.js +3 -0
- package/dist/cjs/util/generated-placeholder.d.ts +0 -3
- package/dist/cjs/util/generated-placeholder.js +0 -11
- package/dist/esm/util/generated-placeholder.d.ts +0 -3
- package/dist/esm/util/generated-placeholder.js +0 -7
|
@@ -10,8 +10,8 @@ import { InsertResult } from './insert-result.js';
|
|
|
10
10
|
import { NoResultError } from './no-result-error.js';
|
|
11
11
|
import { parseComplexExpression, } from '../parser/complex-expression-parser.js';
|
|
12
12
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
13
|
-
import { OnConflictNode } from '../index.js';
|
|
14
13
|
import { OnConflictBuilder, } from './on-conflict-builder.js';
|
|
14
|
+
import { OnConflictNode } from '../operation-node/on-conflict-node.js';
|
|
15
15
|
export class InsertQueryBuilder {
|
|
16
16
|
#props;
|
|
17
17
|
constructor(props) {
|
|
@@ -124,7 +124,6 @@ export class InsertQueryBuilder {
|
|
|
124
124
|
* await db
|
|
125
125
|
* .insertInto('pet')
|
|
126
126
|
* .values({
|
|
127
|
-
* id: db.generated,
|
|
128
127
|
* name: 'Catto',
|
|
129
128
|
* species: 'cat',
|
|
130
129
|
* })
|
|
@@ -150,7 +149,6 @@ export class InsertQueryBuilder {
|
|
|
150
149
|
* await db
|
|
151
150
|
* .insertInto('pet')
|
|
152
151
|
* .values({
|
|
153
|
-
* id: db.generated,
|
|
154
152
|
* name: 'Catto',
|
|
155
153
|
* species: 'cat',
|
|
156
154
|
* })
|
|
@@ -178,7 +176,6 @@ export class InsertQueryBuilder {
|
|
|
178
176
|
* await db
|
|
179
177
|
* .insertInto('pet')
|
|
180
178
|
* .values({
|
|
181
|
-
* id: db.generated,
|
|
182
179
|
* name: 'Catto',
|
|
183
180
|
* species: 'cat',
|
|
184
181
|
* })
|
|
@@ -204,7 +201,6 @@ export class InsertQueryBuilder {
|
|
|
204
201
|
* await db
|
|
205
202
|
* .insertInto('pet')
|
|
206
203
|
* .values({
|
|
207
|
-
* id: db.generated,
|
|
208
204
|
* name: 'Catto',
|
|
209
205
|
* species: 'cat',
|
|
210
206
|
* })
|
|
@@ -232,7 +228,6 @@ export class InsertQueryBuilder {
|
|
|
232
228
|
* await db
|
|
233
229
|
* .insertInto('pet')
|
|
234
230
|
* .values({
|
|
235
|
-
* id: db.generated,
|
|
236
231
|
* name: 'Catto',
|
|
237
232
|
* species: 'cat',
|
|
238
233
|
* })
|
|
@@ -337,7 +337,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
337
337
|
* ```ts
|
|
338
338
|
* await db
|
|
339
339
|
* .insertInto('person')
|
|
340
|
-
* .values({
|
|
340
|
+
* .values({ first_name, pic })
|
|
341
341
|
* .onConflict((oc) => oc
|
|
342
342
|
* .column('pic')
|
|
343
343
|
* .doNothing()
|
|
@@ -361,7 +361,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
361
361
|
* ```ts
|
|
362
362
|
* await db
|
|
363
363
|
* .insertInto('person')
|
|
364
|
-
* .values({
|
|
364
|
+
* .values({ first_name, pic })
|
|
365
365
|
* .onConflict((oc) => oc
|
|
366
366
|
* .column('pic')
|
|
367
367
|
* .doUpdateSet({ first_name })
|
|
@@ -377,7 +377,9 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
|
|
|
377
377
|
* do update set "first_name" = $3
|
|
378
378
|
* ```
|
|
379
379
|
*/
|
|
380
|
-
doUpdateSet(updates: MutationObject<DB, TB>): OnConflictUpdateBuilder<
|
|
380
|
+
doUpdateSet(updates: MutationObject<DB, TB>): OnConflictUpdateBuilder<{
|
|
381
|
+
[K in keyof DB | 'excluded']: K extends keyof DB ? DB[K] : DB[TB];
|
|
382
|
+
}, TB | 'excluded'>;
|
|
381
383
|
}
|
|
382
384
|
export interface OnConflictBuilderProps {
|
|
383
385
|
readonly onConflictNode: OnConflictNode;
|
|
@@ -160,7 +160,7 @@ export class OnConflictBuilder {
|
|
|
160
160
|
* ```ts
|
|
161
161
|
* await db
|
|
162
162
|
* .insertInto('person')
|
|
163
|
-
* .values({
|
|
163
|
+
* .values({ first_name, pic })
|
|
164
164
|
* .onConflict((oc) => oc
|
|
165
165
|
* .column('pic')
|
|
166
166
|
* .doNothing()
|
|
@@ -191,7 +191,7 @@ export class OnConflictBuilder {
|
|
|
191
191
|
* ```ts
|
|
192
192
|
* await db
|
|
193
193
|
* .insertInto('person')
|
|
194
|
-
* .values({
|
|
194
|
+
* .values({ first_name, pic })
|
|
195
195
|
* .onConflict((oc) => oc
|
|
196
196
|
* .column('pic')
|
|
197
197
|
* .doUpdateSet({ first_name })
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ReturningRow } from '../parser/returning-parser.js';
|
|
2
2
|
import { SelectExpression } from '../parser/select-parser.js';
|
|
3
|
+
import { Selectable } from '../util/column-type.js';
|
|
3
4
|
export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
4
5
|
/**
|
|
5
6
|
* Allows you to return data from modified rows.
|
|
@@ -21,7 +22,6 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
|
21
22
|
* const { id } = await db
|
|
22
23
|
* .insertInto('person')
|
|
23
24
|
* .values({
|
|
24
|
-
* id: db.generated,
|
|
25
25
|
* first_name: 'Jennifer',
|
|
26
26
|
* last_name: 'Aniston'
|
|
27
27
|
* })
|
|
@@ -35,7 +35,6 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
|
35
35
|
* const { id, first_name } = await db
|
|
36
36
|
* .insertInto('person')
|
|
37
37
|
* .values({
|
|
38
|
-
* id: db.generated,
|
|
39
38
|
* first_name: 'Jennifer',
|
|
40
39
|
* last_name: 'Aniston'
|
|
41
40
|
* })
|
|
@@ -51,7 +50,6 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
|
51
50
|
* const { id, full_name, first_pet_id } = await db
|
|
52
51
|
* .insertInto('person')
|
|
53
52
|
* .values({
|
|
54
|
-
* id: db.generated,
|
|
55
53
|
* first_name: 'Jennifer',
|
|
56
54
|
* last_name: 'Aniston'
|
|
57
55
|
* })
|
|
@@ -69,5 +67,5 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
|
69
67
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
70
68
|
* that support `returning` such as PostgreSQL.
|
|
71
69
|
*/
|
|
72
|
-
returningAll(): ReturningInterface<DB, TB, DB[TB]
|
|
70
|
+
returningAll(): ReturningInterface<DB, TB, Selectable<DB[TB]>>;
|
|
73
71
|
}
|
|
@@ -731,7 +731,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
731
731
|
*/
|
|
732
732
|
selectAll<T extends TB>(table: ReadonlyArray<T>): SelectAllQueryBuilder<DB, TB, O, T>;
|
|
733
733
|
selectAll<T extends TB>(table: T): SelectAllQueryBuilder<DB, TB, O, T>;
|
|
734
|
-
selectAll
|
|
734
|
+
selectAll(): SelectAllQueryBuilder<DB, TB, O, TB>;
|
|
735
735
|
/**
|
|
736
736
|
* Joins another table to the query using an inner join.
|
|
737
737
|
*
|
|
@@ -18,6 +18,7 @@ import { WhereInterface } from './where-interface.js';
|
|
|
18
18
|
import { JoinInterface } from './join-interface.js';
|
|
19
19
|
import { ReturningInterface } from './returning-interface.js';
|
|
20
20
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
21
|
+
import { Selectable } from '../util/column-type.js';
|
|
21
22
|
export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
|
|
22
23
|
#private;
|
|
23
24
|
constructor(props: UpdateQueryBuilderProps);
|
|
@@ -626,7 +627,6 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
626
627
|
* const { id } = await db
|
|
627
628
|
* .insertInto('person')
|
|
628
629
|
* .values({
|
|
629
|
-
* id: db.generated,
|
|
630
630
|
* first_name: 'Jennifer',
|
|
631
631
|
* last_name: 'Aniston'
|
|
632
632
|
* })
|
|
@@ -640,7 +640,6 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
640
640
|
* const { id, first_name } = await db
|
|
641
641
|
* .insertInto('person')
|
|
642
642
|
* .values({
|
|
643
|
-
* id: db.generated,
|
|
644
643
|
* first_name: 'Jennifer',
|
|
645
644
|
* last_name: 'Aniston'
|
|
646
645
|
* })
|
|
@@ -656,7 +655,6 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
656
655
|
* const { id, full_name, first_pet_id } = await db
|
|
657
656
|
* .insertInto('person')
|
|
658
657
|
* .values({
|
|
659
|
-
* id: db.generated,
|
|
660
658
|
* first_name: 'Jennifer',
|
|
661
659
|
* last_name: 'Aniston'
|
|
662
660
|
* })
|
|
@@ -674,7 +672,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
674
672
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
675
673
|
* that support `returning` such as PostgreSQL.
|
|
676
674
|
*/
|
|
677
|
-
returningAll(): UpdateQueryBuilder<DB, TB, DB[TB]
|
|
675
|
+
returningAll(): UpdateQueryBuilder<DB, TB, Selectable<DB[TB]>>;
|
|
678
676
|
/**
|
|
679
677
|
* Simply calls the given function passing `this` as the only argument.
|
|
680
678
|
*
|
|
@@ -137,7 +137,6 @@ export declare class QueryCreator<DB> {
|
|
|
137
137
|
* const result = await db
|
|
138
138
|
* .insertInto('person')
|
|
139
139
|
* .values({
|
|
140
|
-
* id: db.generated,
|
|
141
140
|
* first_name: 'Jennifer',
|
|
142
141
|
* last_name: 'Aniston'
|
|
143
142
|
* })
|
|
@@ -152,7 +151,6 @@ export declare class QueryCreator<DB> {
|
|
|
152
151
|
* const { id } = await db
|
|
153
152
|
* .insertInto('person')
|
|
154
153
|
* .values({
|
|
155
|
-
* id: db.generated,
|
|
156
154
|
* first_name: 'Jennifer',
|
|
157
155
|
* last_name: 'Aniston'
|
|
158
156
|
* })
|
|
@@ -43,7 +43,6 @@ export class QueryCreator {
|
|
|
43
43
|
* const result = await db
|
|
44
44
|
* .insertInto('person')
|
|
45
45
|
* .values({
|
|
46
|
-
* id: db.generated,
|
|
47
46
|
* first_name: 'Jennifer',
|
|
48
47
|
* last_name: 'Aniston'
|
|
49
48
|
* })
|
|
@@ -58,7 +57,6 @@ export class QueryCreator {
|
|
|
58
57
|
* const { id } = await db
|
|
59
58
|
* .insertInto('person')
|
|
60
59
|
* .values({
|
|
61
|
-
* id: db.generated,
|
|
62
60
|
* first_name: 'Jennifer',
|
|
63
61
|
* last_name: 'Aniston'
|
|
64
62
|
* })
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This type can be used to specify a different type for
|
|
3
|
+
* select, insert and update operations.
|
|
4
|
+
*
|
|
5
|
+
* Also see the {@link Generated} type.
|
|
6
|
+
*
|
|
7
|
+
* ### Examples
|
|
8
|
+
*
|
|
9
|
+
* The next example defines a number column that is optional
|
|
10
|
+
* in inserts and updates. All columns are always optional
|
|
11
|
+
* in updates so therefore we don't need to specify `undefined`
|
|
12
|
+
* for the update type. The type below is useful for all kinds of
|
|
13
|
+
* database generated columns like identifiers. The `Generated`
|
|
14
|
+
* type is actually just a shortcut for the type in this example:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* ColumnType<number, number | undefined, number>
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The above example makes the column optional in inserts
|
|
21
|
+
* and updates, but you can still choose to provide the
|
|
22
|
+
* column. If you want to prevent insertion/update you
|
|
23
|
+
* can se the type as `never`:
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* ColumnType<number, never, never>
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* Here's one more example where the type is different
|
|
30
|
+
* for each different operation:
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* ColumnType<Date, string, never>
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare type ColumnType<SelectType, InsertType = SelectType, UpdateType = SelectType> = {
|
|
37
|
+
readonly __select__: SelectType;
|
|
38
|
+
readonly __insert__: InsertType;
|
|
39
|
+
readonly __update__: UpdateType;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* A shortcut for defining database-generated columns. The type
|
|
43
|
+
* is the same for all selects, inserts and updates but the
|
|
44
|
+
* column is optional for inserts and updates.
|
|
45
|
+
*
|
|
46
|
+
* This is implemented using {@link ColumnType} like this:
|
|
47
|
+
*
|
|
48
|
+
* ```ts
|
|
49
|
+
* type Generated<S> = ColumnType<S, S | undefined, S>
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare type Generated<S> = ColumnType<S, S | undefined, S>;
|
|
53
|
+
/**
|
|
54
|
+
* Evaluates to `K` if `T` can be `null` or `undefined`.
|
|
55
|
+
*/
|
|
56
|
+
declare type IfNullable<T, K> = undefined extends T ? K : null extends T ? K : never;
|
|
57
|
+
/**
|
|
58
|
+
* Evaluates to `K` if `T` can't be `null` or `undefined`.
|
|
59
|
+
*/
|
|
60
|
+
declare type IfNotNullable<T, K> = undefined extends T ? never : null extends T ? never : T extends never ? never : K;
|
|
61
|
+
/**
|
|
62
|
+
* Evaluates to `K` if `T` isn't `never`.
|
|
63
|
+
*/
|
|
64
|
+
declare type IfNotNever<T, K> = T extends never ? never : K;
|
|
65
|
+
export declare type SelectType<T> = T extends ColumnType<infer S, any, any> ? S : T;
|
|
66
|
+
export declare type InsertType<T> = T extends ColumnType<any, infer I, any> ? I : T;
|
|
67
|
+
export declare type UpdateType<T> = T extends ColumnType<any, any, infer U> ? U : T;
|
|
68
|
+
/**
|
|
69
|
+
* Keys of `R` whose `InsertType` values can be `null` or `undefined`.
|
|
70
|
+
*/
|
|
71
|
+
export declare type NullableInsertKeys<R> = {
|
|
72
|
+
[K in keyof R]: IfNullable<InsertType<R[K]>, K>;
|
|
73
|
+
}[keyof R];
|
|
74
|
+
/**
|
|
75
|
+
* Keys of `R` whose `InsertType` values can't be `null` or `undefined`.
|
|
76
|
+
*/
|
|
77
|
+
export declare type NonNullableInsertKeys<R> = {
|
|
78
|
+
[K in keyof R]: IfNotNullable<InsertType<R[K]>, K>;
|
|
79
|
+
}[keyof R];
|
|
80
|
+
/**
|
|
81
|
+
* Keys of `R` whose `SelectType` values are not `never`
|
|
82
|
+
*/
|
|
83
|
+
declare type NonNeverSelectKeys<R> = {
|
|
84
|
+
[K in keyof R]: IfNotNever<SelectType<R[K]>, K>;
|
|
85
|
+
}[keyof R];
|
|
86
|
+
/**
|
|
87
|
+
* Keys of `R` whose `UpdateType` values are not `never`
|
|
88
|
+
*/
|
|
89
|
+
export declare type UpdateKeys<R> = {
|
|
90
|
+
[K in keyof R]: IfNotNever<UpdateType<R[K]>, K>;
|
|
91
|
+
}[keyof R];
|
|
92
|
+
/**
|
|
93
|
+
* Given a table interface, extracts the select type from all
|
|
94
|
+
* {@link ColumnType} types.
|
|
95
|
+
*
|
|
96
|
+
* ### Examples
|
|
97
|
+
*
|
|
98
|
+
* ```ts
|
|
99
|
+
* interface PersonTable {
|
|
100
|
+
* id: Generated<number>
|
|
101
|
+
* first_name: string
|
|
102
|
+
* modified_at: ColumnType<Date, string, never>
|
|
103
|
+
* }
|
|
104
|
+
*
|
|
105
|
+
* type Person = Selectable<PersonTable>
|
|
106
|
+
* // {
|
|
107
|
+
* // id: number,
|
|
108
|
+
* // first_name: string
|
|
109
|
+
* // modified_at: Date
|
|
110
|
+
* // }
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export declare type Selectable<R> = {
|
|
114
|
+
[K in NonNeverSelectKeys<R>]: SelectType<R[K]>;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Given a table interface, extracts the insert type from all
|
|
118
|
+
* {@link ColumnType} types.
|
|
119
|
+
*
|
|
120
|
+
* ### Examples
|
|
121
|
+
*
|
|
122
|
+
* ```ts
|
|
123
|
+
* interface PersonTable {
|
|
124
|
+
* id: Generated<number>
|
|
125
|
+
* first_name: string
|
|
126
|
+
* modified_at: ColumnType<Date, string, never>
|
|
127
|
+
* }
|
|
128
|
+
*
|
|
129
|
+
* type InsertablePerson = Insertable<PersonTable>
|
|
130
|
+
* // {
|
|
131
|
+
* // id?: number,
|
|
132
|
+
* // first_name: string
|
|
133
|
+
* // modified_at: string
|
|
134
|
+
* // }
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export declare type Insertable<R> = {
|
|
138
|
+
[K in NonNullableInsertKeys<R>]: InsertType<R[K]>;
|
|
139
|
+
} & {
|
|
140
|
+
[K in NullableInsertKeys<R>]?: InsertType<R[K]>;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Given a table interface, extracts the update type from all
|
|
144
|
+
* {@link ColumnType} types.
|
|
145
|
+
*
|
|
146
|
+
* ### Examples
|
|
147
|
+
*
|
|
148
|
+
* ```ts
|
|
149
|
+
* interface PersonTable {
|
|
150
|
+
* id: Generated<number>
|
|
151
|
+
* first_name: string
|
|
152
|
+
* modified_at: ColumnType<Date, string, never>
|
|
153
|
+
* }
|
|
154
|
+
*
|
|
155
|
+
* type UpdateablePerson = Updateable<PersonTable>
|
|
156
|
+
* // {
|
|
157
|
+
* // id?: number,
|
|
158
|
+
* // first_name?: string
|
|
159
|
+
* // }
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export declare type Updateable<R> = {
|
|
163
|
+
[K in UpdateKeys<R>]?: UpdateType<R[K]>;
|
|
164
|
+
};
|
|
165
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -8,43 +8,6 @@ import { UpdateResult } from '../query-builder/update-result.js';
|
|
|
8
8
|
* Given an object type, extracts the union of all value types.
|
|
9
9
|
*/
|
|
10
10
|
export declare type ValueType<T> = T[keyof T];
|
|
11
|
-
/**
|
|
12
|
-
* Given a database type and a union of table names returns the row type
|
|
13
|
-
* that you would get by selecting all columns from tables TB.
|
|
14
|
-
*
|
|
15
|
-
* Example:
|
|
16
|
-
*
|
|
17
|
-
* ```ts
|
|
18
|
-
* interface Person {
|
|
19
|
-
* id: number
|
|
20
|
-
* }
|
|
21
|
-
*
|
|
22
|
-
* interface Pet {
|
|
23
|
-
* name: string
|
|
24
|
-
* species: 'cat' | 'dog'
|
|
25
|
-
* }
|
|
26
|
-
*
|
|
27
|
-
* interface Movie {
|
|
28
|
-
* stars: number
|
|
29
|
-
* }
|
|
30
|
-
*
|
|
31
|
-
* interface Database {
|
|
32
|
-
* person: Person
|
|
33
|
-
* pet: Pet
|
|
34
|
-
* movie: Movie
|
|
35
|
-
* }
|
|
36
|
-
*
|
|
37
|
-
* type Row = RowType<Database, 'person' | 'movie'>
|
|
38
|
-
*
|
|
39
|
-
* // Row == Person & Movie
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export declare type RowType<DB, TB extends keyof DB> = UnionToIntersection<DB[TB]>;
|
|
43
|
-
/**
|
|
44
|
-
* Evil typescript magic to convert a union type `A | B | C` into an
|
|
45
|
-
* intersection type `A & B & C`.
|
|
46
|
-
*/
|
|
47
|
-
declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
48
11
|
/**
|
|
49
12
|
* Given a database type and a union of table names in that db, returns
|
|
50
13
|
* a union type with all possible column names.
|
|
@@ -79,6 +42,12 @@ declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) e
|
|
|
79
42
|
export declare type AnyColumn<DB, TB extends keyof DB> = {
|
|
80
43
|
[T in TB]: keyof DB[T];
|
|
81
44
|
}[TB] & string;
|
|
45
|
+
/**
|
|
46
|
+
* Extracts a column type.
|
|
47
|
+
*/
|
|
48
|
+
export declare type ExtractColumnType<DB, TB extends keyof DB, C> = {
|
|
49
|
+
[T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
|
|
50
|
+
}[TB];
|
|
82
51
|
/**
|
|
83
52
|
* Given a database type and a union of table names in that db, returns
|
|
84
53
|
* a union type with all possible `table`.`column` combinations.
|
|
@@ -137,13 +106,8 @@ export declare type SelectQueryBuilderFactory<DB, TB extends keyof DB> = (qb: Ex
|
|
|
137
106
|
export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
|
|
138
107
|
export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyRawBuilder;
|
|
139
108
|
export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
|
|
140
|
-
export interface GeneratedPlaceholder {
|
|
141
|
-
/** @internal */
|
|
142
|
-
readonly __isGeneratedPlaceholder__: true;
|
|
143
|
-
}
|
|
144
109
|
export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
|
|
145
110
|
export declare type UnknownRow = Record<string, unknown>;
|
|
146
111
|
export declare type Nullable<T> = {
|
|
147
112
|
[P in keyof T]: T[P] | null;
|
|
148
113
|
};
|
|
149
|
-
export {};
|
package/package.json
CHANGED
package/test.js
ADDED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isGeneratedPlaceholder = exports.GENERATED_PLACEHOLDER = void 0;
|
|
4
|
-
const object_utils_js_1 = require("./object-utils.js");
|
|
5
|
-
exports.GENERATED_PLACEHOLDER = (0, object_utils_js_1.freeze)({
|
|
6
|
-
__isGeneratedPlaceholder__: true,
|
|
7
|
-
});
|
|
8
|
-
function isGeneratedPlaceholder(obj) {
|
|
9
|
-
return (0, object_utils_js_1.isObject)(obj) && obj.__isGeneratedPlaceholder__ === true;
|
|
10
|
-
}
|
|
11
|
-
exports.isGeneratedPlaceholder = isGeneratedPlaceholder;
|