kysely 0.27.3 → 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 (301) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +7 -7
  4. package/deno.check.d.ts +86 -0
  5. package/deno.check.json +21 -0
  6. package/dist/cjs/dialect/dialect-adapter-base.d.ts +13 -3
  7. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  8. package/dist/cjs/dialect/dialect-adapter.d.ts +16 -2
  9. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +12 -7
  10. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  11. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  12. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  13. package/dist/cjs/dialect/mssql/mssql-driver.js +114 -48
  14. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  15. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  16. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  17. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  18. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  20. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  22. package/dist/cjs/driver/database-connection.d.ts +3 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  24. package/dist/cjs/driver/dummy-driver.js +13 -12
  25. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  26. package/dist/cjs/dynamic/dynamic.d.ts +7 -7
  27. package/dist/cjs/dynamic/dynamic.js +7 -7
  28. package/dist/cjs/expression/expression-builder.d.ts +153 -62
  29. package/dist/cjs/expression/expression-builder.js +2 -3
  30. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  31. package/dist/cjs/expression/expression.d.ts +40 -5
  32. package/dist/cjs/expression/expression.js +2 -3
  33. package/dist/cjs/helpers/mssql.d.ts +74 -14
  34. package/dist/cjs/helpers/mssql.js +77 -18
  35. package/dist/cjs/helpers/mysql.d.ts +17 -13
  36. package/dist/cjs/helpers/mysql.js +20 -17
  37. package/dist/cjs/helpers/postgres.d.ts +11 -8
  38. package/dist/cjs/helpers/postgres.js +14 -12
  39. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  40. package/dist/cjs/helpers/sqlite.js +44 -20
  41. package/dist/cjs/index.d.ts +28 -21
  42. package/dist/cjs/index.js +28 -21
  43. package/dist/cjs/kysely.d.ts +100 -42
  44. package/dist/cjs/kysely.js +63 -39
  45. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  46. package/dist/cjs/migration/file-migration-provider.js +2 -2
  47. package/dist/cjs/migration/migrator.d.ts +82 -14
  48. package/dist/cjs/migration/migrator.js +82 -14
  49. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  50. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  51. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  53. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  54. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  55. package/dist/cjs/operation-node/data-type-node.js +17 -3
  56. package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
  57. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  58. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  60. package/dist/cjs/operation-node/merge-query-node.d.ts +3 -0
  61. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  62. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  63. package/dist/cjs/operation-node/operation-node-transformer.d.ts +11 -3
  64. package/dist/cjs/operation-node/operation-node-transformer.js +26 -3
  65. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  66. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  67. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  68. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  69. package/dist/cjs/operation-node/operator-node.js +8 -6
  70. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/output-node.js +26 -0
  72. package/dist/cjs/operation-node/query-node.d.ts +15 -6
  73. package/dist/cjs/operation-node/query-node.js +17 -0
  74. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  75. package/dist/cjs/operation-node/select-query-node.js +6 -8
  76. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.js +5 -6
  79. package/dist/cjs/parser/data-type-parser.js +1 -2
  80. package/dist/cjs/parser/default-value-parser.js +1 -2
  81. package/dist/cjs/parser/expression-parser.js +3 -4
  82. package/dist/cjs/parser/fetch-parser.js +1 -2
  83. package/dist/cjs/parser/group-by-parser.js +1 -2
  84. package/dist/cjs/parser/identifier-parser.js +1 -2
  85. package/dist/cjs/parser/insert-values-parser.js +1 -2
  86. package/dist/cjs/parser/join-parser.js +1 -2
  87. package/dist/cjs/parser/merge-parser.js +2 -3
  88. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  89. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  90. package/dist/cjs/parser/order-by-parser.js +3 -4
  91. package/dist/cjs/parser/parse-utils.js +4 -5
  92. package/dist/cjs/parser/partition-by-parser.js +1 -2
  93. package/dist/cjs/parser/reference-parser.js +8 -9
  94. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  95. package/dist/cjs/parser/select-parser.js +2 -3
  96. package/dist/cjs/parser/set-operation-parser.js +1 -2
  97. package/dist/cjs/parser/table-parser.js +4 -5
  98. package/dist/cjs/parser/top-parser.js +1 -2
  99. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  100. package/dist/cjs/parser/update-set-parser.js +2 -3
  101. package/dist/cjs/parser/value-parser.js +4 -5
  102. package/dist/cjs/parser/with-parser.js +1 -2
  103. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  104. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +26 -21
  105. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  106. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  107. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  108. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  109. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  110. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  111. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  114. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  115. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  116. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  117. package/dist/cjs/query-builder/delete-query-builder.d.ts +219 -43
  118. package/dist/cjs/query-builder/delete-query-builder.js +95 -31
  119. package/dist/cjs/query-builder/function-module.d.ts +40 -93
  120. package/dist/cjs/query-builder/function-module.js +1 -2
  121. package/dist/cjs/query-builder/insert-query-builder.d.ts +326 -67
  122. package/dist/cjs/query-builder/insert-query-builder.js +212 -61
  123. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  124. package/dist/cjs/query-builder/insert-result.js +10 -5
  125. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  126. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  127. package/dist/cjs/query-builder/merge-query-builder.d.ts +312 -10
  128. package/dist/cjs/query-builder/merge-query-builder.js +98 -7
  129. package/dist/cjs/query-builder/no-result-error.js +2 -2
  130. package/dist/cjs/query-builder/on-conflict-builder.d.ts +53 -20
  131. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  132. package/dist/cjs/query-builder/output-interface.d.ts +138 -0
  133. package/dist/cjs/query-builder/output-interface.js +2 -0
  134. package/dist/cjs/query-builder/returning-interface.d.ts +7 -5
  135. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  136. package/dist/cjs/query-builder/select-query-builder.d.ts +370 -73
  137. package/dist/cjs/query-builder/select-query-builder.js +14 -9
  138. package/dist/cjs/query-builder/update-query-builder.d.ts +225 -31
  139. package/dist/cjs/query-builder/update-query-builder.js +96 -17
  140. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  141. package/dist/cjs/query-builder/update-result.js +9 -0
  142. package/dist/cjs/query-builder/where-interface.d.ts +6 -2
  143. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  144. package/dist/cjs/query-compiler/default-query-compiler.js +45 -1
  145. package/dist/cjs/query-creator.d.ts +122 -21
  146. package/dist/cjs/query-creator.js +56 -3
  147. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  148. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  149. package/dist/cjs/raw-builder/sql.d.ts +31 -12
  150. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  151. package/dist/cjs/schema/alter-column-builder.js +20 -3
  152. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +44 -10
  153. package/dist/cjs/schema/alter-table-add-index-builder.js +27 -10
  154. package/dist/cjs/schema/alter-table-builder.js +1 -2
  155. package/dist/cjs/schema/column-definition-builder.d.ts +286 -24
  156. package/dist/cjs/schema/column-definition-builder.js +288 -24
  157. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  158. package/dist/cjs/schema/create-table-builder.js +86 -33
  159. package/dist/cjs/util/assert.js +2 -3
  160. package/dist/cjs/util/column-type.d.ts +5 -9
  161. package/dist/cjs/util/compilable.js +1 -2
  162. package/dist/cjs/util/json-object-args.js +1 -2
  163. package/dist/cjs/util/log-once.js +1 -2
  164. package/dist/cjs/util/object-utils.js +38 -26
  165. package/dist/cjs/util/performance-now.js +1 -2
  166. package/dist/cjs/util/prevent-await.js +1 -2
  167. package/dist/cjs/util/query-id.js +1 -2
  168. package/dist/cjs/util/random-string.js +1 -2
  169. package/dist/cjs/util/require-all-props.d.ts +4 -2
  170. package/dist/cjs/util/require-all-props.js +5 -4
  171. package/dist/cjs/util/stack-trace-utils.js +1 -2
  172. package/dist/cjs/util/streamable.d.ts +1 -1
  173. package/dist/cjs/util/type-utils.d.ts +4 -2
  174. package/dist/esm/dialect/dialect-adapter-base.d.ts +13 -3
  175. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  176. package/dist/esm/dialect/dialect-adapter.d.ts +16 -2
  177. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +12 -7
  178. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  181. package/dist/esm/dialect/mssql/mssql-driver.js +114 -48
  182. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  183. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  185. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  186. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  187. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  189. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  190. package/dist/esm/driver/database-connection.d.ts +3 -1
  191. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  192. package/dist/esm/driver/dummy-driver.js +13 -12
  193. package/dist/esm/dynamic/dynamic.d.ts +7 -7
  194. package/dist/esm/dynamic/dynamic.js +7 -7
  195. package/dist/esm/expression/expression-builder.d.ts +153 -62
  196. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  197. package/dist/esm/expression/expression.d.ts +40 -5
  198. package/dist/esm/helpers/mssql.d.ts +74 -14
  199. package/dist/esm/helpers/mssql.js +74 -14
  200. package/dist/esm/helpers/mysql.d.ts +17 -13
  201. package/dist/esm/helpers/mysql.js +17 -13
  202. package/dist/esm/helpers/postgres.d.ts +11 -8
  203. package/dist/esm/helpers/postgres.js +11 -8
  204. package/dist/esm/helpers/sqlite.d.ts +41 -16
  205. package/dist/esm/helpers/sqlite.js +41 -16
  206. package/dist/esm/index.d.ts +28 -21
  207. package/dist/esm/index.js +28 -21
  208. package/dist/esm/kysely.d.ts +100 -42
  209. package/dist/esm/kysely.js +61 -37
  210. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  211. package/dist/esm/migration/file-migration-provider.js +2 -2
  212. package/dist/esm/migration/migrator.d.ts +82 -14
  213. package/dist/esm/migration/migrator.js +82 -14
  214. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  215. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  216. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  217. package/dist/esm/operation-node/case-node.d.ts +1 -1
  218. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  219. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  220. package/dist/esm/operation-node/data-type-node.js +15 -1
  221. package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
  222. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  223. package/dist/esm/operation-node/having-node.d.ts +1 -1
  224. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  225. package/dist/esm/operation-node/merge-query-node.d.ts +3 -0
  226. package/dist/esm/operation-node/on-node.d.ts +1 -1
  227. package/dist/esm/operation-node/operation-node-transformer.d.ts +11 -3
  228. package/dist/esm/operation-node/operation-node-transformer.js +26 -3
  229. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  230. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  231. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  232. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  233. package/dist/esm/operation-node/operator-node.js +2 -0
  234. package/dist/esm/operation-node/output-node.d.ts +13 -0
  235. package/dist/esm/operation-node/output-node.js +24 -0
  236. package/dist/esm/operation-node/query-node.d.ts +15 -6
  237. package/dist/esm/operation-node/query-node.js +17 -0
  238. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  239. package/dist/esm/operation-node/select-query-node.js +6 -8
  240. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  241. package/dist/esm/operation-node/where-node.d.ts +1 -1
  242. package/dist/esm/parser/returning-parser.d.ts +4 -3
  243. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  244. package/dist/esm/plugin/camel-case/camel-case-plugin.js +26 -21
  245. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  246. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  247. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  248. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  249. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  250. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  251. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  252. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  253. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  254. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  255. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  256. package/dist/esm/query-builder/delete-query-builder.d.ts +219 -43
  257. package/dist/esm/query-builder/delete-query-builder.js +95 -31
  258. package/dist/esm/query-builder/function-module.d.ts +40 -93
  259. package/dist/esm/query-builder/insert-query-builder.d.ts +326 -67
  260. package/dist/esm/query-builder/insert-query-builder.js +212 -61
  261. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  262. package/dist/esm/query-builder/insert-result.js +10 -5
  263. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  264. package/dist/esm/query-builder/json-path-builder.js +8 -5
  265. package/dist/esm/query-builder/merge-query-builder.d.ts +312 -10
  266. package/dist/esm/query-builder/merge-query-builder.js +98 -7
  267. package/dist/esm/query-builder/on-conflict-builder.d.ts +53 -20
  268. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  269. package/dist/esm/query-builder/output-interface.d.ts +138 -0
  270. package/dist/esm/query-builder/output-interface.js +2 -0
  271. package/dist/esm/query-builder/returning-interface.d.ts +7 -5
  272. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  273. package/dist/esm/query-builder/select-query-builder.d.ts +370 -73
  274. package/dist/esm/query-builder/select-query-builder.js +13 -7
  275. package/dist/esm/query-builder/update-query-builder.d.ts +225 -31
  276. package/dist/esm/query-builder/update-query-builder.js +96 -17
  277. package/dist/esm/query-builder/update-result.d.ts +9 -0
  278. package/dist/esm/query-builder/update-result.js +9 -0
  279. package/dist/esm/query-builder/where-interface.d.ts +6 -2
  280. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  281. package/dist/esm/query-compiler/default-query-compiler.js +45 -1
  282. package/dist/esm/query-creator.d.ts +122 -21
  283. package/dist/esm/query-creator.js +56 -3
  284. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  285. package/dist/esm/raw-builder/sql.d.ts +31 -12
  286. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  287. package/dist/esm/schema/alter-column-builder.js +20 -3
  288. package/dist/esm/schema/alter-table-add-index-builder.d.ts +44 -10
  289. package/dist/esm/schema/alter-table-add-index-builder.js +27 -10
  290. package/dist/esm/schema/alter-table-builder.js +1 -2
  291. package/dist/esm/schema/column-definition-builder.d.ts +286 -24
  292. package/dist/esm/schema/column-definition-builder.js +288 -24
  293. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  294. package/dist/esm/schema/create-table-builder.js +86 -33
  295. package/dist/esm/util/column-type.d.ts +5 -9
  296. package/dist/esm/util/object-utils.js +18 -5
  297. package/dist/esm/util/require-all-props.d.ts +4 -2
  298. package/dist/esm/util/require-all-props.js +4 -2
  299. package/dist/esm/util/streamable.d.ts +1 -1
  300. package/dist/esm/util/type-utils.d.ts +4 -2
  301. package/package.json +30 -24
