kysely 0.19.7 → 0.19.10
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 +16 -10
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -1
- package/dist/cjs/operation-node/create-type-node.d.ts +17 -0
- package/dist/cjs/operation-node/create-type-node.js +27 -0
- package/dist/cjs/operation-node/drop-type-node.d.ts +16 -0
- package/dist/cjs/operation-node/drop-type-node.js +25 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -2
- package/dist/cjs/operation-node/operation-node-transformer.js +147 -122
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +6 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +3 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/select-modifier-node.d.ts +16 -0
- package/dist/cjs/operation-node/select-modifier-node.js +24 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -5
- package/dist/cjs/operation-node/select-query-node.js +11 -9
- package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +6 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +50 -6
- package/dist/cjs/query-builder/select-query-builder.js +68 -13
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +6 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +29 -7
- package/dist/cjs/query-compiler/query-compiler.d.ts +3 -1
- package/dist/cjs/schema/create-type-builder.d.ts +19 -0
- package/dist/cjs/schema/create-type-builder.js +29 -0
- package/dist/cjs/schema/drop-type-builder.d.ts +19 -0
- package/dist/cjs/schema/drop-type-builder.js +31 -0
- package/dist/cjs/schema/schema.d.ts +32 -0
- package/dist/cjs/schema/schema.js +46 -0
- package/dist/cjs/util/require-all-props.d.ts +43 -0
- package/dist/cjs/util/require-all-props.js +40 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
- package/dist/esm/operation-node/create-type-node.d.ts +17 -0
- package/dist/esm/operation-node/create-type-node.js +25 -0
- package/dist/esm/operation-node/drop-type-node.d.ts +16 -0
- package/dist/esm/operation-node/drop-type-node.js +23 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -2
- package/dist/esm/operation-node/operation-node-transformer.js +147 -122
- package/dist/esm/operation-node/operation-node-visitor.d.ts +6 -0
- package/dist/esm/operation-node/operation-node-visitor.js +3 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/select-modifier-node.d.ts +16 -0
- package/dist/esm/operation-node/select-modifier-node.js +22 -0
- package/dist/esm/operation-node/select-query-node.d.ts +5 -5
- package/dist/esm/operation-node/select-query-node.js +11 -9
- package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +6 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +50 -6
- package/dist/esm/query-builder/select-query-builder.js +68 -13
- package/dist/esm/query-compiler/default-query-compiler.d.ts +6 -0
- package/dist/esm/query-compiler/default-query-compiler.js +29 -7
- package/dist/esm/query-compiler/query-compiler.d.ts +3 -1
- package/dist/esm/schema/create-type-builder.d.ts +19 -0
- package/dist/esm/schema/create-type-builder.js +26 -0
- package/dist/esm/schema/drop-type-builder.d.ts +19 -0
- package/dist/esm/schema/drop-type-builder.js +28 -0
- package/dist/esm/schema/schema.d.ts +32 -0
- package/dist/esm/schema/schema.js +46 -0
- package/dist/esm/util/require-all-props.d.ts +43 -0
- package/dist/esm/util/require-all-props.js +37 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,21 +5,20 @@
|
|
|
5
5
|
|
|
6
6
|
# [Kysely](https://koskimas.github.io/kysely/index.html)
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
Mainly developed for [node.js](https://nodejs.org/en/) but also runs on [deno](https://deno.land/)
|
|
10
|
-
in the browser.
|
|
8
|
+
Kysely (pronounce “Key-Seh-Lee”) is a type-safe and autocompletion-friendly typescript SQL query builder. Inspired by
|
|
9
|
+
[knex](http://knexjs.org/). Mainly developed for [node.js](https://nodejs.org/en/) but also runs on [deno](https://deno.land/)
|
|
10
|
+
and in the browser.
|
|
11
11
|
|
|
12
12
|

|
|
13
13
|
|
|
14
14
|
Kysely makes sure you only refer to tables and columns that are visible to the part of the query
|
|
15
|
-
you
|
|
15
|
+
you're writing. The result type only has the selected columns with correct types and aliases. As an
|
|
16
16
|
added bonus you get autocompletion for all that stuff.
|
|
17
17
|
|
|
18
|
-
As
|
|
18
|
+
As shown in the gif above, through the pure magic of modern typescript, Kysely is even able to parse
|
|
19
19
|
the alias given to `pet.name` and add the `pet_name` column to the result row type. Kysely is able to infer
|
|
20
20
|
column names, aliases and types from selected subqueries, joined subqueries, `with` statements and pretty
|
|
21
|
-
much anything you can think of.
|
|
22
|
-
you build a valid query.
|
|
21
|
+
much anything you can think of.
|
|
23
22
|
|
|
24
23
|
Of course there are cases where things cannot be typed at compile time, and Kysely offers escape
|
|
25
24
|
hatches for these situations. See the [sql template tag](https://koskimas.github.io/kysely/modules.html#sql)
|
|
@@ -34,6 +33,7 @@ You can find a more thorough introduction [here](https://www.jakso.me/blog/kysel
|
|
|
34
33
|
|
|
35
34
|
- [Installation](#installation)
|
|
36
35
|
- [Minimal example](#minimal-example)
|
|
36
|
+
- [Generating types](#generating-types)
|
|
37
37
|
- [Query examples](#query-examples)
|
|
38
38
|
- [Recipes](https://github.com/koskimas/kysely/tree/master/recipes)
|
|
39
39
|
- [Migrations](#migrations)
|
|
@@ -166,6 +166,11 @@ type InsertablePerson = Insertable<PersonTable>
|
|
|
166
166
|
type UpdateablePerson = Updateable<PersonTable>
|
|
167
167
|
```
|
|
168
168
|
|
|
169
|
+
# Generating types
|
|
170
|
+
|
|
171
|
+
If you want to generate the table types automatically from the database schema please
|
|
172
|
+
check out [this awesome project](https://github.com/RobinBlomberg/kysely-codegen).
|
|
173
|
+
|
|
169
174
|
# Query examples
|
|
170
175
|
|
|
171
176
|
## Select queries
|
|
@@ -208,10 +213,11 @@ export async function down(db: Kysely<any>): Promise<void> {
|
|
|
208
213
|
}
|
|
209
214
|
```
|
|
210
215
|
|
|
211
|
-
The `up` function is called when you update your database schema to next version and `down`
|
|
216
|
+
The `up` function is called when you update your database schema to the next version and `down`
|
|
212
217
|
when you go back to previous version. The only argument for the functions is an instance of
|
|
213
|
-
`Kysely<any>`. It's important to use `Kysely<any>` and not `Kysely<YourDatabase>`.
|
|
214
|
-
|
|
218
|
+
`Kysely<any>`. It's important to use `Kysely<any>` and not `Kysely<YourDatabase>`.
|
|
219
|
+
|
|
220
|
+
Migrations should never depend on the current code of your app because they need to work even when the app
|
|
215
221
|
changes. Migrations need to be "frozen in time".
|
|
216
222
|
|
|
217
223
|
The migrations can use the [Kysely.schema](https://koskimas.github.io/kysely/classes/SchemaModule.html)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
import { ValueListNode } from './value-list-node.js';
|
|
4
|
+
export declare type CreateTypeNodeParams = Omit<Partial<CreateTypeNode>, 'kind'>;
|
|
5
|
+
export interface CreateTypeNode extends OperationNode {
|
|
6
|
+
readonly kind: 'CreateTypeNode';
|
|
7
|
+
readonly name: IdentifierNode;
|
|
8
|
+
readonly enum?: ValueListNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const CreateTypeNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is CreateTypeNode;
|
|
15
|
+
create(name: string): CreateTypeNode;
|
|
16
|
+
cloneWithEnum(createType: CreateTypeNode, values: string[]): CreateTypeNode;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateTypeNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
const identifier_node_js_1 = require("./identifier-node.js");
|
|
6
|
+
const value_list_node_js_1 = require("./value-list-node.js");
|
|
7
|
+
const value_node_js_1 = require("./value-node.js");
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
exports.CreateTypeNode = (0, object_utils_js_1.freeze)({
|
|
12
|
+
is(node) {
|
|
13
|
+
return node.kind === 'CreateTypeNode';
|
|
14
|
+
},
|
|
15
|
+
create(name) {
|
|
16
|
+
return (0, object_utils_js_1.freeze)({
|
|
17
|
+
kind: 'CreateTypeNode',
|
|
18
|
+
name: identifier_node_js_1.IdentifierNode.create(name),
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
cloneWithEnum(createType, values) {
|
|
22
|
+
return (0, object_utils_js_1.freeze)({
|
|
23
|
+
...createType,
|
|
24
|
+
enum: value_list_node_js_1.ValueListNode.create(values.map((value) => value_node_js_1.ValueNode.createImmediate(value))),
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IdentifierNode } from './identifier-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export declare type DropTypeNodeParams = Omit<Partial<DropTypeNode>, 'kind' | 'name'>;
|
|
4
|
+
export interface DropTypeNode extends OperationNode {
|
|
5
|
+
readonly kind: 'DropTypeNode';
|
|
6
|
+
readonly name: IdentifierNode;
|
|
7
|
+
readonly ifExists?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare const DropTypeNode: Readonly<{
|
|
13
|
+
is(node: OperationNode): node is DropTypeNode;
|
|
14
|
+
create(name: string): DropTypeNode;
|
|
15
|
+
cloneWith(dropType: DropTypeNode, params: DropTypeNodeParams): DropTypeNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DropTypeNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
const identifier_node_js_1 = require("./identifier-node.js");
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
exports.DropTypeNode = (0, object_utils_js_1.freeze)({
|
|
10
|
+
is(node) {
|
|
11
|
+
return node.kind === 'DropTypeNode';
|
|
12
|
+
},
|
|
13
|
+
create(name) {
|
|
14
|
+
return (0, object_utils_js_1.freeze)({
|
|
15
|
+
kind: 'DropTypeNode',
|
|
16
|
+
name: identifier_node_js_1.IdentifierNode.create(name),
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
cloneWith(dropType, params) {
|
|
20
|
+
return (0, object_utils_js_1.freeze)({
|
|
21
|
+
...dropType,
|
|
22
|
+
...params,
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -65,6 +65,9 @@ import { GeneratedNode } from './generated-node.js';
|
|
|
65
65
|
import { DefaultValueNode } from './default-value-node.js';
|
|
66
66
|
import { OnNode } from './on-node.js';
|
|
67
67
|
import { ValuesNode } from './values-node.js';
|
|
68
|
+
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
|
+
import { CreateTypeNode } from './create-type-node.js';
|
|
70
|
+
import { DropTypeNode } from './drop-type-node.js';
|
|
68
71
|
/**
|
|
69
72
|
* Transforms an operation node tree into another one.
|
|
70
73
|
*
|
|
@@ -97,8 +100,9 @@ import { ValuesNode } from './values-node.js';
|
|
|
97
100
|
export declare class OperationNodeTransformer {
|
|
98
101
|
#private;
|
|
99
102
|
protected readonly nodeStack: OperationNode[];
|
|
100
|
-
readonly transformNode: <T extends OperationNode | undefined>(node:
|
|
101
|
-
protected transformNodeList<T extends OperationNode>(list: readonly
|
|
103
|
+
readonly transformNode: <T extends OperationNode | undefined, U extends T | undefined = T>(node: U) => T;
|
|
104
|
+
protected transformNodeList<T extends OperationNode, U extends T = T>(list: readonly U[]): readonly T[];
|
|
105
|
+
protected transformNodeList<T extends OperationNode, U extends T = T>(list: readonly U[] | undefined): readonly T[] | undefined;
|
|
102
106
|
protected transformSelectQuery(node: SelectQueryNode): SelectQueryNode;
|
|
103
107
|
protected transformSelection(node: SelectionNode): SelectionNode;
|
|
104
108
|
protected transformColumn(node: ColumnNode): ColumnNode;
|
|
@@ -159,6 +163,9 @@ export declare class OperationNodeTransformer {
|
|
|
159
163
|
protected transformGenerated(node: GeneratedNode): GeneratedNode;
|
|
160
164
|
protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode;
|
|
161
165
|
protected transformOn(node: OnNode): OnNode;
|
|
166
|
+
protected transformSelectModifier(node: SelectModifierNode): SelectModifierNode;
|
|
167
|
+
protected transformCreateType(node: CreateTypeNode): CreateTypeNode;
|
|
168
|
+
protected transformDropType(node: DropTypeNode): DropTypeNode;
|
|
162
169
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
163
170
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
164
171
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|