@casekit/orm 0.0.1-alpha.1 → 0.0.1-alpha.11

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 (331) hide show
  1. package/.github/workflows/ci.yml +2 -0
  2. package/lib/migrate/commands/implode.js +1 -1
  3. package/lib/migrate/commands/implode.js.map +1 -1
  4. package/lib/migrate/sql/createTableSql.test.js +1 -0
  5. package/lib/migrate/sql/createTableSql.test.js.map +1 -1
  6. package/lib/orm.d.ts +2 -2
  7. package/lib/orm.d.ts.map +1 -1
  8. package/lib/orm.js +8 -0
  9. package/lib/orm.js.map +1 -1
  10. package/lib/queries/clauses/IncludeClause.d.ts +3 -3
  11. package/lib/queries/clauses/IncludeClause.d.ts.map +1 -1
  12. package/lib/queries/clauses/ReturningClause.d.ts +2 -3
  13. package/lib/queries/clauses/ReturningClause.d.ts.map +1 -1
  14. package/lib/queries/clauses/SelectClause.d.ts +2 -3
  15. package/lib/queries/clauses/SelectClause.d.ts.map +1 -1
  16. package/lib/queries/clauses/WhereClause.d.ts +1 -1
  17. package/lib/queries/clauses/WhereClause.d.ts.map +1 -1
  18. package/lib/queries/clauses/helpers/OptionalColumn.d.ts +5 -5
  19. package/lib/queries/clauses/helpers/OptionalColumn.d.ts.map +1 -1
  20. package/lib/queries/clauses/helpers/OptionalParams.d.ts +2 -2
  21. package/lib/queries/clauses/helpers/OptionalParams.d.ts.map +1 -1
  22. package/lib/queries/clauses/helpers/RequiredColumn.d.ts +2 -3
  23. package/lib/queries/clauses/helpers/RequiredColumn.d.ts.map +1 -1
  24. package/lib/queries/clauses/helpers/RequiredParams.d.ts +2 -2
  25. package/lib/queries/clauses/helpers/RequiredParams.d.ts.map +1 -1
  26. package/lib/queries/clauses/where/buildWhereClauses.d.ts +1 -1
  27. package/lib/queries/clauses/where/buildWhereClauses.d.ts.map +1 -1
  28. package/lib/queries/clauses/where/buildWhereClauses.js.map +1 -1
  29. package/lib/queries/clauses/where/buildWhereClauses.test.js +1 -1
  30. package/lib/queries/clauses/where/buildWhereClauses.test.js.map +1 -1
  31. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts +1 -1
  32. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts.map +1 -1
  33. package/lib/queries/count/buildCount.d.ts.map +1 -1
  34. package/lib/queries/count/buildCount.js +33 -29
  35. package/lib/queries/count/buildCount.js.map +1 -1
  36. package/lib/queries/count/countToSql.d.ts.map +1 -1
  37. package/lib/queries/count/countToSql.js +12 -17
  38. package/lib/queries/count/countToSql.js.map +1 -1
  39. package/lib/queries/count/types/CountBuilder.d.ts +12 -4
  40. package/lib/queries/count/types/CountBuilder.d.ts.map +1 -1
  41. package/lib/queries/count.d.ts.map +1 -1
  42. package/lib/queries/count.js +3 -1
  43. package/lib/queries/count.js.map +1 -1
  44. package/lib/queries/create/buildCreate.d.ts +4 -1
  45. package/lib/queries/create/buildCreate.d.ts.map +1 -1
  46. package/lib/queries/create/buildCreate.js +5 -2
  47. package/lib/queries/create/buildCreate.js.map +1 -1
  48. package/lib/queries/create/createResultSchema.d.ts.map +1 -1
  49. package/lib/queries/create/createResultSchema.js +3 -1
  50. package/lib/queries/create/createResultSchema.js.map +1 -1
  51. package/lib/queries/create/createToSql.d.ts.map +1 -1
  52. package/lib/queries/create/createToSql.js +5 -2
  53. package/lib/queries/create/createToSql.js.map +1 -1
  54. package/lib/queries/create/tests/createMany.varied-keys.test.d.ts +2 -0
  55. package/lib/queries/create/tests/createMany.varied-keys.test.d.ts.map +1 -0
  56. package/lib/queries/create/tests/createMany.varied-keys.test.js +24 -0
  57. package/lib/queries/create/tests/createMany.varied-keys.test.js.map +1 -0
  58. package/lib/queries/create/tests/createOne.test.js +53 -0
  59. package/lib/queries/create/tests/createOne.test.js.map +1 -1
  60. package/lib/queries/create/types/BaseCreateManyParams.d.ts +3 -0
  61. package/lib/queries/create/types/BaseCreateManyParams.d.ts.map +1 -1
  62. package/lib/queries/create/types/BaseCreateOneParams.d.ts +3 -0
  63. package/lib/queries/create/types/BaseCreateOneParams.d.ts.map +1 -1
  64. package/lib/queries/create/types/CreateManyParams.d.ts +4 -1
  65. package/lib/queries/create/types/CreateManyParams.d.ts.map +1 -1
  66. package/lib/queries/create/types/CreateManyResult.d.ts +1 -1
  67. package/lib/queries/create/types/CreateManyResult.d.ts.map +1 -1
  68. package/lib/queries/create/types/CreateOneParams.d.ts +4 -1
  69. package/lib/queries/create/types/CreateOneParams.d.ts.map +1 -1
  70. package/lib/queries/create/types/CreateOneResult.d.ts +1 -1
  71. package/lib/queries/create/types/CreateOneResult.d.ts.map +1 -1
  72. package/lib/queries/createMany.d.ts.map +1 -1
  73. package/lib/queries/createMany.js +3 -1
  74. package/lib/queries/createMany.js.map +1 -1
  75. package/lib/queries/createOne.d.ts.map +1 -1
  76. package/lib/queries/createOne.js +6 -0
  77. package/lib/queries/createOne.js.map +1 -1
  78. package/lib/queries/delete/buildDelete.d.ts +1 -1
  79. package/lib/queries/delete/buildDelete.d.ts.map +1 -1
  80. package/lib/queries/delete/buildDelete.js +1 -1
  81. package/lib/queries/delete/buildDelete.js.map +1 -1
  82. package/lib/queries/delete/deleteResultSchema.d.ts.map +1 -1
  83. package/lib/queries/delete/deleteResultSchema.js +3 -1
  84. package/lib/queries/delete/deleteResultSchema.js.map +1 -1
  85. package/lib/queries/delete/deleteToSql.js +1 -1
  86. package/lib/queries/delete/deleteToSql.js.map +1 -1
  87. package/lib/queries/delete/types/DeleteManyResult.d.ts +1 -1
  88. package/lib/queries/delete/types/DeleteManyResult.d.ts.map +1 -1
  89. package/lib/queries/delete/types/DeleteOneResult.d.ts +1 -1
  90. package/lib/queries/delete/types/DeleteOneResult.d.ts.map +1 -1
  91. package/lib/queries/delete/types/DeleteParams.d.ts +1 -1
  92. package/lib/queries/delete/types/DeleteParams.d.ts.map +1 -1
  93. package/lib/queries/deleteMany.d.ts.map +1 -1
  94. package/lib/queries/deleteMany.js +3 -1
  95. package/lib/queries/deleteMany.js.map +1 -1
  96. package/lib/queries/find/buildFind.d.ts.map +1 -1
  97. package/lib/queries/find/buildFind.js +35 -30
  98. package/lib/queries/find/buildFind.js.map +1 -1
  99. package/lib/queries/find/findResultSchema.d.ts.map +1 -1
  100. package/lib/queries/find/findResultSchema.js +9 -2
  101. package/lib/queries/find/findResultSchema.js.map +1 -1
  102. package/lib/queries/find/findToSql.d.ts.map +1 -1
  103. package/lib/queries/find/findToSql.js +15 -17
  104. package/lib/queries/find/findToSql.js.map +1 -1
  105. package/lib/queries/find/getIncludedManyToManyRelations.d.ts +17 -0
  106. package/lib/queries/find/getIncludedManyToManyRelations.d.ts.map +1 -0
  107. package/lib/queries/find/getIncludedManyToManyRelations.js +20 -0
  108. package/lib/queries/find/getIncludedManyToManyRelations.js.map +1 -0
  109. package/lib/queries/find/getIncludedOneToManyRelations.d.ts +12 -0
  110. package/lib/queries/find/getIncludedOneToManyRelations.d.ts.map +1 -0
  111. package/lib/queries/find/getIncludedOneToManyRelations.js +20 -0
  112. package/lib/queries/find/getIncludedOneToManyRelations.js.map +1 -0
  113. package/lib/queries/find/tests/findMany.include.test.d.ts +2 -0
  114. package/lib/queries/find/tests/findMany.include.test.d.ts.map +1 -0
  115. package/lib/queries/find/tests/findMany.include.test.js +93 -0
  116. package/lib/queries/find/tests/findMany.include.test.js.map +1 -0
  117. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts +2 -0
  118. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts.map +1 -0
  119. package/lib/queries/find/tests/findMany.nullable-relations.test.js +118 -0
  120. package/lib/queries/find/tests/findMany.nullable-relations.test.js.map +1 -0
  121. package/lib/queries/find/tests/middleware.find.where.test.js +12 -12
  122. package/lib/queries/find/tests/middleware.find.where.test.js.map +1 -1
  123. package/lib/queries/find/types/BaseFindParams.d.ts +2 -1
  124. package/lib/queries/find/types/BaseFindParams.d.ts.map +1 -1
  125. package/lib/queries/find/types/FindBuilder.d.ts +13 -4
  126. package/lib/queries/find/types/FindBuilder.d.ts.map +1 -1
  127. package/lib/queries/find/types/FindManyParams.d.ts +3 -2
  128. package/lib/queries/find/types/FindManyParams.d.ts.map +1 -1
  129. package/lib/queries/find/types/FindOneParams.d.ts +2 -1
  130. package/lib/queries/find/types/FindOneParams.d.ts.map +1 -1
  131. package/lib/queries/findMany.d.ts.map +1 -1
  132. package/lib/queries/findMany.js +59 -36
  133. package/lib/queries/findMany.js.map +1 -1
  134. package/lib/queries/middleware/Middleware.d.ts +1 -1
  135. package/lib/queries/middleware/Middleware.d.ts.map +1 -1
  136. package/lib/queries/update/buildUpdate.d.ts +2 -2
  137. package/lib/queries/update/buildUpdate.d.ts.map +1 -1
  138. package/lib/queries/update/buildUpdate.js +8 -8
  139. package/lib/queries/update/buildUpdate.js.map +1 -1
  140. package/lib/queries/update/tests/updateOne.test.js +3 -3
  141. package/lib/queries/update/tests/updateOne.test.js.map +1 -1
  142. package/lib/queries/update/types/BaseUpdateParams.d.ts +1 -1
  143. package/lib/queries/update/types/BaseUpdateParams.d.ts.map +1 -1
  144. package/lib/queries/update/types/UpdateManyResult.d.ts +1 -1
  145. package/lib/queries/update/types/UpdateManyResult.d.ts.map +1 -1
  146. package/lib/queries/update/types/UpdateOneResult.d.ts +1 -1
  147. package/lib/queries/update/types/UpdateOneResult.d.ts.map +1 -1
  148. package/lib/queries/update/types/UpdateParams.d.ts +2 -2
  149. package/lib/queries/update/types/UpdateParams.d.ts.map +1 -1
  150. package/lib/queries/update/types/UpdateValues.d.ts +1 -1
  151. package/lib/queries/update/types/UpdateValues.d.ts.map +1 -1
  152. package/lib/queries/update/updateResultSchema.d.ts.map +1 -1
  153. package/lib/queries/update/updateResultSchema.js +3 -1
  154. package/lib/queries/update/updateResultSchema.js.map +1 -1
  155. package/lib/queries/update/updateToSql.js +3 -3
  156. package/lib/queries/update/updateToSql.js.map +1 -1
  157. package/lib/queries/updateMany.d.ts.map +1 -1
  158. package/lib/queries/updateMany.js +3 -1
  159. package/lib/queries/updateMany.js.map +1 -1
  160. package/lib/queries/util/rowToObject.d.ts.map +1 -1
  161. package/lib/queries/util/rowToObject.js +1 -1
  162. package/lib/queries/util/rowToObject.js.map +1 -1
  163. package/lib/schema/populate/composeMiddleware.js +1 -1
  164. package/lib/schema/populate/composeMiddleware.js.map +1 -1
  165. package/lib/schema/populate/populateModel.d.ts.map +1 -1
  166. package/lib/schema/populate/populateModel.js +1 -0
  167. package/lib/schema/populate/populateModel.js.map +1 -1
  168. package/lib/schema/types/base/BaseColumn.d.ts +1 -0
  169. package/lib/schema/types/base/BaseColumn.d.ts.map +1 -1
  170. package/lib/schema/types/base/BaseRelation.d.ts +1 -0
  171. package/lib/schema/types/base/BaseRelation.d.ts.map +1 -1
  172. package/lib/schema/types/helpers/ColumnName.d.ts +2 -3
  173. package/lib/schema/types/helpers/ColumnName.d.ts.map +1 -1
  174. package/lib/schema/types/helpers/ColumnType.d.ts +2 -2
  175. package/lib/schema/types/helpers/ColumnType.d.ts.map +1 -1
  176. package/lib/schema/types/helpers/Columns.d.ts +2 -3
  177. package/lib/schema/types/helpers/Columns.d.ts.map +1 -1
  178. package/lib/schema/types/helpers/HasDefault.d.ts +2 -3
  179. package/lib/schema/types/helpers/HasDefault.d.ts.map +1 -1
  180. package/lib/schema/types/helpers/IsNullable.d.ts +2 -3
  181. package/lib/schema/types/helpers/IsNullable.d.ts.map +1 -1
  182. package/lib/schema/types/helpers/IsProvided.d.ts +5 -0
  183. package/lib/schema/types/helpers/IsProvided.d.ts.map +1 -0
  184. package/lib/schema/types/helpers/IsProvided.js +2 -0
  185. package/lib/schema/types/helpers/IsProvided.js.map +1 -0
  186. package/lib/schema/types/helpers/IsSerial.d.ts +2 -3
  187. package/lib/schema/types/helpers/IsSerial.d.ts.map +1 -1
  188. package/lib/schema/types/loose/LooseColumnDefinition.d.ts +5 -0
  189. package/lib/schema/types/loose/LooseColumnDefinition.d.ts.map +1 -1
  190. package/lib/schema/types/loose/LooseRelationDefinition.d.ts +1 -0
  191. package/lib/schema/types/loose/LooseRelationDefinition.d.ts.map +1 -1
  192. package/lib/schema/types/loose/LooseRelationsDefinition.d.ts +3 -1
  193. package/lib/schema/types/loose/LooseRelationsDefinition.d.ts.map +1 -1
  194. package/lib/schema/types/loose/LooseRelationsDefinitions.d.ts +1 -1
  195. package/lib/schema/types/loose/LooseRelationsDefinitions.d.ts.map +1 -1
  196. package/lib/schema/types/relations/ManyToManyRelation.d.ts +2 -2
  197. package/lib/schema/types/relations/ManyToManyRelation.d.ts.map +1 -1
  198. package/lib/schema/types/relations/ManyToOneRelation.d.ts +1 -1
  199. package/lib/schema/types/relations/ManyToOneRelation.d.ts.map +1 -1
  200. package/lib/schema/types/relations/OneToManyRelation.d.ts +2 -1
  201. package/lib/schema/types/relations/OneToManyRelation.d.ts.map +1 -1
  202. package/lib/schema/types/strict/ColumnDefinition.d.ts +5 -0
  203. package/lib/schema/types/strict/ColumnDefinition.d.ts.map +1 -1
  204. package/lib/test/db/index.d.ts +40 -0
  205. package/lib/test/db/index.d.ts.map +1 -1
  206. package/lib/test/db/models/post.model.d.ts +10 -1
  207. package/lib/test/db/models/post.model.d.ts.map +1 -1
  208. package/lib/test/db/models/post.model.js +6 -0
  209. package/lib/test/db/models/post.model.js.map +1 -1
  210. package/lib/test/db/models/post.relations.d.ts +6 -0
  211. package/lib/test/db/models/post.relations.d.ts.map +1 -1
  212. package/lib/test/db/models/post.relations.js +6 -0
  213. package/lib/test/db/models/post.relations.js.map +1 -1
  214. package/lib/test/db/models/tenant.model.d.ts +2 -2
  215. package/lib/test/db/models/tenantUser.model.d.ts +2 -2
  216. package/lib/test/db/models/user.model.d.ts +11 -2
  217. package/lib/test/db/models/user.model.d.ts.map +1 -1
  218. package/lib/test/db/models/user.model.js +6 -0
  219. package/lib/test/db/models/user.model.js.map +1 -1
  220. package/lib/test/db/models/user.relations.d.ts +16 -0
  221. package/lib/test/db/models/user.relations.d.ts.map +1 -1
  222. package/lib/test/db/models/user.relations.js +16 -0
  223. package/lib/test/db/models/user.relations.js.map +1 -1
  224. package/lib/test/db/models.d.ts +18 -0
  225. package/lib/test/db/models.d.ts.map +1 -1
  226. package/lib/test/db/relations.d.ts +22 -0
  227. package/lib/test/db/relations.d.ts.map +1 -1
  228. package/lib/test/gen/column.d.ts +1 -0
  229. package/lib/test/gen/column.d.ts.map +1 -1
  230. package/lib/test/seed/index.d.ts +40 -0
  231. package/lib/test/seed/index.d.ts.map +1 -1
  232. package/lib/types/ModelType.d.ts +10 -3
  233. package/lib/types/ModelType.d.ts.map +1 -1
  234. package/package.json +2 -2
  235. package/src/migrate/commands/implode.ts +1 -1
  236. package/src/migrate/sql/createTableSql.test.ts +1 -0
  237. package/src/orm.ts +10 -2
  238. package/src/queries/clauses/IncludeClause.ts +19 -3
  239. package/src/queries/clauses/ReturningClause.ts +4 -6
  240. package/src/queries/clauses/SelectClause.ts +4 -6
  241. package/src/queries/clauses/WhereClause.ts +1 -1
  242. package/src/queries/clauses/helpers/OptionalColumn.ts +10 -11
  243. package/src/queries/clauses/helpers/OptionalParams.ts +2 -2
  244. package/src/queries/clauses/helpers/RequiredColumn.ts +5 -6
  245. package/src/queries/clauses/helpers/RequiredParams.ts +2 -2
  246. package/src/queries/clauses/where/buildWhereClauses.test.ts +1 -1
  247. package/src/queries/clauses/where/buildWhereClauses.ts +1 -1
  248. package/src/queries/clauses/where/types/WhereClauseValue.ts +1 -1
  249. package/src/queries/count/buildCount.ts +39 -33
  250. package/src/queries/count/countToSql.ts +27 -32
  251. package/src/queries/count/types/CountBuilder.ts +23 -6
  252. package/src/queries/count.ts +3 -1
  253. package/src/queries/create/buildCreate.ts +8 -3
  254. package/src/queries/create/createResultSchema.ts +3 -1
  255. package/src/queries/create/createToSql.ts +10 -2
  256. package/src/queries/create/tests/createMany.varied-keys.test.ts +28 -0
  257. package/src/queries/create/tests/createOne.test.ts +70 -0
  258. package/src/queries/create/types/BaseCreateManyParams.ts +1 -0
  259. package/src/queries/create/types/BaseCreateOneParams.ts +1 -0
  260. package/src/queries/create/types/CreateManyParams.ts +4 -1
  261. package/src/queries/create/types/CreateManyResult.ts +1 -1
  262. package/src/queries/create/types/CreateOneParams.ts +4 -1
  263. package/src/queries/create/types/CreateOneResult.ts +1 -1
  264. package/src/queries/createMany.ts +3 -1
  265. package/src/queries/createOne.ts +9 -0
  266. package/src/queries/delete/buildDelete.ts +2 -2
  267. package/src/queries/delete/deleteResultSchema.ts +3 -1
  268. package/src/queries/delete/deleteToSql.ts +1 -1
  269. package/src/queries/delete/types/DeleteManyResult.ts +1 -1
  270. package/src/queries/delete/types/DeleteOneResult.ts +1 -1
  271. package/src/queries/delete/types/DeleteParams.ts +1 -1
  272. package/src/queries/deleteMany.ts +3 -1
  273. package/src/queries/find/buildFind.ts +41 -34
  274. package/src/queries/find/findResultSchema.ts +9 -2
  275. package/src/queries/find/findToSql.ts +31 -32
  276. package/src/queries/find/getIncludedManyToManyRelations.ts +49 -0
  277. package/src/queries/find/getIncludedOneToManyRelations.ts +44 -0
  278. package/src/queries/find/tests/findMany.include.test.ts +107 -0
  279. package/src/queries/find/tests/findMany.nullable-relations.test.ts +127 -0
  280. package/src/queries/find/tests/middleware.find.where.test.ts +12 -12
  281. package/src/queries/find/types/BaseFindParams.ts +2 -1
  282. package/src/queries/find/types/FindBuilder.ts +25 -6
  283. package/src/queries/find/types/FindManyParams.ts +3 -2
  284. package/src/queries/find/types/FindOneParams.ts +2 -1
  285. package/src/queries/findMany.ts +87 -66
  286. package/src/queries/middleware/Middleware.ts +1 -1
  287. package/src/queries/update/buildUpdate.ts +10 -10
  288. package/src/queries/update/tests/updateOne.test.ts +3 -3
  289. package/src/queries/update/types/BaseUpdateParams.ts +1 -1
  290. package/src/queries/update/types/UpdateManyResult.ts +1 -1
  291. package/src/queries/update/types/UpdateOneResult.ts +1 -1
  292. package/src/queries/update/types/UpdateParams.ts +2 -2
  293. package/src/queries/update/types/UpdateValues.ts +1 -1
  294. package/src/queries/update/updateResultSchema.ts +3 -1
  295. package/src/queries/update/updateToSql.ts +3 -3
  296. package/src/queries/updateMany.ts +3 -1
  297. package/src/queries/util/rowToObject.ts +5 -1
  298. package/src/schema/populate/composeMiddleware.ts +1 -1
  299. package/src/schema/populate/populateModel.ts +1 -0
  300. package/src/schema/types/base/BaseColumn.ts +1 -0
  301. package/src/schema/types/base/BaseRelation.ts +1 -0
  302. package/src/schema/types/helpers/ColumnName.ts +5 -6
  303. package/src/schema/types/helpers/ColumnType.ts +2 -2
  304. package/src/schema/types/helpers/Columns.ts +2 -6
  305. package/src/schema/types/helpers/HasDefault.ts +5 -7
  306. package/src/schema/types/helpers/IsNullable.ts +4 -6
  307. package/src/schema/types/helpers/IsProvided.ts +8 -0
  308. package/src/schema/types/helpers/IsSerial.ts +4 -6
  309. package/src/schema/types/loose/LooseColumnDefinition.ts +6 -0
  310. package/src/schema/types/loose/LooseRelationDefinition.ts +1 -1
  311. package/src/schema/types/loose/LooseRelationsDefinition.ts +6 -1
  312. package/src/schema/types/loose/LooseRelationsDefinitions.ts +1 -1
  313. package/src/schema/types/relations/ManyToManyRelation.ts +2 -2
  314. package/src/schema/types/relations/ManyToOneRelation.ts +1 -1
  315. package/src/schema/types/relations/OneToManyRelation.ts +2 -1
  316. package/src/schema/types/strict/ColumnDefinition.ts +6 -0
  317. package/src/test/db/models/foo.relations.ts +1 -1
  318. package/src/test/db/models/post.model.ts +7 -1
  319. package/src/test/db/models/post.relations.ts +7 -1
  320. package/src/test/db/models/tenant.model.ts +1 -1
  321. package/src/test/db/models/tenant.relations.ts +1 -1
  322. package/src/test/db/models/tenantUser.model.ts +1 -1
  323. package/src/test/db/models/tenantUser.relations.ts +1 -1
  324. package/src/test/db/models/user.model.ts +7 -1
  325. package/src/test/db/models/user.relations.ts +17 -1
  326. package/src/types/ModelType.ts +16 -3
  327. package/lib/queries/clauses/helpers/ModelValues.d.ts +0 -8
  328. package/lib/queries/clauses/helpers/ModelValues.d.ts.map +0 -1
  329. package/lib/queries/clauses/helpers/ModelValues.js +0 -2
  330. package/lib/queries/clauses/helpers/ModelValues.js.map +0 -1
  331. package/src/queries/clauses/helpers/ModelValues.ts +0 -9