@@ -2,20 +2,68 @@ import { QueryResult } from '../../driver/database-connection.js';
2
2
  import { RootOperationNode } from '../../query-compiler/query-compiler.js';
3
3
  import { UnknownRow } from '../../util/type-utils.js';
4
4
  import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } from '../kysely-plugin.js';
5
+ export interface ParseJSONResultsPluginOptions {
6
+ /**
7
+ * When `'in-place'`, arrays' and objects' values are parsed in-place. This is
8
+ * the most time and space efficient option.
9
+ *
10
+ * This can result in runtime errors if some objects/arrays are readonly.
11
+ *
12
+ * When `'create'`, new arrays and objects are created to avoid such errors.
13
+ *
14
+ * Defaults to `'in-place'`.
15
+ */
16
+ objectStrategy?: ObjectStrategy;
17
+ }
18
+ type ObjectStrategy = 'in-place' | 'create';
5
19
  /**
6
20
  * Parses JSON strings in query results into JSON objects.
7
21
  *
8
22
  * This plugin can be useful with dialects that don't automatically parse
9
23
  * JSON into objects and arrays but return JSON strings instead.
10
24
  *
25
+ * To apply this plugin globally, pass an instance of it to the `plugins` option
26
+ * when creating a new `Kysely` instance:
27
+ *
11
28
  * ```ts
12
- * const db = new Kysely<DB>({
13
- * ...
14
- * plugins: [new ParseJSONResultsPlugin()]
29
+ * import * as Sqlite from 'better-sqlite3'
30
+ * import { Kysely, ParseJSONResultsPlugin, SqliteDialect } from 'kysely'
31
+ * import type { Database } from 'type-editor' // imaginary module
32
+ *
33
+ * const db = new Kysely<Database>({
34
+ * dialect: new SqliteDialect({
35
+ * database: new Sqlite(':memory:'),
36
+ * }),
37
+ * plugins: [new ParseJSONResultsPlugin()],
15
38
  * })
16
39
  * ```
40
+ *
41
+ * To apply this plugin to a single query:
42
+ *
43
+ * ```ts
44
+ * import { ParseJSONResultsPlugin } from 'kysely'
45
+ * import { jsonArrayFrom } from 'kysely/helpers/sqlite'
46
+ *
47
+ * const result = await db
48
+ * .selectFrom('person')
49
+ * .select((eb) => [
50
+ * 'id',
51
+ * 'first_name',
52
+ * 'last_name',
53
+ * jsonArrayFrom(
54
+ * eb.selectFrom('pet')
55
+ * .whereRef('owner_id', '=', 'person.id')
56
+ * .select(['name', 'species'])
57
+ * ).as('pets')
58
+ * ])
59
+ * .withPlugin(new ParseJSONResultsPlugin())
60
+ * .execute()
61
+ * ```
17
62
  */
