kysely 0.7.1 → 0.7.5

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.
Files changed (194) hide show
  1. package/README.md +24 -19
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
  3. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +0 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -2
  7. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -4
  8. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -18
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +0 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -2
  11. package/dist/cjs/driver/database-connection.d.ts +2 -1
  12. package/dist/cjs/driver/driver.d.ts +1 -1
  13. package/dist/cjs/driver/single-connection-provider.d.ts +0 -1
  14. package/dist/cjs/driver/single-connection-provider.js +2 -2
  15. package/dist/cjs/index.d.ts +2 -1
  16. package/dist/cjs/index.js +2 -1
  17. package/dist/cjs/kysely.d.ts +7 -6
  18. package/dist/cjs/kysely.js +8 -6
  19. package/dist/cjs/migration/migration.js +11 -10
  20. package/dist/cjs/operation-node/alter-column-node.d.ts +2 -2
  21. package/dist/cjs/operation-node/alter-column-node.js +2 -2
  22. package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
  23. package/dist/cjs/operation-node/alter-table-node.js +2 -2
  24. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
  25. package/dist/cjs/operation-node/column-definition-node.js +2 -2
  26. package/dist/cjs/operation-node/create-index-node.d.ts +2 -2
  27. package/dist/cjs/operation-node/create-index-node.js +2 -2
  28. package/dist/cjs/operation-node/create-table-node.d.ts +2 -1
  29. package/dist/cjs/operation-node/create-table-node.js +1 -5
  30. package/dist/cjs/operation-node/drop-index-node.d.ts +3 -3
  31. package/dist/cjs/operation-node/drop-index-node.js +2 -2
  32. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +12 -1
  33. package/dist/cjs/operation-node/foreign-key-constraint-node.js +6 -0
  34. package/dist/cjs/operation-node/insert-query-node.d.ts +5 -2
  35. package/dist/cjs/operation-node/insert-query-node.js +2 -9
  36. package/dist/cjs/operation-node/join-node.d.ts +1 -0
  37. package/dist/cjs/operation-node/join-node.js +8 -0
  38. package/dist/cjs/operation-node/on-conflict-node.d.ts +2 -2
  39. package/dist/cjs/operation-node/on-conflict-node.js +2 -2
  40. package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +14 -0
  41. package/dist/cjs/operation-node/on-duplicate-key-node.js +18 -0
  42. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  43. package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
  44. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  46. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/references-node.d.ts +5 -3
  48. package/dist/cjs/operation-node/references-node.js +6 -0
  49. package/dist/cjs/operation-node/table-node.js +2 -2
  50. package/dist/cjs/parser/data-type-parser.d.ts +5 -0
  51. package/dist/cjs/parser/data-type-parser.js +11 -0
  52. package/dist/cjs/parser/default-value-parser.d.ts +6 -0
  53. package/dist/cjs/parser/default-value-parser.js +11 -0
  54. package/dist/cjs/parser/filter-parser.d.ts +2 -2
  55. package/dist/cjs/parser/filter-parser.js +34 -36
  56. package/dist/cjs/parser/join-parser.d.ts +1 -1
  57. package/dist/cjs/parser/join-parser.js +9 -11
  58. package/dist/cjs/parser/parse-context.d.ts +34 -7
  59. package/dist/cjs/parser/parse-context.js +42 -34
  60. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  61. package/dist/cjs/parser/reference-parser.js +16 -12
  62. package/dist/cjs/parser/select-parser.d.ts +1 -2
  63. package/dist/cjs/parser/select-parser.js +4 -5
  64. package/dist/cjs/parser/table-parser.js +11 -6
  65. package/dist/cjs/parser/update-set-parser.js +1 -1
  66. package/dist/cjs/parser/value-parser.js +1 -1
  67. package/dist/cjs/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
  68. package/dist/cjs/query-builder/{sub-query-builder.js → expression-builder.js} +6 -10
  69. package/dist/cjs/query-builder/join-builder.d.ts +2 -2
  70. package/dist/cjs/query-builder/join-builder.js +8 -12
  71. package/dist/cjs/query-builder/query-builder.d.ts +47 -8
  72. package/dist/cjs/query-builder/query-builder.js +163 -91
  73. package/dist/cjs/query-builder/type-utils.d.ts +5 -5
  74. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -1
  75. package/dist/cjs/query-compiler/default-query-compiler.js +26 -6
  76. package/dist/cjs/query-creator.d.ts +2 -2
  77. package/dist/cjs/query-creator.js +8 -12
  78. package/dist/cjs/schema/alter-table-builder.d.ts +31 -8
  79. package/dist/cjs/schema/alter-table-builder.js +80 -7
  80. package/dist/cjs/schema/column-definition-builder.d.ts +10 -4
  81. package/dist/cjs/schema/column-definition-builder.js +11 -6
  82. package/dist/cjs/schema/create-index-builder.d.ts +5 -5
  83. package/dist/cjs/schema/create-index-builder.js +19 -28
  84. package/dist/cjs/schema/create-schema-builder.d.ts +5 -5
  85. package/dist/cjs/schema/create-schema-builder.js +9 -13
  86. package/dist/cjs/schema/create-table-builder.d.ts +22 -10
  87. package/dist/cjs/schema/create-table-builder.js +41 -34
  88. package/dist/cjs/schema/drop-index-builder.d.ts +5 -5
  89. package/dist/cjs/schema/drop-index-builder.js +11 -16
  90. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -5
  91. package/dist/cjs/schema/drop-schema-builder.js +9 -13
  92. package/dist/cjs/schema/drop-table-builder.d.ts +5 -5
  93. package/dist/cjs/schema/drop-table-builder.js +9 -13
  94. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +14 -0
  95. package/dist/cjs/schema/foreign-key-constraint-builder.js +26 -0
  96. package/dist/cjs/transformers/with-schema-transformer.d.ts +0 -5
  97. package/dist/cjs/transformers/with-schema-transformer.js +21 -21
  98. package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
  99. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
  100. package/dist/esm/dialect/mysql/mysql-driver.js +1 -0
  101. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +0 -1
  102. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -2
  103. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -4
  104. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -18
  105. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +0 -1
  106. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -2
  107. package/dist/esm/driver/database-connection.d.ts +2 -1
  108. package/dist/esm/driver/driver.d.ts +1 -1
  109. package/dist/esm/driver/single-connection-provider.d.ts +0 -1
  110. package/dist/esm/driver/single-connection-provider.js +2 -2
  111. package/dist/esm/index.d.ts +2 -1
  112. package/dist/esm/index.js +2 -1
  113. package/dist/esm/kysely.d.ts +7 -6
  114. package/dist/esm/kysely.js +8 -6
  115. package/dist/esm/migration/migration.js +12 -11
  116. package/dist/esm/operation-node/alter-column-node.d.ts +2 -2
  117. package/dist/esm/operation-node/alter-column-node.js +2 -2
  118. package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
  119. package/dist/esm/operation-node/alter-table-node.js +2 -2
  120. package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
  121. package/dist/esm/operation-node/column-definition-node.js +2 -2
  122. package/dist/esm/operation-node/create-index-node.d.ts +2 -2
  123. package/dist/esm/operation-node/create-index-node.js +2 -2
  124. package/dist/esm/operation-node/create-table-node.d.ts +2 -1
  125. package/dist/esm/operation-node/create-table-node.js +1 -5
  126. package/dist/esm/operation-node/drop-index-node.d.ts +3 -3
  127. package/dist/esm/operation-node/drop-index-node.js +2 -2
  128. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +12 -1
  129. package/dist/esm/operation-node/foreign-key-constraint-node.js +6 -0
  130. package/dist/esm/operation-node/insert-query-node.d.ts +5 -2
  131. package/dist/esm/operation-node/insert-query-node.js +2 -9
  132. package/dist/esm/operation-node/join-node.d.ts +1 -0
  133. package/dist/esm/operation-node/join-node.js +8 -0
  134. package/dist/esm/operation-node/on-conflict-node.d.ts +2 -2
  135. package/dist/esm/operation-node/on-conflict-node.js +2 -2
  136. package/dist/esm/operation-node/on-duplicate-key-node.d.ts +14 -0
  137. package/dist/esm/operation-node/on-duplicate-key-node.js +15 -0
  138. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  139. package/dist/esm/operation-node/operation-node-transformer.js +12 -0
  140. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  141. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  142. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  143. package/dist/esm/operation-node/references-node.d.ts +5 -3
  144. package/dist/esm/operation-node/references-node.js +6 -0
  145. package/dist/esm/operation-node/table-node.js +2 -2
  146. package/dist/esm/parser/data-type-parser.d.ts +5 -0
  147. package/dist/esm/parser/data-type-parser.js +7 -0
  148. package/dist/esm/parser/default-value-parser.d.ts +6 -0
  149. package/dist/esm/parser/default-value-parser.js +7 -0
  150. package/dist/esm/parser/filter-parser.d.ts +2 -2
  151. package/dist/esm/parser/filter-parser.js +31 -33
  152. package/dist/esm/parser/join-parser.d.ts +1 -1
  153. package/dist/esm/parser/join-parser.js +7 -9
  154. package/dist/esm/parser/parse-context.d.ts +34 -7
  155. package/dist/esm/parser/parse-context.js +40 -32
  156. package/dist/esm/parser/reference-parser.d.ts +2 -2
  157. package/dist/esm/parser/reference-parser.js +16 -12
  158. package/dist/esm/parser/select-parser.d.ts +1 -2
  159. package/dist/esm/parser/select-parser.js +3 -3
  160. package/dist/esm/parser/table-parser.js +11 -6
  161. package/dist/esm/parser/update-set-parser.js +1 -1
  162. package/dist/esm/parser/value-parser.js +1 -1
  163. package/dist/esm/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
  164. package/dist/esm/query-builder/{sub-query-builder.js → expression-builder.js} +4 -8
  165. package/dist/esm/query-builder/join-builder.d.ts +2 -2
  166. package/dist/esm/query-builder/join-builder.js +9 -13
  167. package/dist/esm/query-builder/query-builder.d.ts +47 -8
  168. package/dist/esm/query-builder/query-builder.js +165 -93
  169. package/dist/esm/query-builder/type-utils.d.ts +5 -5
  170. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -1
  171. package/dist/esm/query-compiler/default-query-compiler.js +27 -7
  172. package/dist/esm/query-creator.d.ts +2 -2
  173. package/dist/esm/query-creator.js +8 -12
  174. package/dist/esm/schema/alter-table-builder.d.ts +31 -8
  175. package/dist/esm/schema/alter-table-builder.js +78 -6
  176. package/dist/esm/schema/column-definition-builder.d.ts +10 -4
  177. package/dist/esm/schema/column-definition-builder.js +12 -7
  178. package/dist/esm/schema/create-index-builder.d.ts +5 -5
  179. package/dist/esm/schema/create-index-builder.js +19 -28
  180. package/dist/esm/schema/create-schema-builder.d.ts +5 -5
  181. package/dist/esm/schema/create-schema-builder.js +9 -13
  182. package/dist/esm/schema/create-table-builder.d.ts +22 -10
  183. package/dist/esm/schema/create-table-builder.js +41 -34
  184. package/dist/esm/schema/drop-index-builder.d.ts +5 -5
  185. package/dist/esm/schema/drop-index-builder.js +11 -16
  186. package/dist/esm/schema/drop-schema-builder.d.ts +5 -5
  187. package/dist/esm/schema/drop-schema-builder.js +9 -13
  188. package/dist/esm/schema/drop-table-builder.d.ts +5 -5
  189. package/dist/esm/schema/drop-table-builder.js +9 -13
  190. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +14 -0
  191. package/dist/esm/schema/foreign-key-constraint-builder.js +22 -0
  192. package/dist/esm/transformers/with-schema-transformer.d.ts +0 -5
  193. package/dist/esm/transformers/with-schema-transformer.js +21 -21
  194. package/package.json +1 -1