@@ -14,7 +14,9 @@ export const deleteResultSchema = (
14
14
 
15
15
  params.returning?.forEach((s) => {
16
16
  const col = config.models[m].columns[s];
17
- obj[s] = col.nullable ? col.zodSchema.nullable() : col.zodSchema;
17
+ obj[s] = col.nullable
18
+ ? col.zodSchema.nullish().transform((x) => x ?? null)
19
+ : col.zodSchema;
18
20
  });
19
21
 
20
22
  return z.object(obj);
@@ -16,7 +16,7 @@ export const deleteToSql = (
16
16
 
17
17
  const frag = sql`DELETE FROM %I.%I AS %I`.withIdentifiers(
18
18
  table.schema,
19
- table.name,
19
+ table.table,
20
20
  table.alias,
21
21
  );
22
22
 
@@ -9,7 +9,7 @@ export type DeleteManyResult<
9
9
  M extends ModelName<Models>,
10
10
  P extends DeleteParams<Models, M>,
11
11
  > =
12
- P["returning"] extends ReturningClause<Models, M>
12
+ P["returning"] extends ReturningClause<Models[M]>
13
13
  ? Readonly<{
14
14
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
15
15
  }>[]
@@ -9,7 +9,7 @@ export type DeleteOneResult<
9
9
  M extends ModelName<Models>,
10
10
  P extends DeleteParams<Models, M>,
11
11
  > =
12
- P["returning"] extends ReturningClause<Models, M>
12
+ P["returning"] extends ReturningClause<Models[M]>
13
13
  ? Readonly<{
14
14
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
15
15
  }>
@@ -8,5 +8,5 @@ export type DeleteParams<
8
8
  M extends ModelName<Models>,
9
9
  > = {
10
10
  where: WhereClause<Models, M>;
11
- returning?: ReturningClause<Models, M>;
11
+ returning?: ReturningClause<Models[M]>;
12
12
  };
@@ -21,8 +21,10 @@ export const deleteMany = async (
21
21
  values: statement.values,
22
22
  });
23
23
 
24
- if (process.env.NODE_ENV === "test" && !process.env.CI)
24
+ if (process.env.ORM_VERBOSE_LOGGING) {
25
25
  console.log(statement.text);
26
+ console.log(statement.values);
27
+ }
26
28
 
27
29
  const result = await conn.query(statement);
28
30
  return params.returning
@@ -14,27 +14,30 @@ export const buildFind = (
14
14
  _tableIndex = 0,
15
15
  ): FindBuilder => {
16
16
  const builder: FindBuilder = {
17
- tableIndex: _tableIndex,
18
17
  columns: [],
19
- tables: [],
18
+ table: {
19
+ table: config.models[m]["table"],
20
+ model: m,
21
+ schema: config.models[m]["schema"],
22
+ alias: tableAlias(_tableIndex++),
23
+ where: config.middleware.find?.where
24
+ ? config.middleware.find.where(query.where, {
25
+ config,
26
+ model: m,
27
+ })
28
+ : query.where,
29
+ joins: [],
30
+ },
20
31
  orderBy: [],
32
+ for: query.for,
33
+ tableIndex: _tableIndex,
21
34
  };
22
35
 
23
36
  const model = config.models[m];
24
37
 
25
- const alias = tableAlias(builder.tableIndex++);
38
+ const alias = builder.table.alias;
26
39
  let colIndex = 0;
27
40
 
28
- builder.tables.push({
29
- name: config.models[m]["table"],
30
- model: m,
31
- schema: config.models[m]["schema"],
32
- alias: alias,
33
- where: config.middleware.find?.where
34
- ? config.middleware.find.where(query.where, { config, model: m })
35
- : query.where,
36
- });
37
-
38
41
  // make sure we always select the model's primary key,
39
42
  // and if necessary the foreign key for a lateral join
40
43
  // - we'll strip them out later
@@ -64,34 +67,38 @@ export const buildFind = (
64
67
  [...path, r],
65
68
  builder.tableIndex++,
66
69
  );
67
- const [joinedTable, ...otherTables] = joinBuilder.tables;
68
- builder.tables.push({
69
- ...joinedTable,
70
- joins: [
71
- ...(joinedTable.joins ?? []),
72
- {
73
- from: {
74
- table: alias,
75
- columns: ensureArray(relation.foreignKey).map(
76
- (c) => model.columns[c].name,
77
- ),
78
- },
79
- to: {
80
- table: joinedTable.alias,
81
- columns: joinedModel.primaryKey.map(
82
- (c) => joinedModel.columns[c].name,
83
- ),
84
- },
70
+ const joinedTable = joinBuilder.table;
71
+ builder.table.joins.push(
72
+ {
73
+ from: {
74
+ schema: config.models[m].schema,
75
+ table: config.models[m].table,
76
+ alias,
77
+ model: m,
78
+ columns: ensureArray(relation.foreignKey).map(
79
+ (c) => model.columns[c].name,
80
+ ),
85
81
  },
86
- ],
87
- });
82
+ to: {
83
+ schema: joinedModel.schema,
84
+ table: joinedTable.table,
85
+ alias: joinedTable.alias,
86
+ model: relation.model,
87
+ columns: joinedModel.primaryKey.map(
88
+ (c) => joinedModel.columns[c].name,
89
+ ),
90
+ },
91
+ type: relation.optional ? "left" : "inner",
92
+ where: joinedTable.where,
93
+ },
94
+ ...joinedTable.joins,
95
+ );
88
96
  // this is admittedly a bit weird,
89
97
  // we wouldn't expect N:1 relations to specify
90
98
  // ordering, skipping, and limiting, and typescript
91
99
  // prevents users from doing this, but
92
100
  // we rely on them being present as part of the N:N
93
101
  // implementation
94
- builder.tables.push(...otherTables);
95
102
  builder.columns.push(...joinBuilder.columns);
96
103
  builder.orderBy.push(...joinBuilder.orderBy);
97
104
  builder.limit = min([builder.limit, joinBuilder.limit]);
@@ -12,13 +12,20 @@ export const findResultSchema = (
12
12
 
13
13
  query.select.forEach((field) => {
14
14
  const col = config.models[m].columns[field];
15
- obj[field] = col.nullable ? col.zodSchema.nullable() : col.zodSchema;
15
+ obj[field] = col.nullable
16
+ ? col.zodSchema.nullish().transform((x) => x ?? null)
17
+ : col.zodSchema;
16
18
  });
17
19
 
18
20
  for (const [field, subquery] of Object.entries(query.include || {})) {
19
21
  const relation = config.relations[m][field];
20
22
  const schema = findResultSchema(config, relation.model, subquery!);
21
- obj[field] = relation.type === "N:1" ? schema : z.array(schema);
23
+ obj[field] =
24
+ relation.type === "N:1"
25
+ ? relation.optional
26
+ ? schema.nullish().transform((x) => x ?? null)
27
+ : schema
28
+ : z.array(schema);
22
29
  }
23
30
 
24
31
  return z.object(obj);
@@ -13,7 +13,7 @@ export const findToSql = (
13
13
  builder: FindBuilder,
14
14
  ): SQLStatement => {
15
15
  const frag = new SQLStatement();
16
- const [table, ...joinedTables] = builder.tables;
16
+ const table = builder.table;
17
17
 
18
18
  if (builder.lateralBy) {
19
19
  const { columns, groupTable, itemTable } = builder.lateralBy;
@@ -43,46 +43,41 @@ export const findToSql = (
43
43
  ),
44
44
  );
45
45
 
46
- frag.push(pgfmt(`\nFROM %I.%I %I`, table.schema, table.name, table.alias));
46
+ frag.push(pgfmt(`\nFROM %I.%I %I`, table.schema, table.table, table.alias));
47
47
 
48
- for (const joinedTable of joinedTables) {
49
- if (!joinedTable.joins)
50
- throw new OrmError("Joined table without join clauses", {
51
- data: builder,
52
- });
48
+ for (const join of table.joins ?? []) {
49
+ if (join.from.columns.length !== join.to.columns.length) {
50
+ throw new OrmError(
51
+ "Number of foreign keys doesn't match number of primary keys in join",
52
+ { data: builder },
53
+ );
54
+ }
55
+
56
+ frag.push(join.type === "left" ? "\nLEFT JOIN" : "\nJOIN");
53
57
  frag.push(
54
58
  pgfmt(
55
- "\nJOIN %I.%I %I\n ON ",
56
- joinedTable.schema,
57
- joinedTable.name,
58
- joinedTable.alias,
59
+ " %I.%I %I\n ON ",
60
+ join.to.schema,
61
+ join.to.table,
62
+ join.to.alias,
59
63
  ),
60
64
  );
61
65
  frag.push(
62
- joinedTable.joins
63
- .flatMap((join) => {
64
- if (join.from.columns.length !== join.to.columns.length) {
65
- throw new OrmError(
66
- "Number of foreign keys doesn't match number of primary keys in join",
67
- { data: builder },
68
- );
69
- }
70
-
71
- return join.from.columns.map((from, i) =>
72
- pgfmt(
73
- "%I.%I = %I.%I",
74
- table.alias,
75
- from,
76
- joinedTable.alias,
77
- join.to.columns[i],
78
- ),
79
- );
80
- })
66
+ join.from.columns
67
+ .map((from, i) =>
68
+ pgfmt(
69
+ "%I.%I = %I.%I",
70
+ join.from.alias,
71
+ from,
72
+ join.to.alias,
73
+ join.to.columns[i],
74
+ ),
75
+ )
81
76
  .join(" AND "),
82
77
  );
83
- if (hasConditions(joinedTable.where)) {
78
+ if (hasConditions(join.where)) {
84
79
  frag.push(
85
- sql`\n AND ${buildWhereClauses(config, joinedTable, joinedTable.where)}`,
80
+ sql`\n AND ${buildWhereClauses(config, join.to, join.where)}`,
86
81
  );
87
82
  }
88
83
  }
@@ -133,6 +128,10 @@ export const findToSql = (
133
128
  frag.push(sql`\nOFFSET ${builder.offset}`);
134
129
  }
135
130
 
131
+ if (builder.for) {
132
+ frag.push(pgfmt(`\nFOR ${builder.for.toUpperCase()}`));
133
+ }
134
+
136
135
  if (builder.lateralBy) {
137
136
  const { itemTable } = builder.lateralBy;
138
137
  frag.push(pgfmt(`\n) %I ON TRUE`, itemTable));
@@ -0,0 +1,49 @@
1
+ import { BaseConfiguration } from "../../schema/types/base/BaseConfiguration";
2
+ import { BaseFindParams } from "./types/BaseFindParams";
3
+
4
+ export type ManyToManySubQuery = {
5
+ model: string;
6
+ name: string;
7
+ relation: {
8
+ model: string;
9
+ type: "N:N";
10
+ foreignKey: string | string[];
11
+ otherKey: string | string[];
12
+ through: string;
13
+ };
14
+ query: BaseFindParams;
15
+ path: string[];
16
+ };
17
+
18
+ export const getIncludedManyToManyRelations = (
19
+ config: BaseConfiguration,
20
+ m: string,
21
+ query: BaseFindParams,
22
+ path: string[] = [],
23
+ ) => {
24
+ const rels = config.relations[m];
25
+ const includedManyToManyRelations: ManyToManySubQuery[] = Object.entries(
26
+ query.include ?? {},
27
+ )
28
+ .filter(([r, _]) => rels[r].type === "N:N")
29
+ .map(([r, q]) => ({
30
+ model: m,
31
+ name: r,
32
+ relation: rels[r] as ManyToManySubQuery["relation"],
33
+ query: q!,
34
+ path: [...path, r],
35
+ }));
36
+
37
+ const joinedManyToManyRelations: ManyToManySubQuery[] = Object.entries(
38
+ query.include ?? {},
39
+ )
40
+ .filter(([r, _]) => rels[r].type === "N:1")
41
+ .flatMap(([r, q]) =>
42
+ getIncludedManyToManyRelations(config, rels[r].model, q!, [
43
+ ...path,
44
+ r,
45
+ ]),
46
+ );
47
+
48
+ return [...includedManyToManyRelations, ...joinedManyToManyRelations];
49
+ };
@@ -0,0 +1,44 @@
1
+ import { BaseConfiguration } from "../../schema/types/base/BaseConfiguration";
2
+ import { BaseRelation } from "../../schema/types/base/BaseRelation";
3
+ import { BaseFindParams } from "./types/BaseFindParams";
4
+
5
+ export type OneToManySubQuery = {
6
+ model: string;
7
+ name: string;
8
+ relation: BaseRelation;
9
+ query: BaseFindParams;
10
+ path: string[];
11
+ };
12
+
13
+ export const getIncludedOneToManyRelations = (
14
+ config: BaseConfiguration,
15
+ m: string,
16
+ query: BaseFindParams,
17
+ path: string[] = [],
18
+ ) => {
19
+ const rels = config.relations[m];
20
+ const includedOneToManyRelations: OneToManySubQuery[] = Object.entries(
21
+ query.include ?? {},
22
+ )
23
+ .filter(([r, _]) => rels[r].type === "1:N")
24
+ .map(([r, q]) => ({
25
+ model: m,
26
+ name: r,
27
+ relation: rels[r],
28
+ query: q!,
29
+ path: [...path, r],
30
+ }));
31
+
32
+ const joinedOneToManyRelations: OneToManySubQuery[] = Object.entries(
33
+ query.include ?? {},
34
+ )
35
+ .filter(([r, _]) => rels[r].type === "N:1")
36
+ .flatMap(([r, q]) =>
37
+ getIncludedOneToManyRelations(config, rels[r].model, q!, [
38
+ ...path,
39
+ r,
40
+ ]),
41
+ );
42
+
43
+ return [...includedOneToManyRelations, ...joinedOneToManyRelations];
44
+ };
@@ -0,0 +1,107 @@
1
+ import { describe, expect, test } from "vitest";
2
+
3
+ import { db } from "../../../test/db";
4
+ import { seed } from "../../../test/seed";
5
+
6
+ describe("findMany", () => {
7
+ test("it can include N:1 -> 1:N relations", async () => {
8
+ await db.transact(
9
+ async (db) => {
10
+ await seed(db, {
11
+ users: [
12
+ {
13
+ username: "Russell",
14
+ tenants: [
15
+ { name: "WFMA", posts: 1 },
16
+ { name: "Popova Park", posts: 0 },
17
+ ],
18
+ },
19
+ {
20
+ username: "Dan",
21
+ tenants: [{ name: "WFMA", posts: 2 }],
22
+ },
23
+ {
24
+ username: "Fairooz",
25
+ tenants: [{ name: "WFMA", posts: 0 }],
26
+ },
27
+ ],
28
+ });
29
+ const results = await db.findMany("post", {
30
+ select: ["id", "title"],
31
+ include: {
32
+ author: {
33
+ select: ["id", "username"],
34
+ include: {
35
+ posts: { select: ["id", "title"] },
36
+ },
37
+ },
38
+ },
39
+ limit: 2,
40
+ });
41
+
42
+ expect(
43
+ results.map((p) => [
44
+ p.author.username,
45
+ p.author.posts.map((p) => p.title),
46
+ ]),
47
+ ).toEqual([
48
+ ["Russell", ["Post a"]],
49
+ ["Dan", ["Post b", "Post c"]],
50
+ ]);
51
+ },
52
+ { rollback: true },
53
+ );
54
+ });
55
+
56
+ test("it can include N:1 -> N:N relations", async () => {
57
+ await db.transact(
58
+ async (db) => {
59
+ await seed(db, {
60
+ users: [
61
+ {
62
+ username: "Russell",
63
+ tenants: [
64
+ { name: "WFMA", posts: 1 },
65
+ { name: "Popova Park", posts: 0 },
66
+ ],
67
+ },
68
+ {
69
+ username: "Dan",
70
+ tenants: [{ name: "WFMA", posts: 2 }],
71
+ },
72
+ {
73
+ username: "Fairooz",
74
+ tenants: [{ name: "WFMA", posts: 0 }],
75
+ },
76
+ ],
77
+ });
78
+ const results = await db.findMany("post", {
79
+ select: ["id", "title"],
80
+ include: {
81
+ author: {
82
+ select: ["id", "username"],
83
+ include: {
84
+ tenants: {
85
+ select: ["id", "name"],
86
+ orderBy: ["name"],
87
+ },
88
+ },
89
+ },
90
+ },
91
+ limit: 2,
92
+ });
93
+
94
+ expect(
95
+ results.map((p) => [
96
+ p.author.username,
97
+ p.author.tenants.map((t) => t.name),
98
+ ]),
99
+ ).toEqual([
100
+ ["Russell", ["Popova Park", "WFMA"]],
101
+ ["Dan", ["WFMA"]],
102
+ ]);
103
+ },
104
+ { rollback: true },
105
+ );
106
+ });
107
+ });
@@ -0,0 +1,127 @@
1
+ import { describe, expect, test } from "vitest";
2
+
3
+ import { db } from "../../../test/db";
4
+ import { seed } from "../../../test/seed";
5
+
6
+ describe("findMany", () => {
7
+ test("optional N:1 relations don't prevent records being returned", async () => {
8
+ await db.transact(
9
+ async (db) => {
10
+ await seed(db, {
11
+ users: [
12
+ {
13
+ username: "Russell",
14
+ tenants: [
15
+ { name: "WFMA", posts: 1 },
16
+ { name: "Popova Park", posts: 0 },
17
+ ],
18
+ },
19
+ {
20
+ username: "Dan",
21
+ tenants: [{ name: "WFMA", posts: 2 }],
22
+ },
23
+ {
24
+ username: "Fairooz",
25
+ tenants: [{ name: "WFMA", posts: 0 }],
26
+ },
27
+ ],
28
+ });
29
+ const results = await db.findMany("post", {
30
+ select: ["id", "title"],
31
+ include: {
32
+ reviewedBy: {
33
+ select: ["id", "username"],
34
+ include: {
35
+ posts: { select: ["id", "title"] },
36
+ invitedBy: { select: ["id", "username"] },
37
+ },
38
+ },
39
+ },
40
+ orderBy: ["title"],
41
+ limit: 2,
42
+ });
43
+
44
+ expect(results.map((p) => [p.title, p.reviewedBy])).toEqual([
45
+ ["Post a", null],
46
+ ["Post b", null],
47
+ ]);
48
+ },
49
+ { rollback: true },
50
+ );
51
+ });
52
+
53
+ test("optional N:1 relations are returned if they exist", async () => {
54
+ await db.transact(
55
+ async (db) => {
56
+ const { users } = await seed(db, {
57
+ users: [
58
+ {
59
+ username: "Russell",
60
+ tenants: [
61
+ { name: "WFMA", posts: 1 },
62
+ { name: "Popova Park", posts: 0 },
63
+ ],
64
+ },
65
+ {
66
+ username: "Dan",
67
+ tenants: [{ name: "WFMA", posts: 2 }],
68
+ },
69
+ {
70
+ username: "Fairooz",
71
+ tenants: [{ name: "WFMA", posts: 0 }],
72
+ },
73
+ ],
74
+ });
75
+ await db.updateOne("user", {
76
+ where: { id: users["Dan"].id },
77
+ set: {
78
+ invitedById: users["Russell"].id,
79
+ },
80
+ });
81
+ const results = await db.findMany("user", {
82
+ select: ["username"],
83
+ include: {
84
+ invitedBy: {
85
+ select: ["username"],
86
+ },
87
+ tenants: {
88
+ select: ["name"],
89
+ orderBy: ["name"],
90
+ },
91
+ reviewedPosts: {
92
+ select: ["title"],
93
+ },
94
+ invitedUsers: {
95
+ select: ["username"],
96
+ },
97
+ },
98
+ orderBy: ["username"],
99
+ });
100
+ expect(results).toEqual([
101
+ {
102
+ username: "Dan",
103
+ invitedBy: { username: "Russell" },
104
+ tenants: [{ name: "WFMA" }],
105
+ reviewedPosts: [],
106
+ invitedUsers: [],
107
+ },
108
+ {
109
+ username: "Fairooz",
110
+ invitedBy: null,
111
+ tenants: [{ name: "WFMA" }],
112
+ reviewedPosts: [],
113
+ invitedUsers: [],
114
+ },
115
+ {
116
+ username: "Russell",
117
+ invitedBy: null,
118
+ tenants: [{ name: "Popova Park" }, { name: "WFMA" }],
119
+ reviewedPosts: [],
120
+ invitedUsers: [{ username: "Dan" }],
121
+ },
122
+ ]);
123
+ },
124
+ { rollback: true },
125
+ );
126
+ });
127
+ });