18
63
  export declare class ParseJSONResultsPlugin implements KyselyPlugin {
64
+ #private;
65
+ readonly opt: ParseJSONResultsPluginOptions;
66
+ constructor(opt?: ParseJSONResultsPluginOptions);
19
67
  /**
20
68
  * This is called for each query before it is executed. You can modify the query by
21
69
  * transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
@@ -26,19 +74,41 @@ export declare class ParseJSONResultsPlugin implements KyselyPlugin {
26
74
  * can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
27
75
  *
28
76
  * ```ts
29
- * const plugin = {
30
- * data: new WeakMap<QueryId, SomeData>(),
77
+ * import type {
78
+ * KyselyPlugin,
79
+ * QueryResult,
80
+ * RootOperationNode,
81
+ * UnknownRow
82
+ * } from 'kysely'
83
+ *
84
+ * interface MyData {
85
+ * // ...
86
+ * }
87
+ * const data = new WeakMap<any, MyData>()
31
88
  *
89
+ * const plugin = {
32
90
  * transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
33
- * this.data.set(args.queryId, something)
91
+ * const something: MyData = {}
92
+ *
93
+ * // ...
94
+ *
95
+ * data.set(args.queryId, something)
96
+ *
97
+ * // ...
98
+ *
34
99
  * return args.node
35
100
  * },
36
101
  *
37
- * transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
38
- * const data = this.data.get(args.queryId)
102
+ * async transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>> {
103
+ * // ...
104
+ *
105
+ * const something = data.get(args.queryId)
106
+ *
107
+ * // ...
108
+ *
39
109
  * return args.result
40
110
  * }
41
- * }
111
+ * } satisfies KyselyPlugin
42
112
  * ```
43
113
  *
44
114
  * You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
@@ -53,3 +123,4 @@ export declare class ParseJSONResultsPlugin implements KyselyPlugin {
53
123
  */
54
124
  transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
55
125
  }
