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
@@ -20,16 +20,29 @@ exports.NO_MIGRATIONS = (0, object_utils_js_1.freeze)({ __noMigrations__: true }
20
20
  * other way.
21
21
  *
22
22
  * ```ts
23
- * import { promises as fs } from 'fs'
24
- * import path from 'path'
23
+ * import { promises as fs } from 'node:fs'
24
+ * import path from 'node:path'
25
+ * import * as Sqlite from 'better-sqlite3'
26
+ * import {
27
+ * FileMigrationProvider,
28
+ * Kysely,
29
+ * Migrator,
30
+ * SqliteDialect
31
+ * } from 'kysely'
32
+ *
33
+ * const db = new Kysely<any>({
34
+ * dialect: new SqliteDialect({
35
+ * database: Sqlite(':memory:')
36
+ * })
37
+ * })
25
38
  *
26
39
  * const migrator = new Migrator({
27
40
  * db,
28
41
  * provider: new FileMigrationProvider({
29
42
  * fs,
30
- * path,
31
43
  * // Path to the folder that contains all your migrations.
32
- * migrationFolder: 'some/path/to/migrations'
44
+ * migrationFolder: 'some/path/to/migrations',
45
+ * path,
33
46
  * })
34
47
  * })
35
48
  * ```
@@ -78,19 +91,18 @@ class Migrator {
78
91
  * ### Examples
79
92
  *
80
93
  * ```ts
81
- * const db = new Kysely<Database>({
82
- * dialect: new PostgresDialect({
83
- * host: 'localhost',
84
- * database: 'kysely_test',
85
- * }),
86
- * })
94
+ * import { promises as fs } from 'node:fs'
95
+ * import path from 'node:path'
96
+ * import * as Sqlite from 'better-sqlite3'
97
+ * import { FileMigrationProvider, Migrator } from 'kysely'
87
98
  *
88
99
  * const migrator = new Migrator({
89
100
  * db,
90
- * provider: new FileMigrationProvider(
91
- * // Path to the folder that contains all your migrations.
92
- * 'some/path/to/migrations'
93
- * )
101
+ * provider: new FileMigrationProvider({
102
+ * fs,
103
+ * migrationFolder: 'some/path/to/migrations',
104
+ * path,
105
+ * })
94
106
  * })
95
107
  *
96
108
  * const { error, results } = await migrator.migrateToLatest()
@@ -123,6 +135,20 @@ class Migrator {
123
135
  * ### Examples
124
136
  *
125
137
  * ```ts
138
+ * import { promises as fs } from 'node:fs'
139
+ * import path from 'node:path'
140
+ * import { FileMigrationProvider, Migrator } from 'kysely'
141
+ *
142
+ * const migrator = new Migrator({
143
+ * db,
144
+ * provider: new FileMigrationProvider({
145
+ * fs,
146
+ * // Path to the folder that contains all your migrations.
147
+ * migrationFolder: 'some/path/to/migrations',
148
+ * path,
149
+ * })
150
+ * })
151
+ *
126
152
  * await migrator.migrateTo('some_migration')
127
153
  * ```
128
154
  *
@@ -132,6 +158,20 @@ class Migrator {
132
158
  * you can use a special constant `NO_MIGRATIONS`:
133
159
  *
134
160
  * ```ts
161
+ * import { promises as fs } from 'node:fs'
162
+ * import path from 'node:path'
163
+ * import { FileMigrationProvider, Migrator, NO_MIGRATIONS } from 'kysely'
164
+ *
165
+ * const migrator = new Migrator({
166
+ * db,
167
+ * provider: new FileMigrationProvider({
168
+ * fs,
169
+ * // Path to the folder that contains all your migrations.
170
+ * migrationFolder: 'some/path/to/migrations',
171
+ * path,
172
+ * })
173
+ * })
174
+ *
135
175
  * await migrator.migrateTo(NO_MIGRATIONS)
136
176
  * ```
137
177
  */
@@ -170,6 +210,20 @@ class Migrator {
170
210
  * ### Examples
171
211
  *
172
212
  * ```ts
213
+ * import { promises as fs } from 'node:fs'
214
+ * import path from 'node:path'
215
+ * import { FileMigrationProvider, Migrator } from 'kysely'
216
+ *
217
+ * const migrator = new Migrator({
218
+ * db,
219
+ * provider: new FileMigrationProvider({
220
+ * fs,
221
+ * // Path to the folder that contains all your migrations.
222
+ * migrationFolder: 'some/path/to/migrations',
223
+ * path,
224
+ * })
225
+ * })
226
+ *
173
227
  * await migrator.migrateUp()
174
228
  * ```
175
229
  */
@@ -187,6 +241,20 @@ class Migrator {
187
241
  * ### Examples
188
242
  *
189
243
  * ```ts
244
+ * import { promises as fs } from 'node:fs'
245
+ * import path from 'node:path'
246
+ * import { FileMigrationProvider, Migrator } from 'kysely'
247
+ *
248
+ * const migrator = new Migrator({
249
+ * db,
250
+ * provider: new FileMigrationProvider({
251
+ * fs,
252
+ * // Path to the folder that contains all your migrations.
253
+ * migrationFolder: 'some/path/to/migrations',
254
+ * path,
255
+ * })
256
+ * })
257
+ *
190
258
  * await migrator.migrateDown()
191
259
  * ```
192
260
  */
@@ -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;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AggregateFunctionNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
5
  const where_node_js_1 = require("./where-node.js");
6
+ const order_by_node_js_1 = require("./order-by-node.js");
6
7
  /**
7
8
  * @internal
8
9
  */
@@ -23,6 +24,14 @@ exports.AggregateFunctionNode = (0, object_utils_js_1.freeze)({
23
24
  distinct: true,
24
25
  });
25
26
  },
27
+ cloneWithOrderBy(aggregateFunctionNode, orderItems) {
28
+ return (0, object_utils_js_1.freeze)({
29
+ ...aggregateFunctionNode,
30
+ orderBy: aggregateFunctionNode.orderBy
31
+ ? order_by_node_js_1.OrderByNode.cloneWithItems(aggregateFunctionNode.orderBy, orderItems)
32
+ : order_by_node_js_1.OrderByNode.create(orderItems),
33
+ });
34
+ },
26
35
  cloneWithFilter(aggregateFunctionNode, filter) {
27
36
  return (0, object_utils_js_1.freeze)({
28
37
  ...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'>;
@@ -35,6 +35,18 @@ const SIMPLE_COLUMN_DATA_TYPES = [
35
35
  'jsonb',
36
36
  'blob',
37
37
  'varbinary',
38
+ 'int4range',
39
+ 'int4multirange',
40
+ 'int8range',
41
+ 'int8multirange',
42
+ 'numrange',
43
+ 'nummultirange',
44
+ 'tsrange',
45
+ 'tsmultirange',
46
+ 'tstzrange',
47
+ 'tstzmultirange',
48
+ 'daterange',
49
+ 'datemultirange',
38
50
  ];
39
51
  const COLUMN_DATA_TYPE_REGEX = [
40
52
  /^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 {
@@ -17,9 +17,12 @@ const require_all_props_js_1 = require("../util/require-all-props.js");
17
17
  * snake_case, you'd do something like this:
18
18
  *
19
19
  * ```ts
20
+ * import { type IdentifierNode, OperationNodeTransformer } from 'kysely'
21
+ * import snakeCase from 'lodash/snakeCase'
22
+ *
20
23
  * class CamelCaseTransformer extends OperationNodeTransformer {
21
- * transformIdentifier(node: IdentifierNode): IdentifierNode {
22
- * node = super.transformIdentifier(node),
24
+ * override transformIdentifier(node: IdentifierNode): IdentifierNode {
25
+ * node = super.transformIdentifier(node)
23
26
  *
24
27
  * return {
25
28
  * ...node,
@@ -29,7 +32,10 @@ const require_all_props_js_1 = require("../util/require-all-props.js");
29
32
  * }
30
33
  *
31
34
  * const transformer = new CamelCaseTransformer()
32
- * const tree = transformer.transformNode(tree)
35
+ *
36
+ * const query = db.selectFrom('person').select(['first_name', 'last_name'])
37
+ *
38
+ * const tree = transformer.transformNode(query.toOperationNode())
33
39
  * ```
34
40
  */
35
41
  class OperationNodeTransformer {
@@ -263,6 +269,7 @@ class OperationNodeTransformer {
263
269
  returning: this.transformNode(node.returning),
264
270
  onConflict: this.transformNode(node.onConflict),
265
271
  onDuplicateKey: this.transformNode(node.onDuplicateKey),
272
+ endModifiers: this.transformNodeList(node.endModifiers),
266
273
  with: this.transformNode(node.with),
267
274
  ignore: node.ignore,
268
275
  replace: node.replace,
@@ -286,6 +293,7 @@ class OperationNodeTransformer {
286
293
  joins: this.transformNodeList(node.joins),
287
294
  where: this.transformNode(node.where),
288
295
  returning: this.transformNode(node.returning),
296
+ endModifiers: this.transformNodeList(node.endModifiers),
289
297
  with: this.transformNode(node.with),
290
298
  orderBy: this.transformNode(node.orderBy),
291
299
  limit: this.transformNode(node.limit),
@@ -383,6 +391,7 @@ class OperationNodeTransformer {
383
391
  where: this.transformNode(node.where),
384
392
  updates: this.transformNodeList(node.updates),
385
393
  returning: this.transformNode(node.returning),
394
+ endModifiers: this.transformNodeList(node.endModifiers),
386
395
  with: this.transformNode(node.with),
387
396
  explain: this.transformNode(node.explain),
388
397
  limit: this.transformNode(node.limit),
@@ -689,6 +698,7 @@ class OperationNodeTransformer {
689
698
  kind: 'AggregateFunctionNode',
690
699
  aggregated: this.transformNodeList(node.aggregated),
691
700
  distinct: node.distinct,
701
+ orderBy: this.transformNode(node.orderBy),
692
702
  filter: this.transformNode(node.filter),
693
703
  func: node.func,
694
704
  over: this.transformNode(node.over),
@@ -799,6 +809,7 @@ class OperationNodeTransformer {
799
809
  whens: this.transformNodeList(node.whens),
800
810
  with: this.transformNode(node.with),
801
811
  top: this.transformNode(node.top),
812
+ endModifiers: this.transformNodeList(node.endModifiers),
802
813
  output: this.transformNode(node.output),
803
814
  });
804
815
  }
@@ -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;
@@ -22,6 +22,14 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
22
22
  delete_query_node_js_1.DeleteQueryNode.is(node) ||
23
23
  merge_query_node_js_1.MergeQueryNode.is(node));
24
24
  },
25
+ cloneWithEndModifier(node, modifier) {
26
+ return (0, object_utils_js_1.freeze)({
27
+ ...node,
28
+ endModifiers: node.endModifiers
29
+ ? (0, object_utils_js_1.freeze)([...node.endModifiers, modifier])
30
+ : (0, object_utils_js_1.freeze)([modifier]),
31
+ });
32
+ },
25
33
  cloneWithWhere(node, operation) {
26
34
  return (0, object_utils_js_1.freeze)({
27
35
  ...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;
@@ -50,14 +50,6 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
50
50
  : (0, object_utils_js_1.freeze)([modifier]),
51
51
  });
52
52
  },
53
- cloneWithEndModifier(select, modifier) {
54
- return (0, object_utils_js_1.freeze)({
55
- ...select,
56
- endModifiers: select.endModifiers
57
- ? (0, object_utils_js_1.freeze)([...select.endModifiers, modifier])
58
- : (0, object_utils_js_1.freeze)([modifier]),
59
- });
60
- },
61
53
  cloneWithOrderByItems(selectNode, items) {
62
54
  return (0, object_utils_js_1.freeze)({
63
55
  ...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`
@@ -13,38 +13,39 @@ const camel_case_js_1 = require("./camel-case.js");
13
13
  * using `CamelCasePlugin` we would setup Kysely like this:
14
14
  *
15
15
  * ```ts
16
- * interface Person {
17
- * firstName: string
18
- * lastName: string
19
- * }
16
+ * import * as Sqlite from 'better-sqlite3'
17
+ * import { CamelCasePlugin, Kysely, SqliteDialect } from 'kysely'
20
18
  *
21
- * interface Database {
22
- * personTable: Person
19
+ * interface CamelCasedDatabase {
20
+ * userMetadata: {
21
+ * firstName: string
22
+ * lastName: string
23
+ * }
23
24
  * }
24
25
  *
25
- * const db = new Kysely<Database>({
26
- * dialect: new PostgresDialect({
27
- * database: 'kysely_test',
28
- * host: 'localhost',
26
+ * const db = new Kysely<CamelCasedDatabase>({
27
+ * dialect: new SqliteDialect({
28
+ * database: new Sqlite(':memory:'),
29
29
  * }),
30
- * plugins: [
31
- * new CamelCasePlugin()
32
- * ]
30
+ * plugins: [new CamelCasePlugin()],
33
31
  * })
34
32
  *
35
- * const person = await db.selectFrom('personTable')
33
+ * const person = await db.selectFrom('userMetadata')
36
34
  * .where('firstName', '=', 'Arnold')
37
35
  * .select(['firstName', 'lastName'])
38
36
  * .executeTakeFirst()
39
37
  *
40
- * // generated sql:
41
- * // select first_name, last_name from person_table where first_name = $1
42
- *
43
38
  * if (person) {
44
39
  * console.log(person.firstName)
45
40
  * }
46
41
  * ```
47
42
  *
43
+ * The generated SQL (SQLite):
44
+ *
45
+ * ```sql
46
+ * select "first_name", "last_name" from "user_metadata" where "first_name" = ?
47
+ * ```
48
+ *
48
49
  * As you can see from the example, __everything__ needs to be defined
49
50
  * in camelCase in the TypeScript code: table names, columns, schemas,
50
51
  * __everything__. When using the `CamelCasePlugin` Kysely works as if
@@ -59,11 +60,15 @@ const camel_case_js_1 = require("./camel-case.js");
59
60
  * ```ts
60
61
  * class MyCamelCasePlugin extends CamelCasePlugin {
61
62
  * protected override snakeCase(str: string): string {
62
- * return mySnakeCase(str)
63
+ * // ...
64
+ *
65
+ * return str
63
66
  * }
64
67
  *
65
68
  * protected override camelCase(str: string): string {
66
- * return myCamelCase(str)
69
+ * // ...
70
+ *
71
+ * return str
67
72
  * }
68
73
  * }
69
74
  * ```
@@ -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`