kysely 0.27.4 → 0.27.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 (209) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/deno.check.d.ts +86 -0
  4. package/deno.check.json +21 -0
  5. package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
  6. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
  7. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  9. package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
  10. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  11. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  12. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  13. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  14. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  15. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  16. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  17. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  18. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  19. package/dist/cjs/driver/dummy-driver.js +13 -12
  20. package/dist/cjs/dynamic/dynamic.d.ts +6 -6
  21. package/dist/cjs/dynamic/dynamic.js +6 -6
  22. package/dist/cjs/expression/expression-builder.d.ts +152 -61
  23. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  24. package/dist/cjs/expression/expression.d.ts +40 -5
  25. package/dist/cjs/helpers/mssql.d.ts +74 -14
  26. package/dist/cjs/helpers/mssql.js +74 -14
  27. package/dist/cjs/helpers/mysql.d.ts +14 -10
  28. package/dist/cjs/helpers/mysql.js +14 -10
  29. package/dist/cjs/helpers/postgres.d.ts +7 -4
  30. package/dist/cjs/helpers/postgres.js +7 -4
  31. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  32. package/dist/cjs/helpers/sqlite.js +41 -16
  33. package/dist/cjs/kysely.d.ts +99 -41
  34. package/dist/cjs/kysely.js +60 -36
  35. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  36. package/dist/cjs/migration/file-migration-provider.js +2 -2
  37. package/dist/cjs/migration/migrator.d.ts +82 -14
  38. package/dist/cjs/migration/migrator.js +82 -14
  39. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  40. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  41. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/data-type-node.js +12 -0
  43. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
  46. package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
  47. package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
  48. package/dist/cjs/operation-node/query-node.d.ts +4 -0
  49. package/dist/cjs/operation-node/query-node.js +8 -0
  50. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  51. package/dist/cjs/operation-node/select-query-node.js +0 -8
  52. package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
  53. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  54. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
  55. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  56. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  57. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  58. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  59. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  60. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  61. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  62. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  63. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  64. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  65. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  66. package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
  67. package/dist/cjs/query-builder/delete-query-builder.js +76 -26
  68. package/dist/cjs/query-builder/function-module.d.ts +35 -88
  69. package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
  70. package/dist/cjs/query-builder/insert-query-builder.js +188 -52
  71. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  72. package/dist/cjs/query-builder/insert-result.js +10 -5
  73. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  74. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  75. package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
  76. package/dist/cjs/query-builder/merge-query-builder.js +68 -6
  77. package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
  78. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  79. package/dist/cjs/query-builder/output-interface.d.ts +50 -7
  80. package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
  81. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
  83. package/dist/cjs/query-builder/select-query-builder.js +7 -7
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
  85. package/dist/cjs/query-builder/update-query-builder.js +75 -10
  86. package/dist/cjs/query-builder/update-result.d.ts +2 -2
  87. package/dist/cjs/query-builder/update-result.js +2 -2
  88. package/dist/cjs/query-builder/where-interface.d.ts +5 -1
  89. package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
  90. package/dist/cjs/query-creator.d.ts +66 -18
  91. package/dist/cjs/query-creator.js +2 -2
  92. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  93. package/dist/cjs/raw-builder/sql.d.ts +26 -7
  94. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  95. package/dist/cjs/schema/alter-column-builder.js +17 -3
  96. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
  97. package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
  98. package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
  99. package/dist/cjs/schema/column-definition-builder.js +283 -26
  100. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  101. package/dist/cjs/schema/create-table-builder.js +86 -33
  102. package/dist/cjs/util/column-type.d.ts +5 -9
  103. package/dist/cjs/util/require-all-props.d.ts +4 -2
  104. package/dist/cjs/util/require-all-props.js +4 -2
  105. package/dist/cjs/util/streamable.d.ts +1 -1
  106. package/dist/cjs/util/type-utils.d.ts +4 -2
  107. package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
  108. package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
  109. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
  110. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  111. package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
  112. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  113. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  114. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  115. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  116. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  117. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  118. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  119. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  120. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  121. package/dist/esm/driver/dummy-driver.js +13 -12
  122. package/dist/esm/dynamic/dynamic.d.ts +6 -6
  123. package/dist/esm/dynamic/dynamic.js +6 -6
  124. package/dist/esm/expression/expression-builder.d.ts +152 -61
  125. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  126. package/dist/esm/expression/expression.d.ts +40 -5
  127. package/dist/esm/helpers/mssql.d.ts +74 -14
  128. package/dist/esm/helpers/mssql.js +74 -14
  129. package/dist/esm/helpers/mysql.d.ts +14 -10
  130. package/dist/esm/helpers/mysql.js +14 -10
  131. package/dist/esm/helpers/postgres.d.ts +7 -4
  132. package/dist/esm/helpers/postgres.js +7 -4
  133. package/dist/esm/helpers/sqlite.d.ts +41 -16
  134. package/dist/esm/helpers/sqlite.js +41 -16
  135. package/dist/esm/kysely.d.ts +99 -41
  136. package/dist/esm/kysely.js +60 -36
  137. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  138. package/dist/esm/migration/file-migration-provider.js +2 -2
  139. package/dist/esm/migration/migrator.d.ts +82 -14
  140. package/dist/esm/migration/migrator.js +82 -14
  141. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  142. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  143. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  144. package/dist/esm/operation-node/data-type-node.js +12 -0
  145. package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
  146. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  147. package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
  148. package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
  149. package/dist/esm/operation-node/operation-node-transformer.js +14 -3
  150. package/dist/esm/operation-node/query-node.d.ts +4 -0
  151. package/dist/esm/operation-node/query-node.js +8 -0
  152. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  153. package/dist/esm/operation-node/select-query-node.js +0 -8
  154. package/dist/esm/operation-node/update-query-node.d.ts +1 -0
  155. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  156. package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
  157. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  158. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  159. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  160. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  161. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  162. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  163. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  164. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  165. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  166. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  167. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  168. package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
  169. package/dist/esm/query-builder/delete-query-builder.js +76 -26
  170. package/dist/esm/query-builder/function-module.d.ts +35 -88
  171. package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
  172. package/dist/esm/query-builder/insert-query-builder.js +188 -52
  173. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  174. package/dist/esm/query-builder/insert-result.js +10 -5
  175. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  176. package/dist/esm/query-builder/json-path-builder.js +8 -5
  177. package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
  178. package/dist/esm/query-builder/merge-query-builder.js +68 -6
  179. package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
  180. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  181. package/dist/esm/query-builder/output-interface.d.ts +50 -7
  182. package/dist/esm/query-builder/returning-interface.d.ts +5 -5
  183. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  184. package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
  185. package/dist/esm/query-builder/select-query-builder.js +7 -7
  186. package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
  187. package/dist/esm/query-builder/update-query-builder.js +75 -10
  188. package/dist/esm/query-builder/update-result.d.ts +2 -2
  189. package/dist/esm/query-builder/update-result.js +2 -2
  190. package/dist/esm/query-builder/where-interface.d.ts +5 -1
  191. package/dist/esm/query-compiler/default-query-compiler.js +20 -0
  192. package/dist/esm/query-creator.d.ts +66 -18
  193. package/dist/esm/query-creator.js +2 -2
  194. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  195. package/dist/esm/raw-builder/sql.d.ts +26 -7
  196. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  197. package/dist/esm/schema/alter-column-builder.js +17 -3
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
  199. package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
  200. package/dist/esm/schema/column-definition-builder.d.ts +283 -26
  201. package/dist/esm/schema/column-definition-builder.js +283 -26
  202. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  203. package/dist/esm/schema/create-table-builder.js +86 -33
  204. package/dist/esm/util/column-type.d.ts +5 -9
  205. package/dist/esm/util/require-all-props.d.ts +4 -2
  206. package/dist/esm/util/require-all-props.js +4 -2
  207. package/dist/esm/util/streamable.d.ts +1 -1
  208. package/dist/esm/util/type-utils.d.ts +4 -2
  209. package/package.json +28 -23