126
+ export {};
@@ -8,14 +8,51 @@ const object_utils_js_1 = require("../../util/object-utils.js");
8
8
  * This plugin can be useful with dialects that don't automatically parse
9
9
  * JSON into objects and arrays but return JSON strings instead.
10
10
  *
11
+ * To apply this plugin globally, pass an instance of it to the `plugins` option
12
+ * when creating a new `Kysely` instance:
13
+ *
11
14
  * ```ts
12
- * const db = new Kysely<DB>({
13
- * ...
14
- * plugins: [new ParseJSONResultsPlugin()]
15
+ * import * as Sqlite from 'better-sqlite3'
16
+ * import { Kysely, ParseJSONResultsPlugin, SqliteDialect } from 'kysely'
17
+ * import type { Database } from 'type-editor' // imaginary module
18
+ *
19
+ * const db = new Kysely<Database>({
20
+ * dialect: new SqliteDialect({
21
+ * database: new Sqlite(':memory:'),
22
+ * }),
23
+ * plugins: [new ParseJSONResultsPlugin()],
15
24
  * })
16
25
  * ```
26
+ *
27
+ * To apply this plugin to a single query:
28
+ *
29
+ * ```ts
30
+ * import { ParseJSONResultsPlugin } from 'kysely'
31
+ * import { jsonArrayFrom } from 'kysely/helpers/sqlite'
32
+ *
33
+ * const result = await db
34
+ * .selectFrom('person')
35
+ * .select((eb) => [
36
+ * 'id',
37
+ * 'first_name',
38
+ * 'last_name',
39
+ * jsonArrayFrom(
40
+ * eb.selectFrom('pet')
41
+ * .whereRef('owner_id', '=', 'person.id')
42
+ * .select(['name', 'species'])
43
+ * ).as('pets')
44
+ * ])
45
+ * .withPlugin(new ParseJSONResultsPlugin())
46
+ * .execute()
47
+ * ```
17
48
  */