package/README.md CHANGED
@@ -8,45 +8,50 @@ A type-safe and autocompletion-friendly typescript SQL query builder for node.js
8
8
 
9
9
  ![](https://github.com/koskimas/kysely/blob/master/assets/demo.gif)
10
10
 
11
- Kysely's typings only allow you to use tables that are available in the database and refer to
12
- columns of the tables that are joined to the query. The result type only contains the selected
13
- columns with correct types and aliases. This allows tools like vscode autocompletion to make your life
14
- so much easier.
11
+ Kysely's typings make sure you only refer to tables and columns that are visible to the part of the query
12
+ you are writing. The result type only has the selected columns with correct types and aliases. This
13
+ allows tools like vscode autocompletion to make your life so much easier.
15
14
 
16
15
  As you can see in the gif above, through the pure magic of modern typescript, Kysely is even able to parse
17
16
  the alias given to `pet.name` and add the `pet_name` column to the result row type. Kysely is able to infer
18
- column names and types from selected subqueries, joined subqueries, `with` statements and pretty much
19
- anything you can think of. Typescript is always there for you to offer completions and tell what kind
20
- of query you can build.
17
+ column names, aliases and types from selected subqueries, joined subqueries, `with` statements and pretty
18
+ much anything you can think of. Typescript is always there for you offering completions and making sure
19
+ you build a valid query.
21
20
 
22
21
  Of course there are cases where things cannot be typed at compile time, and Kysely offers escape
23
22
  hatches for these situations. With typescript you can always cast something to `any` if the types
24
- fail you. with Kysely you can also explicitly tell it to ignore the typings, but the default is always
23
+ fail you. With Kysely you can also explicitly tell it to ignore the typings, but the default is always
25
24
  type-safety! See the [DynamicModule](https://koskimas.github.io/kysely/classes/DynamicModule.html#ref)
26
25
  for more info.
27
26
 
28
- Kysely is still young and some useful methods and modules are not yet implemented. If you start using
29
- Kysely, please open an issue as soon as you can't find something you want to use.
27
+ Kysely is still young and some useful features are propably not yet implemented. If you start
28
+ using Kysely and can't find something you'd want to use, please open an issue.
30
29
 
31
- - [API reference](https://koskimas.github.io/kysely/index.html)
30
+ # Table of contents
31
+
32
+ - [Installation](#installation)
33
+ - [Minimal example](#minimal-example)
32
34
  - [Migrations](#migrations)
35
+ - [API reference](https://koskimas.github.io/kysely/index.html)
33
36
 
34
37
  # Installation
35
38
 
36
- Kysely currently only works on PostgreSQL and MySQL. You can install it using
39
+ Kysely currently works on PostgreSQL and MySQL. You can install it using
37
40
 
38
41
  ```
42
+ # postgres
39
43
  npm install kysely pg
40
- ```
41
44
 
42
- or
43
-
44
- ```
45
+ # mysql
45
46
  npm install kysely mysql2
46
47
  ```
47
48
 
48
- More dialects will be added will be added soon. Kysely also has a simple interface
49
- for [third-party dialects](https://koskimas.github.io/kysely/interfaces/Dialect.html).
49
+ More dialects will be added soon. Kysely also has a simple interface
50
+ for [3rd party dialects](https://koskimas.github.io/kysely/interfaces/Dialect.html).
51
+
52
+ 3rd party dialects:
53
+
54
+ - [AWS Data API](https://github.com/serverless-stack/kysely-data-api)
50
55
 
51
56
  # Minimal example
52
57
 
@@ -75,7 +80,7 @@ interface Movie {
75
80
  stars: number
76
81
  }
77
82
 
78
- // Keys are table names.
83
+ // Keys of this interface are table names.
79
84
  interface Database {
80
85
  person: Person
81
86
  pet: Pet
@@ -1,13 +1,5 @@
1
1
  import { Kysely } from '../kysely.js';
2
- /**
3
- * The `DialectAdapter` encapsulates all differences between dialects outside
4
- * the `Driver` and `QueryCompiler`.
5
- *
6
- * For example, some databases support transactional DDL and therefore we want
7
- * to run migrations inside a transaction, while other databases don't support
8
- * it. For that there's a `supportsTransactionalDdl` boolean in this interface.
9
- */
10
- export interface DialectAdapter {
2
+ export interface DialectSupports {
11
3
  /**
12
4
  * Whether or not this dialect supports transactional DDL.
13
5
  *
@@ -19,6 +11,16 @@ export interface DialectAdapter {
19
11
  * upates and deletes.
20
12
  */
21
13
  readonly supportsReturning: boolean;
14
+ }
15
+ /**
16
+ * The `DialectAdapter` encapsulates all differences between dialects outside
17
+ * the `Driver` and `QueryCompiler`.
18
+ *
19
+ * For example, some databases support transactional DDL and therefore we want
20
+ * to run migrations inside a transaction, while other databases don't support
21
+ * it. For that there's a `supportsTransactionalDdl` boolean in this interface.
22
+ */
23
+ export interface DialectAdapter extends DialectSupports {
22
24
  /**
23
25
  * This method is used to acquire a lock for the migrations so that
24
26
  * it's not possible for two migration processes to run in parallel.
@@ -3,8 +3,8 @@ import { Kysely } from '../../kysely.js';
3
3
  import { QueryCompiler } from '../../query-compiler/query-compiler.js';
4
4
  import { Dialect } from '../dialect.js';
5
5
  import { DatabaseIntrospector } from '../../introspection/database-introspector.js';
6
- import { DatabaseConnection } from '../../index.js';
7
6
  import { DialectAdapter } from '../dialect-adapter.js';
7
+ import { DatabaseConnection } from '../../driver/database-connection.js';
8
8
  export declare class MysqlDialect implements Dialect {
9
9
  #private;
10
10
  constructor(config: MysqlDialectConfig);
@@ -50,6 +50,7 @@ class MysqlDriver {
50
50
  }
51
51
  async beginTransaction(connection, settings) {
52
52
  if (settings.isolationLevel) {
53
+ // On mysql this sets the isolation level of the next transaction.
53
54
  await connection.executeQuery({
54
55
  sql: `set transaction isolation level ${settings.isolationLevel}`,
55
56
  bindings: [],
@@ -4,5 +4,4 @@ export declare class MysqlIntrospector implements DatabaseIntrospector {
4
4
  #private;
5
5
  constructor(db: Kysely<any>);
6
6
  getMetadata(options?: DatabaseMetadataOptions): Promise<DatabaseMetadata>;
7
- private parseTableMetadata;
8
7
  }
@@ -21,10 +21,10 @@ class MysqlIntrospector {
21
21
  }
22
22
  const rawColumns = await query.execute();
23
23
  return {
24
- tables: this.parseTableMetadata(rawColumns),
24
+ tables: this.#parseTableMetadata(rawColumns),
25
25
  };
26
26
  }
27
- parseTableMetadata(columns) {
27
+ #parseTableMetadata(columns) {
28
28
  return columns.reduce((tables, it) => {
29
29
  let table = tables.find((tbl) => tbl.name === it.TABLE_NAME);
30
30
  if (!table) {
@@ -1,12 +1,8 @@
1
1
  import { ColumnDefinitionNode } from '../../operation-node/column-definition-node.js';
2
- import { InsertQueryNode } from '../../operation-node/insert-query-node.js';
3
- import { OnConflictNode } from '../../operation-node/on-conflict-node.js';
4
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
5
3
  export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
6
4
  protected visitColumnDefinition(node: ColumnDefinitionNode): void;
7
- protected visitOnConflict(node: OnConflictNode): void;
8
5
  protected visitReturning(): void;
9
- protected getInsertInto(node: InsertQueryNode): string;
10
6
  protected getSql(): string;
11
7
  protected getCurrentParameterPlaceholder(): string;
12
8
  protected getLeftIdentifierWrapper(): string;
@@ -32,27 +32,9 @@ class MysqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompile
32
32
  this.visitNode(node.check);
33
33
  }
34
34
  }
35
- visitOnConflict(node) {
36
- if (node.doNothing) {
37
- // This is already handled by `getInsertInto`.
38
- return;
39
- }
40
- if (node.updates) {
41
- this.append('on duplicate key update ');
42
- this.compileList(node.updates);
43
- }
44
- }
45
35
  visitReturning() {
46
36
  // Do nothing.
47
37
  }
48
- getInsertInto(node) {
49
- if (node.onConflict?.doNothing) {
50
- return 'insert ignore into';
51
- }
52
- else {
53
- return 'insert into';
54
- }
55
- }
56
38
  getSql() {
57
39
  return super.getSql().trimEnd();
58
40
  }
@@ -4,5 +4,4 @@ export declare class PostgresIntrospector implements DatabaseIntrospector {
4
4
  #private;
5
5
  constructor(db: Kysely<any>);
6
6
  getMetadata(options?: DatabaseMetadataOptions): Promise<DatabaseMetadata>;
7
- private parseTableMetadata;
8
7
  }
@@ -33,10 +33,10 @@ class PostgresIntrospector {
33
33
  }
34
34
  const rawColumns = await query.execute();
35
35
  return {
36
- tables: this.parseTableMetadata(rawColumns),
36
+ tables: this.#parseTableMetadata(rawColumns),
37
37
  };
38
38
  }
39
- parseTableMetadata(columns) {
39
+ #parseTableMetadata(columns) {
40
40
  return columns.reduce((tables, it) => {
41
41
  let table = tables.find((tbl) => tbl.name === it.table && tbl.schema === it.schema);
42
42
  if (!table) {
@@ -14,7 +14,8 @@ export interface QueryResult<O> {
14
14
  */
15
15
  readonly insertedPrimaryKey?: number;
16
16
  /**
17
- * This is defined if the query returned any rows.
17
+ * The rows returned by the query. This is always defined and is
18
+ * empty if the query returned no rows.
18
19
  */
19
20
  readonly rows: O[];
20
21
  }
@@ -45,7 +45,7 @@ export interface Driver {
45
45
  destroy(): Promise<void>;
46
46
  }
47
47
  export interface TransactionSettings {
48
- isolationLevel?: IsolationLevel;
48
+ readonly isolationLevel?: IsolationLevel;
49
49
  }
50
50
  export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"];
51
51
  export declare type IsolationLevel = ArrayItemType<typeof TRANSACTION_ISOLATION_LEVELS>;
@@ -4,5 +4,4 @@ export declare class SingleConnectionProvider implements ConnectionProvider {
4
4
  #private;
5
5
  constructor(connection: DatabaseConnection);
6
6
  withConnection<T>(runner: (connection: DatabaseConnection) => Promise<T>): Promise<T>;
7
- private run;
8
7
  }
@@ -11,7 +11,7 @@ class SingleConnectionProvider {
11
11
  while (this.#runningPromise) {
12
12
  await this.#runningPromise;
13
13
  }
14
- const promise = this.run(runner);
14
+ const promise = this.#run(runner);
15
15
  this.#runningPromise = promise
16
16
  .then(() => {
17
17
  this.#runningPromise = undefined;
@@ -23,7 +23,7 @@ class SingleConnectionProvider {
23
23
  }
24
24
  // Run the runner in an async function to make sure it doesn't
25
25
  // throw synchronous errors.
26
- async run(runner) {
26
+ async #run(runner) {
27
27
  return await runner(this.#connection);
28
28
  }
29
29
  }
@@ -2,7 +2,7 @@ export * from './kysely.js';
2
2
  export * from './query-creator.js';
3
3
  export * from './query-builder/query-builder.js';
4
4
  export * from './query-builder/join-builder.js';
5
- export * from './query-builder/sub-query-builder.js';
5
+ export * from './query-builder/expression-builder.js';
6
6
  export * from './raw-builder/raw-builder.js';
7
7
  export * from './query-executor/query-executor.js';
8
8
  export * from './query-executor/default-query-executor.js';
@@ -17,6 +17,7 @@ export * from './schema/drop-index-builder.js';
17
17
  export * from './schema/create-schema-builder.js';
18
18
  export * from './schema/drop-schema-builder.js';
19
19
  export * from './schema/column-definition-builder.js';
20
+ export * from './schema/foreign-key-constraint-builder.js';
20
21
  export * from './schema/alter-table-builder.js';
21
22
  export * from './dynamic/dynamic.js';
22
23
  export * from './driver/driver.js';
package/dist/cjs/index.js CHANGED
@@ -14,7 +14,7 @@ __exportStar(require("./kysely.js"), exports);
14
14
  __exportStar(require("./query-creator.js"), exports);
15
15
  __exportStar(require("./query-builder/query-builder.js"), exports);
16
16
  __exportStar(require("./query-builder/join-builder.js"), exports);
17
- __exportStar(require("./query-builder/sub-query-builder.js"), exports);
17
+ __exportStar(require("./query-builder/expression-builder.js"), exports);
18
18
  __exportStar(require("./raw-builder/raw-builder.js"), exports);
19
19
  __exportStar(require("./query-executor/query-executor.js"), exports);
20
20
  __exportStar(require("./query-executor/default-query-executor.js"), exports);
@@ -29,6 +29,7 @@ __exportStar(require("./schema/drop-index-builder.js"), exports);
29
29
  __exportStar(require("./schema/create-schema-builder.js"), exports);
30
30
  __exportStar(require("./schema/drop-schema-builder.js"), exports);
31
31
  __exportStar(require("./schema/column-definition-builder.js"), exports);
32
+ __exportStar(require("./schema/foreign-key-constraint-builder.js"), exports);
32
33
  __exportStar(require("./schema/alter-table-builder.js"), exports);
33
34
  __exportStar(require("./dynamic/dynamic.js"), exports);
34
35
  __exportStar(require("./driver/driver.js"), exports);
@@ -8,7 +8,7 @@ import { KyselyPlugin } from './plugin/kysely-plugin.js';
8
8
  import { GeneratedPlaceholder } from './query-builder/type-utils.js';
9
9
  import { DatabaseIntrospector } from './introspection/database-introspector.js';
10
10
  import { Driver, IsolationLevel } from './driver/driver.js';
11
- import { DialectAdapter } from './dialect/dialect-adapter.js';
11
+ import { ParseContext } from './parser/parse-context.js';
12
12
  /**
13
13
  * The main Kysely class.
14
14
  *
@@ -152,7 +152,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
152
152
  * .execute(async (db) => {
153
153
  * // `db` is an instance of `Kysely` that's bound to a single
154
154
  * // database connection. All queries executed through `db` use
155
- * // the same donnection and not the connection pool.
155
+ * // the same connection.
156
156
  * await doStuff(db)
157
157
  * })
158
158
  * ```
@@ -186,7 +186,7 @@ export interface KyselyProps {
186
186
  readonly driver: Driver;
187
187
  readonly executor: QueryExecutor;
188
188
  readonly dialect: Dialect;
189
- readonly adapter: DialectAdapter;
189
+ readonly parseContext: ParseContext;
190
190
  }
191
191
  export declare function isKyselyProps(obj: unknown): obj is KyselyProps;
192
192
  export interface KyselyConfig {
@@ -198,14 +198,15 @@ export declare class ConnectionBuilder<DB> {
198
198
  constructor(props: ConnectionBuilderProps);
199
199
  execute<T>(callback: (db: Kysely<DB>) => Promise<T>): Promise<T>;
200
200
  }
201
- export interface ConnectionBuilderProps extends KyselyProps {
201
+ interface ConnectionBuilderProps extends KyselyProps {
202
202
  }
203
203
  export declare class TransactionBuilder<DB> {
204
204
  #private;
205
- constructor(props: TransactionBuilerProps);
205
+ constructor(props: TransactionBuilderProps);
206
206
  setIsolationLevel(isolationLevel: IsolationLevel): TransactionBuilder<DB>;
207
207
  execute<T>(callback: (trx: Transaction<DB>) => Promise<T>): Promise<T>;
208
208
  }
209
- export interface TransactionBuilerProps extends KyselyProps {
209
+ interface TransactionBuilderProps extends KyselyProps {
210
210
  readonly isolationLevel?: IsolationLevel;
211
211
  }
212
+ export {};
@@ -13,6 +13,7 @@ const runtime_driver_js_1 = require("./driver/runtime-driver.js");
13
13
  const single_connection_provider_js_1 = require("./driver/single-connection-provider.js");
14
14
  const driver_js_1 = require("./driver/driver.js");
15
15
  const prevent_await_js_1 = require("./util/prevent-await.js");
16
+ const parse_context_js_1 = require("./parser/parse-context.js");
16
17
  /**
17
18
  * The main Kysely class.
18
19
  *
@@ -57,7 +58,7 @@ class Kysely extends query_creator_js_1.QueryCreator {
57
58
  #props;
58
59
  constructor(args) {
59
60
  if (isKyselyProps(args)) {
60
- super({ executor: args.executor, adapter: args.adapter });
61
+ super({ executor: args.executor, parseContext: args.parseContext });
61
62
  this.#props = (0, object_utils_js_1.freeze)(args);
62
63
  }
63
64
  else {
@@ -65,16 +66,17 @@ class Kysely extends query_creator_js_1.QueryCreator {
65
66
  const driver = dialect.createDriver();
66
67
  const compiler = dialect.createQueryCompiler();
67
68
  const adapter = dialect.createAdapter();
69
+ const parseContext = new parse_context_js_1.DefaultParseContext(adapter);
68
70
  const runtimeDriver = new runtime_driver_js_1.RuntimeDriver(driver);
69
71
  const connectionProvider = new default_connection_provider_js_1.DefaultConnectionProvider(runtimeDriver);
70
72
  const executor = new default_query_executor_js_1.DefaultQueryExecutor(compiler, connectionProvider, args.plugins ?? []);
71
- super({ executor, adapter });
73
+ super({ executor, parseContext });
72
74
  this.#props = (0, object_utils_js_1.freeze)({
73
75
  config: args,
74
76
  executor,
75
- adapter,
76
77
  dialect,
77
78
  driver,
79
+ parseContext,
78
80
  });
79
81
  }
80
82
  }
@@ -88,7 +90,7 @@ class Kysely extends query_creator_js_1.QueryCreator {
88
90
  * Returns the {@link MigrationModule} module for managing and running migrations.
89
91
  */
90
92
  get migration() {
91
- return new migration_js_1.MigrationModule(this, this.#props.adapter);
93
+ return new migration_js_1.MigrationModule(this, this.#props.parseContext.adapter);
92
94
  }
93
95
  /**
94
96
  * Returns a the {@link DynamicModule} module.
@@ -189,7 +191,7 @@ class Kysely extends query_creator_js_1.QueryCreator {
189
191
  * .execute(async (db) => {
190
192
  * // `db` is an instance of `Kysely` that's bound to a single
191
193
  * // database connection. All queries executed through `db` use
192
- * // the same donnection and not the connection pool.
194
+ * // the same connection.
193
195
  * await doStuff(db)
194
196
  * })
195
197
  * ```
@@ -248,7 +250,7 @@ function isKyselyProps(obj) {
248
250
  (0, object_utils_js_1.isObject)(obj.driver) &&
249
251
  (0, object_utils_js_1.isObject)(obj.executor) &&
250
252
  (0, object_utils_js_1.isObject)(obj.dialect) &&
251
- (0, object_utils_js_1.isObject)(obj.adapter));
253
+ (0, object_utils_js_1.isObject)(obj.parseContext));
252
254
  }
253
255
  exports.isKyselyProps = isKyselyProps;
254
256
  class ConnectionBuilder {
@@ -14,20 +14,21 @@ class MigrationModule {
14
14
  this.#db = db;
15
15
  this.#adapter = adapter;
16
16
  }
17
- async migrateToLatest(migrationsFolderPath) {
17
+ async migrateToLatest(migrationsOrFolderPath) {
18
18
  await ensureMigrationTablesExists(this.#db);
19
- if ((0, object_utils_js_1.isString)(migrationsFolderPath)) {
20
- return this.#migrateToLatest(await readMigrationsFromFolder(migrationsFolderPath));
21
- }
22
- else {
23
- return this.#migrateToLatest(migrationsFolderPath);
24
- }
19
+ const allMigrations = await this.#getAllMigrations(migrationsOrFolderPath);
20
+ await this.#migrateToLatest(allMigrations);
21
+ }
22
+ async #getAllMigrations(migrationsOrFolderPath) {
23
+ return (0, object_utils_js_1.isString)(migrationsOrFolderPath)
24
+ ? await readMigrationsFromFolder(migrationsOrFolderPath)
25
+ : migrationsOrFolderPath;
25
26
  }
26
- async #migrateToLatest(migrations) {
27
+ async #migrateToLatest(allMigrations) {
27
28
  const run = async (db) => {
28
29
  try {
29
30
  await this.#adapter.acquireMigrationLock(db);
30
- await runNewMigrations(db, migrations);
31
+ await runNewMigrations(db, allMigrations);
31
32
  }
32
33
  finally {
33
34
  await this.#adapter.releaseMigrationLock(db);
@@ -182,5 +183,5 @@ function ensureMigrationsAreNotCorrupted(executedMigrationNames, oldMigrationNam
182
183
  }
183
184
  }
184
185
  function isMigration(obj) {
185
- return obj && (0, object_utils_js_1.isFunction)(obj.up) && (0, object_utils_js_1.isFunction)(obj.down);
186
+ return (0, object_utils_js_1.isObject)(obj) && (0, object_utils_js_1.isFunction)(obj.up) && (0, object_utils_js_1.isFunction)(obj.down);
186
187
  }
@@ -3,7 +3,7 @@ import { ColumnNode } from './column-node.js';
3
3
  import { DataTypeNode } from './data-type-node.js';
4
4
  import { ValueNode } from './value-node.js';
5
5
  import { RawNode } from './raw-node.js';
6
- export declare type AlterColumnNodeParams = Omit<Partial<AlterColumnNode>, 'kind' | 'column'>;
6
+ export declare type AlterColumnNodeProps = Omit<AlterColumnNode, 'kind' | 'column'>;
7
7
  export interface AlterColumnNode extends OperationNode {
8
8
  readonly kind: 'AlterColumnNode';
9
9
  readonly column: ColumnNode;
@@ -20,5 +20,5 @@ export interface AlterColumnNode extends OperationNode {
20
20
  export declare const AlterColumnNode: Readonly<{
21
21
  is(node: OperationNode): node is AlterColumnNode;
22
22
  create(column: string): AlterColumnNode;
23
- cloneWith(node: AlterColumnNode, params: AlterColumnNodeParams): AlterColumnNode;
23
+ cloneWith(node: AlterColumnNode, props: AlterColumnNodeProps): AlterColumnNode;
24
24
  }>;
@@ -16,10 +16,10 @@ exports.AlterColumnNode = (0, object_utils_js_1.freeze)({
16
16
  column: column_node_js_1.ColumnNode.create(column),
17
17
  });
18
18
  },
19
- cloneWith(node, params) {
19
+ cloneWith(node, props) {
20
20
  return (0, object_utils_js_1.freeze)({
21
21
  ...node,
22
- ...params,
22
+ ...props,
23
23
  });
24
24
  },
25
25
  });
@@ -8,7 +8,7 @@ import { AlterColumnNode } from './alter-column-node.js';
8
8
  import { AddConstraintNode } from './add-constraint-node.js';
9
9
  import { DropConstraintNode } from './drop-constraint-node.js';
10
10
  import { ModifyColumnNode } from './modify-column-node.js';
11
- export declare type AlterTableNodeParams = Omit<Partial<AlterTableNode>, 'kind' | 'table'>;
11
+ export declare type AlterTableNodeProps = Omit<AlterTableNode, 'kind' | 'table'>;
12
12
  export interface AlterTableNode extends OperationNode {
13
13
  readonly kind: 'AlterTableNode';
14
14
  readonly table: TableNode;
@@ -28,5 +28,5 @@ export interface AlterTableNode extends OperationNode {
28
28
  export declare const AlterTableNode: Readonly<{
29
29
  is(node: OperationNode): node is AlterTableNode;
30
30
  create(table: string): AlterTableNode;
31
- cloneWith(node: AlterTableNode, params: AlterTableNodeParams): AlterTableNode;
31
+ cloneWith(node: AlterTableNode, props: AlterTableNodeProps): AlterTableNode;
32
32
  }>;
@@ -16,10 +16,10 @@ exports.AlterTableNode = (0, object_utils_js_1.freeze)({
16
16
  table: table_node_js_1.TableNode.create(table),
17
17
  });
18
18
  },
19
- cloneWith(node, params) {
19
+ cloneWith(node, props) {
20
20
  return (0, object_utils_js_1.freeze)({
21
21
  ...node,
22
- ...params,
22
+ ...props,
23
23
  });
24
24
  },
25
25
  });
@@ -5,7 +5,7 @@ import { OperationNode } from './operation-node.js';
5
5
  import { RawNode } from './raw-node.js';
6
6
  import { ReferencesNode } from './references-node.js';
7
7
  import { ValueNode } from './value-node.js';
8
- export declare type ColumnDefinitionNodeParams = Omit<Partial<ColumnDefinitionNode>, 'kind'>;
8
+ export declare type ColumnDefinitionNodeProps = Omit<Partial<ColumnDefinitionNode>, 'kind'>;
9
9
  export declare type ColumnDataTypeNode = DataTypeNode | RawNode;
10
10
  export interface ColumnDefinitionNode extends OperationNode {
11
11
  readonly kind: 'ColumnDefinitionNode';
@@ -25,5 +25,5 @@ export interface ColumnDefinitionNode extends OperationNode {
25
25
  export declare const ColumnDefinitionNode: Readonly<{
26
26
  is(node: OperationNode): node is ColumnDefinitionNode;
27
27
  create(column: string, dataType: ColumnDataTypeNode): ColumnDefinitionNode;
28
- cloneWith(node: ColumnDefinitionNode, params: ColumnDefinitionNodeParams): ColumnDefinitionNode;
28
+ cloneWith(node: ColumnDefinitionNode, props: ColumnDefinitionNodeProps): ColumnDefinitionNode;
29
29
  }>;
@@ -21,10 +21,10 @@ exports.ColumnDefinitionNode = (0, object_utils_js_1.freeze)({
21
21
  isNullable: true,
22
22
  });
23
23
  },
24
- cloneWith(node, params) {
24
+ cloneWith(node, props) {
25
25
  return (0, object_utils_js_1.freeze)({
26
26
  ...node,
27
- ...params,
27
+ ...props,
28
28
  });
29
29
  },
30
30
  });
@@ -4,7 +4,7 @@ import { ListNode } from './list-node.js';
4
4
  import { OperationNode } from './operation-node.js';
5
5
  import { RawNode } from './raw-node.js';
6
6
  import { TableNode } from './table-node.js';
7
- export declare type CreateIndexNodeParams = Omit<Partial<CreateIndexNode>, 'kind'>;
7
+ export declare type CreateIndexNodeProps = Omit<CreateIndexNode, 'kind' | 'name'>;
8
8
  export declare type IndexType = 'btree' | 'hash' | 'gist' | 'gin';
9
9
  export interface CreateIndexNode extends OperationNode {
10
10
  readonly kind: 'CreateIndexNode';
@@ -20,5 +20,5 @@ export interface CreateIndexNode extends OperationNode {
20
20
  export declare const CreateIndexNode: Readonly<{
21
21
  is(node: OperationNode): node is CreateIndexNode;
22
22
  create(name: string): CreateIndexNode;
23
- cloneWith(node: CreateIndexNode, params: CreateIndexNodeParams): CreateIndexNode;
23
+ cloneWith(node: CreateIndexNode, props: CreateIndexNodeProps): CreateIndexNode;
24
24
  }>;
@@ -16,10 +16,10 @@ exports.CreateIndexNode = (0, object_utils_js_1.freeze)({
16
16
  name: identifier_node_js_1.IdentifierNode.create(name),
17
17
  });
18
18
  },
19
- cloneWith(node, params) {
19
+ cloneWith(node, props) {
20
20
  return (0, object_utils_js_1.freeze)({
21
21
  ...node,
22
- ...params,
22
+ ...props,
23
23
  });
24
24
  },
25
25
  });
@@ -1,5 +1,6 @@
1
1
  import { OperationNode } from './operation-node.js';
2
2
  import { TableNode } from './table-node.js';
3
+ import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
3
4
  import { ConstraintNode } from './constraint-node.js';
4
5
  import { ColumnDefinitionNode } from './column-definition-node.js';
5
6
  export declare type CreateTableNodeModifier = 'IfNotExists';
@@ -21,5 +22,5 @@ export declare const CreateTableNode: Readonly<{
21
22
  cloneWithPrimaryKeyConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
22
23
  cloneWithUniqueConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
23
24
  cloneWithCheckConstraint(createTable: CreateTableNode, constraintName: string, sql: string): CreateTableNode;
24
- cloneWithForeignKeyConstraint(createTable: CreateTableNode, constraintName: string, sourceColumns: string[], targetTable: string, targetColumns: string[]): CreateTableNode;
25
+ cloneWithForeignKeyConstraint(createTable: CreateTableNode, constraint: ForeignKeyConstraintNode): CreateTableNode;
25
26
  }>;
@@ -3,11 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CreateTableNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
5
  const check_constraint_node_js_1 = require("./check-constraint-node.js");
6
- const table_node_js_1 = require("./table-node.js");
7
6
  const primary_constraint_node_js_1 = require("./primary-constraint-node.js");
8
7
  const unique_constraint_node_js_1 = require("./unique-constraint-node.js");
9
- const foreign_key_constraint_node_js_1 = require("./foreign-key-constraint-node.js");
10
- const column_node_js_1 = require("./column-node.js");
11
8
  /**
12
9
  * @internal
13
10
  */
@@ -61,8 +58,7 @@ exports.CreateTableNode = (0, object_utils_js_1.freeze)({
61
58
  : (0, object_utils_js_1.freeze)([constraint]),
62
59
  });
63
60
  },
64
- cloneWithForeignKeyConstraint(createTable, constraintName, sourceColumns, targetTable, targetColumns) {
65
- const constraint = foreign_key_constraint_node_js_1.ForeignKeyConstraintNode.create(sourceColumns.map(column_node_js_1.ColumnNode.create), table_node_js_1.TableNode.create(targetTable), targetColumns.map(column_node_js_1.ColumnNode.create), constraintName);
61
+ cloneWithForeignKeyConstraint(createTable, constraint) {
66
62
  return (0, object_utils_js_1.freeze)({
67
63
  ...createTable,
68
64
  constraints: createTable.constraints
@@ -1,7 +1,7 @@
1
1
  import { IdentifierNode } from './identifier-node.js';
2
2
  import { OperationNode } from './operation-node.js';
3
3
  import { TableNode } from './table-node.js';
4
- export declare type DropIndexNodeParams = Omit<Partial<DropIndexNode>, 'kind' | 'name'>;
4
+ export declare type DropIndexNodeProps = Omit<DropIndexNode, 'kind' | 'name'>;
5
5
  export declare type DropIndexNodeModifier = 'IfExists';
6
6
  export interface DropIndexNode extends OperationNode {
7
7
  readonly kind: 'DropIndexNode';
@@ -14,6 +14,6 @@ export interface DropIndexNode extends OperationNode {
14
14
  */
15
15
  export declare const DropIndexNode: Readonly<{
16
16
  is(node: OperationNode): node is DropIndexNode;
17
- create(name: string, params?: DropIndexNodeParams | undefined): DropIndexNode;
18
- cloneWith(dropIndex: DropIndexNode, params: DropIndexNodeParams): DropIndexNode;
17
+ create(name: string, params?: DropIndexNodeProps | undefined): DropIndexNode;
18
+ cloneWith(dropIndex: DropIndexNode, props: DropIndexNodeProps): DropIndexNode;
19
19
  }>;