@@ -18,16 +18,29 @@ export const NO_MIGRATIONS = freeze({ __noMigrations__: true });
18
18
  * other way.
19
19
  *
20
20
  * ```ts
21
- * import { promises as fs } from 'fs'
22
- * import path from 'path'
21
+ * import { promises as fs } from 'node:fs'
22
+ * import path from 'node:path'
23
+ * import * as Sqlite from 'better-sqlite3'
24
+ * import {
25
+ * FileMigrationProvider,
26
+ * Kysely,
27
+ * Migrator,
28
+ * SqliteDialect
29
+ * } from 'kysely'
30
+ *
31
+ * const db = new Kysely<any>({
32
+ * dialect: new SqliteDialect({
33
+ * database: Sqlite(':memory:')
34
+ * })
35
+ * })
23
36
  *
24
37
  * const migrator = new Migrator({
25
38
  * db,
26
39
  * provider: new FileMigrationProvider({
27
40
  * fs,
28
- * path,
29
41
  * // Path to the folder that contains all your migrations.
30
- * migrationFolder: 'some/path/to/migrations'
42
+ * migrationFolder: 'some/path/to/migrations',
43
+ * path,
31
44
  * })
32
45
  * })
33
46
  * ```
@@ -76,19 +89,18 @@ export class Migrator {
76
89
  * ### Examples
77
90
  *
78
91
  * ```ts
79
- * const db = new Kysely<Database>({
80
- * dialect: new PostgresDialect({
81
- * host: 'localhost',
82
- * database: 'kysely_test',
83
- * }),
84
- * })
92
+ * import { promises as fs } from 'node:fs'
93
+ * import path from 'node:path'
94
+ * import * as Sqlite from 'better-sqlite3'
95
+ * import { FileMigrationProvider, Migrator } from 'kysely'
85
96
  *
86
97
  * const migrator = new Migrator({
87
98
  * db,
88
- * provider: new FileMigrationProvider(
89
- * // Path to the folder that contains all your migrations.
90
- * 'some/path/to/migrations'
91
- * )
99
+ * provider: new FileMigrationProvider({
100
+ * fs,
101
+ * migrationFolder: 'some/path/to/migrations',
102
+ * path,
103
+ * })
92
104
  * })
93
105
  *
94
106
  * const { error, results } = await migrator.migrateToLatest()
@@ -121,6 +133,20 @@ export class Migrator {
121
133
  * ### Examples
122
134
  *
123
135
  * ```ts
136
+ * import { promises as fs } from 'node:fs'
137
+ * import path from 'node:path'
138
+ * import { FileMigrationProvider, Migrator } from 'kysely'
139
+ *
140
+ * const migrator = new Migrator({
141
+ * db,
142
+ * provider: new FileMigrationProvider({
143
+ * fs,
144
+ * // Path to the folder that contains all your migrations.
145
+ * migrationFolder: 'some/path/to/migrations',
146
+ * path,
147
+ * })
148
+ * })
149
+ *
124
150
  * await migrator.migrateTo('some_migration')
125
151
  * ```
126
152
  *
@@ -130,6 +156,20 @@ export class Migrator {
130
156
  * you can use a special constant `NO_MIGRATIONS`:
131
157
  *
132
158
  * ```ts
159
+ * import { promises as fs } from 'node:fs'
160
+ * import path from 'node:path'
161
+ * import { FileMigrationProvider, Migrator, NO_MIGRATIONS } from 'kysely'
162
+ *
163
+ * const migrator = new Migrator({
164
+ * db,
165
+ * provider: new FileMigrationProvider({
166
+ * fs,
167
+ * // Path to the folder that contains all your migrations.
168
+ * migrationFolder: 'some/path/to/migrations',
169
+ * path,
170
+ * })
171
+ * })
172
+ *
133
173
  * await migrator.migrateTo(NO_MIGRATIONS)
134
174
  * ```
135
175
  */
@@ -168,6 +208,20 @@ export class Migrator {
168
208
  * ### Examples
169
209
  *
170
210
  * ```ts
211
+ * import { promises as fs } from 'node:fs'
212
+ * import path from 'node:path'
213
+ * import { FileMigrationProvider, Migrator } from 'kysely'
214
+ *
215
+ * const migrator = new Migrator({
216
+ * db,
217
+ * provider: new FileMigrationProvider({
218
+ * fs,
219
+ * // Path to the folder that contains all your migrations.
220
+ * migrationFolder: 'some/path/to/migrations',
221
+ * path,
222
+ * })
223
+ * })
224
+ *
171
225
  * await migrator.migrateUp()
172
226
  * ```
173
227
  */
@@ -185,6 +239,20 @@ export class Migrator {
185
239
  * ### Examples
186
240
  *
187
241
  * ```ts
242
+ * import { promises as fs } from 'node:fs'
243
+ * import path from 'node:path'
244
+ * import { FileMigrationProvider, Migrator } from 'kysely'
245
+ *
246
+ * const migrator = new Migrator({
247
+ * db,
248
+ * provider: new FileMigrationProvider({
249
+ * fs,
250
+ * // Path to the folder that contains all your migrations.
251
+ * migrationFolder: 'some/path/to/migrations',
252
+ * path,
253
+ * })
254
+ * })
255
+ *
188
256
  * await migrator.migrateDown()
189
257
  * ```
190
258
  */
@@ -1,11 +1,14 @@
1
1
  import { OperationNode } from './operation-node.js';
2
2
  import { OverNode } from './over-node.js';
3
3
  import { WhereNode } from './where-node.js';
4
+ import { OrderByNode } from './order-by-node.js';
5
+ import { OrderByItemNode } from './order-by-item-node.js';
4
6
  export interface AggregateFunctionNode extends OperationNode {
5
7
  readonly kind: 'AggregateFunctionNode';
6
8
  readonly func: string;
7
9
  readonly aggregated: readonly OperationNode[];
8
10
  readonly distinct?: boolean;
11
+ readonly orderBy?: OrderByNode;
9
12
  readonly filter?: WhereNode;
10
13
  readonly over?: OverNode;
11
14
  }
@@ -16,6 +19,7 @@ export declare const AggregateFunctionNode: Readonly<{
16
19
  is(node: OperationNode): node is AggregateFunctionNode;
17
20
  create(aggregateFunction: string, aggregated?: readonly OperationNode[]): AggregateFunctionNode;
18
21
  cloneWithDistinct(aggregateFunctionNode: AggregateFunctionNode): AggregateFunctionNode;
22
+ cloneWithOrderBy(aggregateFunctionNode: AggregateFunctionNode, orderItems: ReadonlyArray<OrderByItemNode>): AggregateFunctionNode;
19
23
  cloneWithFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
20
24
  cloneWithOrFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
21
25
  cloneWithOver(aggregateFunctionNode: AggregateFunctionNode, over?: OverNode): AggregateFunctionNode;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="./aggregate-function-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
3
  import { WhereNode } from './where-node.js';
4
+ import { OrderByNode } from './order-by-node.js';
4
5
  /**
5
6
  * @internal
6
7
  */
@@ -21,6 +22,14 @@ export const AggregateFunctionNode = freeze({
21
22
  distinct: true,
22
23
  });
23
24
  },
25
+ cloneWithOrderBy(aggregateFunctionNode, orderItems) {
26
+ return freeze({
27
+ ...aggregateFunctionNode,
28
+ orderBy: aggregateFunctionNode.orderBy
29
+ ? OrderByNode.cloneWithItems(aggregateFunctionNode.orderBy, orderItems)
30
+ : OrderByNode.create(orderItems),
31
+ });
32
+ },
24
33
  cloneWithFilter(aggregateFunctionNode, filter) {
25
34
  return freeze({
26
35
  ...aggregateFunctionNode,
@@ -1,5 +1,5 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- declare const SIMPLE_COLUMN_DATA_TYPES: readonly ["varchar", "char", "text", "integer", "int2", "int4", "int8", "smallint", "bigint", "boolean", "real", "double precision", "float4", "float8", "decimal", "numeric", "binary", "bytea", "date", "datetime", "time", "timetz", "timestamp", "timestamptz", "serial", "bigserial", "uuid", "json", "jsonb", "blob", "varbinary"];
2
+ declare const SIMPLE_COLUMN_DATA_TYPES: readonly ["varchar", "char", "text", "integer", "int2", "int4", "int8", "smallint", "bigint", "boolean", "real", "double precision", "float4", "float8", "decimal", "numeric", "binary", "bytea", "date", "datetime", "time", "timetz", "timestamp", "timestamptz", "serial", "bigserial", "uuid", "json", "jsonb", "blob", "varbinary", "int4range", "int4multirange", "int8range", "int8multirange", "numrange", "nummultirange", "tsrange", "tsmultirange", "tstzrange", "tstzmultirange", "daterange", "datemultirange"];
3
3
  type SimpleColumnDataType = (typeof SIMPLE_COLUMN_DATA_TYPES)[number];
4
4
  export type ColumnDataType = SimpleColumnDataType | `varchar(${number})` | `char(${number})` | `decimal(${number}, ${number})` | `numeric(${number}, ${number})` | `binary(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})` | `varbinary(${number})`;
5
5
  export type DataTypeParams = Omit<DataTypeNode, 'kind' | 'dataType'>;
@@ -32,6 +32,18 @@ const SIMPLE_COLUMN_DATA_TYPES = [
32
32
  'jsonb',
33
33
  'blob',
34
34
  'varbinary',
35
+ 'int4range',
36
+ 'int4multirange',
37
+ 'int8range',
38
+ 'int8multirange',
39
+ 'numrange',
40
+ 'nummultirange',
41
+ 'tsrange',
42
+ 'tsmultirange',
43
+ 'tstzrange',
44
+ 'tstzmultirange',
45
+ 'daterange',
46
+ 'datemultirange',
35
47
  ];
36
48
  const COLUMN_DATA_TYPE_REGEX = [
37
49
  /^varchar\(\d+\)$/,
@@ -22,6 +22,7 @@ export interface DeleteQueryNode extends OperationNode {
22
22
  readonly orderBy?: OrderByNode;
23
23
  readonly limit?: LimitNode;
24
24
  readonly explain?: ExplainNode;
25
+ readonly endModifiers?: ReadonlyArray<OperationNode>;
25
26
  readonly top?: TopNode;
26
27
  readonly output?: OutputNode;
27
28
  }
@@ -22,6 +22,7 @@ export interface InsertQueryNode extends OperationNode {
22
22
  readonly replace?: boolean;
23
23
  readonly explain?: ExplainNode;
24
24
  readonly defaultValues?: boolean;
25
+ readonly endModifiers?: ReadonlyArray<OperationNode>;
25
26
  readonly top?: TopNode;
26
27
  readonly output?: OutputNode;
27
28
  }
@@ -14,6 +14,7 @@ export interface MergeQueryNode extends OperationNode {
14
14
  readonly with?: WithNode;
15
15
  readonly top?: TopNode;
16
16
  readonly output?: OutputNode;
17
+ readonly endModifiers?: ReadonlyArray<OperationNode>;
17
18
  }
18
19
  /**
19
20
  * @internal
@@ -106,9 +106,12 @@ import { OutputNode } from './output-node.js';
106
106
  * snake_case, you'd do something like this:
107
107
  *
108
108
  * ```ts