18
49
  class ParseJSONResultsPlugin {
50
+ opt;
51
+ #objectStrategy;
52
+ constructor(opt = {}) {
53
+ this.opt = opt;
54
+ this.#objectStrategy = opt.objectStrategy || 'in-place';
55
+ }
19
56
  // noop
20
57
  transformQuery(args) {
21
58
  return args.node;
@@ -23,33 +60,34 @@ class ParseJSONResultsPlugin {
23
60
  async transformResult(args) {
24
61
  return {
25
62
  ...args.result,
26
- rows: parseArray(args.result.rows),
63
+ rows: parseArray(args.result.rows, this.#objectStrategy),
27
64
  };
28
65
  }
29
66
  }
30
67
  exports.ParseJSONResultsPlugin = ParseJSONResultsPlugin;
31
- function parseArray(arr) {
68
+ function parseArray(arr, objectStrategy) {
69
+ const target = objectStrategy === 'create' ? new Array(arr.length) : arr;
32
70
  for (let i = 0; i < arr.length; ++i) {
33
- arr[i] = parse(arr[i]);
71
+ target[i] = parse(arr[i], objectStrategy);
34
72
  }
35
- return arr;
73
+ return target;
36
74
  }
37
- function parse(obj) {
75
+ function parse(obj, objectStrategy) {
38
76
  if ((0, object_utils_js_1.isString)(obj)) {
39
77
  return parseString(obj);
40
78
  }
41
79
  if (Array.isArray(obj)) {
42
- return parseArray(obj);
80
+ return parseArray(obj, objectStrategy);
43
81
  }
44
82
  if ((0, object_utils_js_1.isPlainObject)(obj)) {
45
- return parseObject(obj);
83
+ return parseObject(obj, objectStrategy);
46
84
  }
47
85
  return obj;
48
86
  }
49
87
  function parseString(str) {
50
88
  if (maybeJson(str)) {
51
89
  try {
52
- return parse(JSON.parse(str));
90
+ return parse(JSON.parse(str), 'in-place');
53
91
  }
54
92
  catch (err) {
55
93
  // this catch block is intentionally empty.
@@ -60,9 +98,10 @@ function parseString(str) {
60
98
  function maybeJson(value) {
61
99
  return value.match(/^[\[\{]/) != null;
62
100
  }
63
- function parseObject(obj) {
101
+ function parseObject(obj, objectStrategy) {
102
+ const target = objectStrategy === 'create' ? {} : obj;
64
103
  for (const key in obj) {
65
- obj[key] = parse(obj[key]);
104
+ target[key] = parse(obj[key], objectStrategy);
66
105
  }
67
- return obj;
106
+ return target;
68
107
  }
@@ -15,19 +15,41 @@ export declare class WithSchemaPlugin implements KyselyPlugin {
15
15
  * can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
16
16
  *
17
17
  * ```ts
18
- * const plugin = {
19
- * data: new WeakMap<QueryId, SomeData>(),
18
+ * import type {
19
+ * KyselyPlugin,
20
+ * QueryResult,
21
+ * RootOperationNode,
22
+ * UnknownRow
23
+ * } from 'kysely'
24
+ *
25
+ * interface MyData {
26
+ * // ...
27
+ * }
28
+ * const data = new WeakMap<any, MyData>()
20
29
  *
30
+ * const plugin = {
21
31
  * transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
22
- * this.data.set(args.queryId, something)
32
+ * const something: MyData = {}
33
+ *
34
+ * // ...
35
+ *
36
+ * data.set(args.queryId, something)
37
+ *
38
+ * // ...
39
+ *
23
40
  * return args.node
24
41
  * },
25
42
  *
26
- * transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
27
- * const data = this.data.get(args.queryId)
43
+ * async transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>> {
44
+ * // ...
45
+ *
46
+ * const something = data.get(args.queryId)
47
+ *
48
+ * // ...
49
+ *
28
50
  * return args.result
29
51
  * }
30
- * }
52
+ * } satisfies KyselyPlugin
31
53
  * ```
32
54
  *
33
55
  * You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
@@ -2,10 +2,12 @@ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { OverBuilder } from './over-builder.js';
4
4
  import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
5
- import { ReferenceExpression } from '../parser/reference-parser.js';
5
+ import { ReferenceExpression, StringReference } from '../parser/reference-parser.js';
6
6
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
7
7
  import { SqlBool } from '../util/type-utils.js';
8
8
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
9
+ import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
10
+ import { OrderByDirectionExpression } from '../parser/order-by-parser.js';
9
11
  export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements AliasableExpression<O> {
10
12
  #private;
11
13
  constructor(props: AggregateFunctionBuilderProps);
@@ -14,11 +16,19 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
14
16
  * All expressions need to have this getter for complicated type-related reasons.
15
17
  * Simply add this getter for your expression and always return `undefined` from it:
16
18
  *
19
+ * ### Examples
20
+ *
17
21
  * ```ts
22
+ * import { type Expression, type OperationNode, sql } from 'kysely'
23
+ *
18
24
  * class SomeExpression<T> implements Expression<T> {
19
25
  * get expressionType(): T | undefined {
20
26
  * return undefined
21
27
  * }
28
+ *
29
+ * toOperationNode(): OperationNode {
30
+ * return sql`some sql here`.toOperationNode()
31
+ * }
22
32
  * }
23
33
  * ```
24
34
  *
@@ -75,6 +85,30 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
75
85
  * ```
76
86
  */
77
87
  distinct(): AggregateFunctionBuilder<DB, TB, O>;
88
+ /**
89
+ * Adds an `order by` clause inside the aggregate function.
90
+ *
91
+ * ### Examples
92
+ *
93
+ * ```ts
94
+ * const result = await db
95
+ * .selectFrom('person')
96
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
97
+ * .select((eb) =>
98
+ * eb.fn.jsonAgg('pet').orderBy('pet.name').as('person_pets')
99
+ * )
100
+ * .executeTakeFirstOrThrow()
101
+ * ```
102
+ *
103
+ * The generated SQL (PostgreSQL):
104
+ *
105
+ * ```sql
106
+ * select json_agg("pet" order by "pet"."name") as "person_pets"
107
+ * from "person"
108
+ * inner join "pet" ON "pet"."owner_id" = "person"."id"
109
+ * ```
110
+ */
111
+ orderBy<OE extends StringReference<DB, TB> | DynamicReferenceBuilder<any>>(orderBy: OE, direction?: OrderByDirectionExpression): AggregateFunctionBuilder<DB, TB, O>;
78
112
  /**
79
113
  * Adds a `filter` clause with a nested `where` clause after the function.
80
114
  *
@@ -219,11 +253,19 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
219
253
  /**
220
254
  * Creates the OperationNode that describes how to compile this expression into SQL.
221
255
  *
256
+ * ### Examples
257
+ *
222
258
  * If you are creating a custom expression, it's often easiest to use the {@link sql}
223
259
  * template tag to build the node:
224
260
  *
225
261
  * ```ts
262
+ * import { type Expression, type OperationNode, sql } from 'kysely'
263
+ *
226
264
  * class SomeExpression<T> implements Expression<T> {
265
+ * get expressionType(): T | undefined {
266
+ * return undefined
267
+ * }
268
+ *
227
269
  * toOperationNode(): OperationNode {
228
270
  * return sql`some sql here`.toOperationNode()
229
271
  * }
@@ -8,6 +8,7 @@ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
8
8
  const prevent_await_js_1 = require("../util/prevent-await.js");
9
9
  const parse_utils_js_1 = require("../parser/parse-utils.js");
10
10
  const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
11
+ const order_by_parser_js_1 = require("../parser/order-by-parser.js");
11
12
  class AggregateFunctionBuilder {
12
13
  #props;
13
14
  constructor(props) {
@@ -72,6 +73,35 @@ class AggregateFunctionBuilder {
72
73
  aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
73
74
  });
74
75
  }
76
+ /**
77
+ * Adds an `order by` clause inside the aggregate function.
78
+ *
79
+ * ### Examples
80
+ *
81
+ * ```ts
82
+ * const result = await db
83
+ * .selectFrom('person')
84
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
85
+ * .select((eb) =>
86
+ * eb.fn.jsonAgg('pet').orderBy('pet.name').as('person_pets')
87
+ * )
88
+ * .executeTakeFirstOrThrow()
89
+ * ```
90
+ *
91
+ * The generated SQL (PostgreSQL):
92
+ *
93
+ * ```sql
94
+ * select json_agg("pet" order by "pet"."name") as "person_pets"
95
+ * from "person"
96
+ * inner join "pet" ON "pet"."owner_id" = "person"."id"
97
+ * ```
98
+ */
99
+ orderBy(orderBy, direction) {
100
+ return new AggregateFunctionBuilder({
101
+ ...this.#props,
102
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, (0, order_by_parser_js_1.parseOrderBy)([orderBy, direction])),
103
+ });
104
+ }
75
105
  filterWhere(...args) {
76
106
  return new AggregateFunctionBuilder({
77
107
  ...this.#props,