109
+ * import { type IdentifierNode, OperationNodeTransformer } from 'kysely'
110
+ * import snakeCase from 'lodash/snakeCase'
111
+ *
109
112
  * class CamelCaseTransformer extends OperationNodeTransformer {
110
- * transformIdentifier(node: IdentifierNode): IdentifierNode {
111
- * node = super.transformIdentifier(node),
113
+ * override transformIdentifier(node: IdentifierNode): IdentifierNode {
114
+ * node = super.transformIdentifier(node)
112
115
  *
113
116
  * return {
114
117
  * ...node,
@@ -118,7 +121,10 @@ import { OutputNode } from './output-node.js';
118
121
  * }
119
122
  *
120
123
  * const transformer = new CamelCaseTransformer()
121
- * const tree = transformer.transformNode(tree)
124
+ *
125
+ * const query = db.selectFrom('person').select(['first_name', 'last_name'])
126
+ *
127
+ * const tree = transformer.transformNode(query.toOperationNode())
122
128
  * ```
123
129
  */
124
130
  export declare class OperationNodeTransformer {
@@ -15,9 +15,12 @@ import { requireAllProps } from '../util/require-all-props.js';
15
15
  * snake_case, you'd do something like this:
16
16
  *
17
17
  * ```ts
18
+ * import { type IdentifierNode, OperationNodeTransformer } from 'kysely'
19
+ * import snakeCase from 'lodash/snakeCase'
20
+ *
18
21
  * class CamelCaseTransformer extends OperationNodeTransformer {
19
- * transformIdentifier(node: IdentifierNode): IdentifierNode {
20
- * node = super.transformIdentifier(node),
22
+ * override transformIdentifier(node: IdentifierNode): IdentifierNode {
23
+ * node = super.transformIdentifier(node)
21
24
  *
22
25
  * return {
23
26
  * ...node,
@@ -27,7 +30,10 @@ import { requireAllProps } from '../util/require-all-props.js';
27
30
  * }
28
31
  *
29
32
  * const transformer = new CamelCaseTransformer()
30
- * const tree = transformer.transformNode(tree)
33
+ *
34
+ * const query = db.selectFrom('person').select(['first_name', 'last_name'])
35
+ *
36
+ * const tree = transformer.transformNode(query.toOperationNode())
31
37
  * ```
32
38
  */
33
39
  export class OperationNodeTransformer {
@@ -261,6 +267,7 @@ export class OperationNodeTransformer {
261
267
  returning: this.transformNode(node.returning),
262
268
  onConflict: this.transformNode(node.onConflict),
263
269
  onDuplicateKey: this.transformNode(node.onDuplicateKey),
270
+ endModifiers: this.transformNodeList(node.endModifiers),
264
271
  with: this.transformNode(node.with),
265
272
  ignore: node.ignore,
266
273
  replace: node.replace,
@@ -284,6 +291,7 @@ export class OperationNodeTransformer {
284
291
  joins: this.transformNodeList(node.joins),
285
292
  where: this.transformNode(node.where),
286
293
  returning: this.transformNode(node.returning),
294
+ endModifiers: this.transformNodeList(node.endModifiers),
287
295
  with: this.transformNode(node.with),
288
296
  orderBy: this.transformNode(node.orderBy),
289
297
  limit: this.transformNode(node.limit),
@@ -381,6 +389,7 @@ export class OperationNodeTransformer {
381
389
  where: this.transformNode(node.where),
382
390
  updates: this.transformNodeList(node.updates),
383
391
  returning: this.transformNode(node.returning),
392
+ endModifiers: this.transformNodeList(node.endModifiers),
384
393
  with: this.transformNode(node.with),
385
394
  explain: this.transformNode(node.explain),
386
395
  limit: this.transformNode(node.limit),
@@ -687,6 +696,7 @@ export class OperationNodeTransformer {
687
696
  kind: 'AggregateFunctionNode',
688
697
  aggregated: this.transformNodeList(node.aggregated),
689
698
  distinct: node.distinct,
699
+ orderBy: this.transformNode(node.orderBy),
690
700
  filter: this.transformNode(node.filter),
691
701
  func: node.func,
692
702
  over: this.transformNode(node.over),
@@ -797,6 +807,7 @@ export class OperationNodeTransformer {
797
807
  whens: this.transformNodeList(node.whens),
798
808
  with: this.transformNode(node.with),
799
809
  top: this.transformNode(node.top),
810
+ endModifiers: this.transformNodeList(node.endModifiers),
800
811
  output: this.transformNode(node.output),
801
812
  });
802
813
  }
@@ -32,11 +32,15 @@ type HasTop = {
32
32
  type HasOutput = {
33
33
  output?: OutputNode;
34
34
  };
35
+ type HasEndModifiers = {
36
+ endModifiers?: ReadonlyArray<OperationNode>;
37
+ };
35
38
  /**
36
39
  * @internal
37
40
  */
38
41
  export declare const QueryNode: Readonly<{
39
42
  is(node: OperationNode): node is QueryNode;
43
+ cloneWithEndModifier<T extends HasEndModifiers>(node: T, modifier: OperationNode): T;
40
44
  cloneWithWhere<T extends HasWhere>(node: T, operation: OperationNode): T;
41
45
  cloneWithJoin<T extends HasJoins>(node: T, join: JoinNode): T;
42
46
  cloneWithReturning<T extends HasReturning>(node: T, selections: ReadonlyArray<SelectionNode>): T;
@@ -20,6 +20,14 @@ export const QueryNode = freeze({
20
20
  DeleteQueryNode.is(node) ||
21
21
  MergeQueryNode.is(node));
22
22
  },
23
+ cloneWithEndModifier(node, modifier) {
24
+ return freeze({
25
+ ...node,
26
+ endModifiers: node.endModifiers
27
+ ? freeze([...node.endModifiers, modifier])
28
+ : freeze([modifier]),
29
+ });
30
+ },
23
31
  cloneWithWhere(node, operation) {
24
32
  return freeze({
25
33
  ...node,
@@ -46,7 +46,6 @@ export declare const SelectQueryNode: Readonly<{
46
46
  cloneWithSelections(select: SelectQueryNode, selections: ReadonlyArray<SelectionNode>): SelectQueryNode;
47
47
  cloneWithDistinctOn(select: SelectQueryNode, expressions: ReadonlyArray<OperationNode>): SelectQueryNode;
48
48
  cloneWithFrontModifier(select: SelectQueryNode, modifier: SelectModifierNode): SelectQueryNode;
49
- cloneWithEndModifier(select: SelectQueryNode, modifier: SelectModifierNode): SelectQueryNode;
50
49
  cloneWithOrderByItems(selectNode: SelectQueryNode, items: ReadonlyArray<OrderByItemNode>): SelectQueryNode;
51
50
  cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
52
51
  cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
@@ -48,14 +48,6 @@ export const SelectQueryNode = freeze({
48
48
  : freeze([modifier]),
49
49
  });
50
50
  },
51
- cloneWithEndModifier(select, modifier) {
52
- return freeze({
53
- ...select,
54
- endModifiers: select.endModifiers
55
- ? freeze([...select.endModifiers, modifier])
56
- : freeze([modifier]),
57
- });
58
- },
59
51
  cloneWithOrderByItems(selectNode, items) {
60
52
  return freeze({
61
53
  ...selectNode,
@@ -22,6 +22,7 @@ export interface UpdateQueryNode extends OperationNode {
22
22
  readonly returning?: ReturningNode;
23
23
  readonly with?: WithNode;
24
24
  readonly explain?: ExplainNode;
25
+ readonly endModifiers?: ReadonlyArray<OperationNode>;
25
26
  readonly limit?: LimitNode;
26
27
  readonly top?: TopNode;
27
28
  readonly output?: OutputNode;
@@ -42,38 +42,39 @@ export interface CamelCasePluginOptions {
42
42
  * using `CamelCasePlugin` we would setup Kysely like this:
43
43
  *
44
44
  * ```ts
45
- * interface Person {
46
- * firstName: string
47
- * lastName: string
48
- * }
45
+ * import * as Sqlite from 'better-sqlite3'
46
+ * import { CamelCasePlugin, Kysely, SqliteDialect } from 'kysely'
49
47
  *
50
- * interface Database {
51
- * personTable: Person
48
+ * interface CamelCasedDatabase {
49
+ * userMetadata: {
50
+ * firstName: string
51
+ * lastName: string
52
+ * }
52
53
  * }
53
54
  *
54
- * const db = new Kysely<Database>({
55
- * dialect: new PostgresDialect({
56
- * database: 'kysely_test',
57
- * host: 'localhost',
55
+ * const db = new Kysely<CamelCasedDatabase>({
56
+ * dialect: new SqliteDialect({
57
+ * database: new Sqlite(':memory:'),
58
58
  * }),
59
- * plugins: [
60
- * new CamelCasePlugin()
61
- * ]
59
+ * plugins: [new CamelCasePlugin()],
62
60
  * })
63
61
  *
64
- * const person = await db.selectFrom('personTable')
62
+ * const person = await db.selectFrom('userMetadata')
65
63
  * .where('firstName', '=', 'Arnold')
66
64
  * .select(['firstName', 'lastName'])
67
65
  * .executeTakeFirst()
68
66
  *
69
- * // generated sql:
70
- * // select first_name, last_name from person_table where first_name = $1
71
- *
72
67
  * if (person) {
73
68
  * console.log(person.firstName)
74
69
  * }
75
70
  * ```
76
71
  *
72
+ * The generated SQL (SQLite):
73
+ *
74
+ * ```sql
75
+ * select "first_name", "last_name" from "user_metadata" where "first_name" = ?
76
+ * ```
77
+ *
77
78
  * As you can see from the example, __everything__ needs to be defined
78
79
  * in camelCase in the TypeScript code: table names, columns, schemas,
79
80
  * __everything__. When using the `CamelCasePlugin` Kysely works as if
@@ -88,11 +89,15 @@ export interface CamelCasePluginOptions {
88
89
  * ```ts
89
90
  * class MyCamelCasePlugin extends CamelCasePlugin {
90
91
  * protected override snakeCase(str: string): string {
91
- * return mySnakeCase(str)
92
+ * // ...
93
+ *
94
+ * return str
92
95
  * }
93
96
  *
94
97
  * protected override camelCase(str: string): string {
95
- * return myCamelCase(str)
98
+ * // ...
99
+ *
100
+ * return str
96
101
  * }
97
102
  * }
98
103
  * ```
@@ -111,19 +116,41 @@ export declare class CamelCasePlugin implements KyselyPlugin {
111
116
  * can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
112
117
  *
113
118
  * ```ts
114
- * const plugin = {
115
- * data: new WeakMap<QueryId, SomeData>(),
119
+ * import type {
120
+ * KyselyPlugin,
121
+ * QueryResult,
122
+ * RootOperationNode,
123
+ * UnknownRow
124
+ * } from 'kysely'
125
+ *
126
+ * interface MyData {
127
+ * // ...
128
+ * }
129
+ * const data = new WeakMap<any, MyData>()
116
130
  *
131
+ * const plugin = {
117
132
  * transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
118
- * this.data.set(args.queryId, something)
133
+ * const something: MyData = {}
134
+ *
135
+ * // ...
136
+ *
137
+ * data.set(args.queryId, something)
138
+ *
139
+ * // ...
140
+ *
119
141
  * return args.node
120
142
  * },
121
143
  *
122
- * transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
123
- * const data = this.data.get(args.queryId)
144
+ * async transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>> {
145
+ * // ...
146
+ *
147
+ * const something = data.get(args.queryId)
148
+ *
149
+ * // ...
150
+ *
124
151
  * return args.result
125
152
  * }
126
- * }
153
+ * } satisfies KyselyPlugin
127
154
  * ```
128
155
  *
129
156
  * You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
@@ -11,38 +11,39 @@ import { createCamelCaseMapper, createSnakeCaseMapper, } from './camel-case.js';
11
11
  * using `CamelCasePlugin` we would setup Kysely like this:
12
12
  *
13
13
  * ```ts
14
- * interface Person {
15
- * firstName: string
16
- * lastName: string
17
- * }
14
+ * import * as Sqlite from 'better-sqlite3'
15
+ * import { CamelCasePlugin, Kysely, SqliteDialect } from 'kysely'
18
16
  *
19
- * interface Database {
20
- * personTable: Person
17
+ * interface CamelCasedDatabase {
18
+ * userMetadata: {
19
+ * firstName: string
20
+ * lastName: string
21
+ * }
21
22
  * }
22
23
  *
23
- * const db = new Kysely<Database>({
24
- * dialect: new PostgresDialect({
25
- * database: 'kysely_test',
26
- * host: 'localhost',
24
+ * const db = new Kysely<CamelCasedDatabase>({
25
+ * dialect: new SqliteDialect({
26
+ * database: new Sqlite(':memory:'),
27
27
  * }),
28
- * plugins: [
29
- * new CamelCasePlugin()
30
- * ]
28
+ * plugins: [new CamelCasePlugin()],
31
29
  * })
32
30
  *
33
- * const person = await db.selectFrom('personTable')
31
+ * const person = await db.selectFrom('userMetadata')
34
32
  * .where('firstName', '=', 'Arnold')
35
33
  * .select(['firstName', 'lastName'])
36
34
  * .executeTakeFirst()
37
35
  *
38
- * // generated sql:
39
- * // select first_name, last_name from person_table where first_name = $1
40
- *
41
36
  * if (person) {
42
37
  * console.log(person.firstName)
43
38
  * }
44
39
  * ```
45
40
  *
41
+ * The generated SQL (SQLite):
42
+ *
43
+ * ```sql
44
+ * select "first_name", "last_name" from "user_metadata" where "first_name" = ?
45
+ * ```
46
+ *
46
47
  * As you can see from the example, __everything__ needs to be defined
47
48
  * in camelCase in the TypeScript code: table names, columns, schemas,
48
49
  * __everything__. When using the `CamelCasePlugin` Kysely works as if
@@ -57,11 +58,15 @@ import { createCamelCaseMapper, createSnakeCaseMapper, } from './camel-case.js';
57
58
  * ```ts
58
59
  * class MyCamelCasePlugin extends CamelCasePlugin {
59
60
  * protected override snakeCase(str: string): string {
60
- * return mySnakeCase(str)
61
+ * // ...
62
+ *
63
+ * return str
61
64
  * }
62
65
  *
63
66
  * protected override camelCase(str: string): string {
64
- * return myCamelCase(str)
67
+ * // ...
68
+ *
69
+ * return str
65
70
  * }
66
71
  * }
67
72
  * ```
@@ -5,7 +5,7 @@ import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } fro
5
5
  /**
6
6
  * Plugin that removes duplicate joins from queries.
7
7
  *
8
- * See [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/deduplicate-joins.md)
8
+ * See [this recipe](https://github.com/kysely-org/kysely/blob/master/site/docs/recipes/0008-deduplicate-joins.md)
9
9
  */
10
10
  export declare class DeduplicateJoinsPlugin implements KyselyPlugin {
11
11
  #private;
@@ -19,19 +19,41 @@ export declare class DeduplicateJoinsPlugin implements KyselyPlugin {
19
19
  * can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
20
20
  *
21
21
  * ```ts
22
- * const plugin = {
23
- * data: new WeakMap<QueryId, SomeData>(),
22
+ * import type {
23
+ * KyselyPlugin,
24
+ * QueryResult,
25
+ * RootOperationNode,
26
+ * UnknownRow
27
+ * } from 'kysely'
28
+ *
29
+ * interface MyData {
30
+ * // ...
31
+ * }
32
+ * const data = new WeakMap<any, MyData>()
24
33
  *
34
+ * const plugin = {
25
35
  * transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
26
- * this.data.set(args.queryId, something)
36
+ * const something: MyData = {}
37
+ *
38
+ * // ...
39
+ *
40
+ * data.set(args.queryId, something)
41
+ *
42
+ * // ...
43
+ *
27
44
  * return args.node
28
45
  * },
29
46
  *
30
- * transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
31
- * const data = this.data.get(args.queryId)
47
+ * async transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>> {
48
+ * // ...
49
+ *
50
+ * const something = data.get(args.queryId)
51
+ *
52
+ * // ...
53
+ *
32
54
  * return args.result
33
55
  * }
34
- * }
56
+ * } satisfies KyselyPlugin
35
57
  * ```
36
58
  *
37
59
  * You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
@@ -3,7 +3,7 @@ import { DeduplicateJoinsTransformer } from './deduplicate-joins-transformer.js'
3
3
  /**
4
4
  * Plugin that removes duplicate joins from queries.
5
5
  *
6
- * See [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/deduplicate-joins.md)
6
+ * See [this recipe](https://github.com/kysely-org/kysely/blob/master/site/docs/recipes/0008-deduplicate-joins.md)
7
7
  */
8
8
  export class DeduplicateJoinsPlugin {
9
9
  #transformer = new DeduplicateJoinsTransformer();