@casekit/orm 0.0.1-alpha.2 → 0.0.1-alpha.21

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 (343) hide show
  1. package/lib/migrate/commands/implode.js +1 -1
  2. package/lib/migrate/commands/implode.js.map +1 -1
  3. package/lib/migrate/sql/createTableSql.test.js +1 -0
  4. package/lib/migrate/sql/createTableSql.test.js.map +1 -1
  5. package/lib/orm.d.ts +2 -2
  6. package/lib/orm.d.ts.map +1 -1
  7. package/lib/orm.js +8 -0
  8. package/lib/orm.js.map +1 -1
  9. package/lib/queries/clauses/IncludeClause.d.ts +3 -3
  10. package/lib/queries/clauses/IncludeClause.d.ts.map +1 -1
  11. package/lib/queries/clauses/ReturningClause.d.ts +2 -3
  12. package/lib/queries/clauses/ReturningClause.d.ts.map +1 -1
  13. package/lib/queries/clauses/SelectClause.d.ts +2 -3
  14. package/lib/queries/clauses/SelectClause.d.ts.map +1 -1
  15. package/lib/queries/clauses/WhereClause.d.ts +1 -1
  16. package/lib/queries/clauses/WhereClause.d.ts.map +1 -1
  17. package/lib/queries/clauses/helpers/OptionalColumn.d.ts +5 -5
  18. package/lib/queries/clauses/helpers/OptionalColumn.d.ts.map +1 -1
  19. package/lib/queries/clauses/helpers/OptionalParams.d.ts +2 -2
  20. package/lib/queries/clauses/helpers/OptionalParams.d.ts.map +1 -1
  21. package/lib/queries/clauses/helpers/RequiredColumn.d.ts +2 -3
  22. package/lib/queries/clauses/helpers/RequiredColumn.d.ts.map +1 -1
  23. package/lib/queries/clauses/helpers/RequiredParams.d.ts +2 -2
  24. package/lib/queries/clauses/helpers/RequiredParams.d.ts.map +1 -1
  25. package/lib/queries/clauses/where/buildWhereClause.js +1 -1
  26. package/lib/queries/clauses/where/buildWhereClause.js.map +1 -1
  27. package/lib/queries/clauses/where/buildWhereClauses.d.ts +1 -1
  28. package/lib/queries/clauses/where/buildWhereClauses.d.ts.map +1 -1
  29. package/lib/queries/clauses/where/buildWhereClauses.js.map +1 -1
  30. package/lib/queries/clauses/where/buildWhereClauses.test.js +1 -1
  31. package/lib/queries/clauses/where/buildWhereClauses.test.js.map +1 -1
  32. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts +1 -1
  33. package/lib/queries/clauses/where/types/WhereClauseValue.d.ts.map +1 -1
  34. package/lib/queries/count/buildCount.d.ts.map +1 -1
  35. package/lib/queries/count/buildCount.js +33 -29
  36. package/lib/queries/count/buildCount.js.map +1 -1
  37. package/lib/queries/count/countToSql.d.ts.map +1 -1
  38. package/lib/queries/count/countToSql.js +12 -17
  39. package/lib/queries/count/countToSql.js.map +1 -1
  40. package/lib/queries/count/types/CountBuilder.d.ts +12 -4
  41. package/lib/queries/count/types/CountBuilder.d.ts.map +1 -1
  42. package/lib/queries/count.d.ts.map +1 -1
  43. package/lib/queries/count.js +3 -1
  44. package/lib/queries/count.js.map +1 -1
  45. package/lib/queries/create/buildCreate.d.ts +4 -1
  46. package/lib/queries/create/buildCreate.d.ts.map +1 -1
  47. package/lib/queries/create/buildCreate.js +5 -2
  48. package/lib/queries/create/buildCreate.js.map +1 -1
  49. package/lib/queries/create/createResultSchema.d.ts.map +1 -1
  50. package/lib/queries/create/createResultSchema.js +3 -1
  51. package/lib/queries/create/createResultSchema.js.map +1 -1
  52. package/lib/queries/create/createToSql.d.ts.map +1 -1
  53. package/lib/queries/create/createToSql.js +5 -2
  54. package/lib/queries/create/createToSql.js.map +1 -1
  55. package/lib/queries/create/tests/createMany.varied-keys.test.d.ts +2 -0
  56. package/lib/queries/create/tests/createMany.varied-keys.test.d.ts.map +1 -0
  57. package/lib/queries/create/tests/createMany.varied-keys.test.js +24 -0
  58. package/lib/queries/create/tests/createMany.varied-keys.test.js.map +1 -0
  59. package/lib/queries/create/tests/createOne.test.js +53 -0
  60. package/lib/queries/create/tests/createOne.test.js.map +1 -1
  61. package/lib/queries/create/types/BaseCreateManyParams.d.ts +3 -0
  62. package/lib/queries/create/types/BaseCreateManyParams.d.ts.map +1 -1
  63. package/lib/queries/create/types/BaseCreateOneParams.d.ts +3 -0
  64. package/lib/queries/create/types/BaseCreateOneParams.d.ts.map +1 -1
  65. package/lib/queries/create/types/CreateManyParams.d.ts +4 -1
  66. package/lib/queries/create/types/CreateManyParams.d.ts.map +1 -1
  67. package/lib/queries/create/types/CreateManyResult.d.ts +1 -1
  68. package/lib/queries/create/types/CreateManyResult.d.ts.map +1 -1
  69. package/lib/queries/create/types/CreateOneParams.d.ts +4 -1
  70. package/lib/queries/create/types/CreateOneParams.d.ts.map +1 -1
  71. package/lib/queries/create/types/CreateOneResult.d.ts +1 -1
  72. package/lib/queries/create/types/CreateOneResult.d.ts.map +1 -1
  73. package/lib/queries/createMany.d.ts.map +1 -1
  74. package/lib/queries/createMany.js +3 -1
  75. package/lib/queries/createMany.js.map +1 -1
  76. package/lib/queries/createOne.d.ts.map +1 -1
  77. package/lib/queries/createOne.js +6 -0
  78. package/lib/queries/createOne.js.map +1 -1
  79. package/lib/queries/delete/buildDelete.d.ts +1 -1
  80. package/lib/queries/delete/buildDelete.d.ts.map +1 -1
  81. package/lib/queries/delete/buildDelete.js +1 -1
  82. package/lib/queries/delete/buildDelete.js.map +1 -1
  83. package/lib/queries/delete/deleteResultSchema.d.ts.map +1 -1
  84. package/lib/queries/delete/deleteResultSchema.js +3 -1
  85. package/lib/queries/delete/deleteResultSchema.js.map +1 -1
  86. package/lib/queries/delete/deleteToSql.js +1 -1
  87. package/lib/queries/delete/deleteToSql.js.map +1 -1
  88. package/lib/queries/delete/types/DeleteManyResult.d.ts +1 -1
  89. package/lib/queries/delete/types/DeleteManyResult.d.ts.map +1 -1
  90. package/lib/queries/delete/types/DeleteOneResult.d.ts +1 -1
  91. package/lib/queries/delete/types/DeleteOneResult.d.ts.map +1 -1
  92. package/lib/queries/delete/types/DeleteParams.d.ts +1 -1
  93. package/lib/queries/delete/types/DeleteParams.d.ts.map +1 -1
  94. package/lib/queries/deleteMany.d.ts.map +1 -1
  95. package/lib/queries/deleteMany.js +3 -1
  96. package/lib/queries/deleteMany.js.map +1 -1
  97. package/lib/queries/find/buildFind.d.ts.map +1 -1
  98. package/lib/queries/find/buildFind.js +39 -31
  99. package/lib/queries/find/buildFind.js.map +1 -1
  100. package/lib/queries/find/findResultSchema.d.ts.map +1 -1
  101. package/lib/queries/find/findResultSchema.js +9 -2
  102. package/lib/queries/find/findResultSchema.js.map +1 -1
  103. package/lib/queries/find/findToSql.d.ts.map +1 -1
  104. package/lib/queries/find/findToSql.js +15 -17
  105. package/lib/queries/find/findToSql.js.map +1 -1
  106. package/lib/queries/find/getIncludedManyToManyRelations.d.ts +17 -0
  107. package/lib/queries/find/getIncludedManyToManyRelations.d.ts.map +1 -0
  108. package/lib/queries/find/getIncludedManyToManyRelations.js +20 -0
  109. package/lib/queries/find/getIncludedManyToManyRelations.js.map +1 -0
  110. package/lib/queries/find/getIncludedOneToManyRelations.d.ts +12 -0
  111. package/lib/queries/find/getIncludedOneToManyRelations.d.ts.map +1 -0
  112. package/lib/queries/find/getIncludedOneToManyRelations.js +20 -0
  113. package/lib/queries/find/getIncludedOneToManyRelations.js.map +1 -0
  114. package/lib/queries/find/tests/findMany.include.test.d.ts +2 -0
  115. package/lib/queries/find/tests/findMany.include.test.d.ts.map +1 -0
  116. package/lib/queries/find/tests/findMany.include.test.js +93 -0
  117. package/lib/queries/find/tests/findMany.include.test.js.map +1 -0
  118. package/lib/queries/find/tests/findMany.lateral.test.d.ts +2 -0
  119. package/lib/queries/find/tests/findMany.lateral.test.d.ts.map +1 -0
  120. package/lib/queries/find/tests/findMany.lateral.test.js +86 -0
  121. package/lib/queries/find/tests/findMany.lateral.test.js.map +1 -0
  122. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts +2 -0
  123. package/lib/queries/find/tests/findMany.nullable-relations.test.d.ts.map +1 -0
  124. package/lib/queries/find/tests/findMany.nullable-relations.test.js +118 -0
  125. package/lib/queries/find/tests/findMany.nullable-relations.test.js.map +1 -0
  126. package/lib/queries/find/tests/middleware.find.where.test.js +12 -12
  127. package/lib/queries/find/tests/middleware.find.where.test.js.map +1 -1
  128. package/lib/queries/find/types/BaseFindParams.d.ts +2 -1
  129. package/lib/queries/find/types/BaseFindParams.d.ts.map +1 -1
  130. package/lib/queries/find/types/FindBuilder.d.ts +13 -4
  131. package/lib/queries/find/types/FindBuilder.d.ts.map +1 -1
  132. package/lib/queries/find/types/FindManyParams.d.ts +3 -2
  133. package/lib/queries/find/types/FindManyParams.d.ts.map +1 -1
  134. package/lib/queries/find/types/FindManyResult.d.ts +2 -1
  135. package/lib/queries/find/types/FindManyResult.d.ts.map +1 -1
  136. package/lib/queries/find/types/FindOneParams.d.ts +2 -1
  137. package/lib/queries/find/types/FindOneParams.d.ts.map +1 -1
  138. package/lib/queries/find/types/FindOneResult.d.ts +6 -0
  139. package/lib/queries/find/types/FindOneResult.d.ts.map +1 -1
  140. package/lib/queries/findMany.d.ts.map +1 -1
  141. package/lib/queries/findMany.js +71 -36
  142. package/lib/queries/findMany.js.map +1 -1
  143. package/lib/queries/middleware/Middleware.d.ts +1 -1
  144. package/lib/queries/middleware/Middleware.d.ts.map +1 -1
  145. package/lib/queries/update/buildUpdate.d.ts +2 -2
  146. package/lib/queries/update/buildUpdate.d.ts.map +1 -1
  147. package/lib/queries/update/buildUpdate.js +8 -8
  148. package/lib/queries/update/buildUpdate.js.map +1 -1
  149. package/lib/queries/update/tests/updateOne.test.js +3 -3
  150. package/lib/queries/update/tests/updateOne.test.js.map +1 -1
  151. package/lib/queries/update/types/BaseUpdateParams.d.ts +1 -1
  152. package/lib/queries/update/types/BaseUpdateParams.d.ts.map +1 -1
  153. package/lib/queries/update/types/UpdateManyResult.d.ts +1 -1
  154. package/lib/queries/update/types/UpdateManyResult.d.ts.map +1 -1
  155. package/lib/queries/update/types/UpdateOneResult.d.ts +1 -1
  156. package/lib/queries/update/types/UpdateOneResult.d.ts.map +1 -1
  157. package/lib/queries/update/types/UpdateParams.d.ts +2 -2
  158. package/lib/queries/update/types/UpdateParams.d.ts.map +1 -1
  159. package/lib/queries/update/types/UpdateValues.d.ts +1 -1
  160. package/lib/queries/update/types/UpdateValues.d.ts.map +1 -1
  161. package/lib/queries/update/updateResultSchema.d.ts.map +1 -1
  162. package/lib/queries/update/updateResultSchema.js +3 -1
  163. package/lib/queries/update/updateResultSchema.js.map +1 -1
  164. package/lib/queries/update/updateToSql.js +3 -3
  165. package/lib/queries/update/updateToSql.js.map +1 -1
  166. package/lib/queries/updateMany.d.ts.map +1 -1
  167. package/lib/queries/updateMany.js +3 -1
  168. package/lib/queries/updateMany.js.map +1 -1
  169. package/lib/queries/util/rowToObject.d.ts.map +1 -1
  170. package/lib/queries/util/rowToObject.js +1 -1
  171. package/lib/queries/util/rowToObject.js.map +1 -1
  172. package/lib/schema/populate/composeMiddleware.js +1 -1
  173. package/lib/schema/populate/composeMiddleware.js.map +1 -1
  174. package/lib/schema/populate/populateModel.d.ts.map +1 -1
  175. package/lib/schema/populate/populateModel.js +1 -0
  176. package/lib/schema/populate/populateModel.js.map +1 -1
  177. package/lib/schema/types/base/BaseColumn.d.ts +1 -0
  178. package/lib/schema/types/base/BaseColumn.d.ts.map +1 -1
  179. package/lib/schema/types/base/BaseRelation.d.ts +1 -0
  180. package/lib/schema/types/base/BaseRelation.d.ts.map +1 -1
  181. package/lib/schema/types/helpers/ColumnName.d.ts +2 -3
  182. package/lib/schema/types/helpers/ColumnName.d.ts.map +1 -1
  183. package/lib/schema/types/helpers/ColumnType.d.ts +2 -2
  184. package/lib/schema/types/helpers/ColumnType.d.ts.map +1 -1
  185. package/lib/schema/types/helpers/Columns.d.ts +2 -3
  186. package/lib/schema/types/helpers/Columns.d.ts.map +1 -1
  187. package/lib/schema/types/helpers/HasDefault.d.ts +2 -3
  188. package/lib/schema/types/helpers/HasDefault.d.ts.map +1 -1
  189. package/lib/schema/types/helpers/IsNullable.d.ts +2 -3
  190. package/lib/schema/types/helpers/IsNullable.d.ts.map +1 -1
  191. package/lib/schema/types/helpers/IsProvided.d.ts +5 -0
  192. package/lib/schema/types/helpers/IsProvided.d.ts.map +1 -0
  193. package/lib/schema/types/helpers/IsProvided.js +2 -0
  194. package/lib/schema/types/helpers/IsProvided.js.map +1 -0
  195. package/lib/schema/types/helpers/IsSerial.d.ts +2 -3
  196. package/lib/schema/types/helpers/IsSerial.d.ts.map +1 -1
  197. package/lib/schema/types/loose/LooseColumnDefinition.d.ts +5 -0
  198. package/lib/schema/types/loose/LooseColumnDefinition.d.ts.map +1 -1
  199. package/lib/schema/types/loose/LooseRelationDefinition.d.ts +1 -0
  200. package/lib/schema/types/loose/LooseRelationDefinition.d.ts.map +1 -1
  201. package/lib/schema/types/relations/ManyToManyRelation.d.ts +2 -2
  202. package/lib/schema/types/relations/ManyToManyRelation.d.ts.map +1 -1
  203. package/lib/schema/types/relations/ManyToOneRelation.d.ts +1 -1
  204. package/lib/schema/types/relations/ManyToOneRelation.d.ts.map +1 -1
  205. package/lib/schema/types/relations/OneToManyRelation.d.ts +2 -1
  206. package/lib/schema/types/relations/OneToManyRelation.d.ts.map +1 -1
  207. package/lib/schema/types/strict/ColumnDefinition.d.ts +5 -0
  208. package/lib/schema/types/strict/ColumnDefinition.d.ts.map +1 -1
  209. package/lib/test/db/index.d.ts +40 -0
  210. package/lib/test/db/index.d.ts.map +1 -1
  211. package/lib/test/db/models/post.model.d.ts +9 -0
  212. package/lib/test/db/models/post.model.d.ts.map +1 -1
  213. package/lib/test/db/models/post.model.js +6 -0
  214. package/lib/test/db/models/post.model.js.map +1 -1
  215. package/lib/test/db/models/post.relations.d.ts +6 -0
  216. package/lib/test/db/models/post.relations.d.ts.map +1 -1
  217. package/lib/test/db/models/post.relations.js +6 -0
  218. package/lib/test/db/models/post.relations.js.map +1 -1
  219. package/lib/test/db/models/user.model.d.ts +9 -0
  220. package/lib/test/db/models/user.model.d.ts.map +1 -1
  221. package/lib/test/db/models/user.model.js +6 -0
  222. package/lib/test/db/models/user.model.js.map +1 -1
  223. package/lib/test/db/models/user.relations.d.ts +16 -0
  224. package/lib/test/db/models/user.relations.d.ts.map +1 -1
  225. package/lib/test/db/models/user.relations.js +16 -0
  226. package/lib/test/db/models/user.relations.js.map +1 -1
  227. package/lib/test/db/models.d.ts +18 -0
  228. package/lib/test/db/models.d.ts.map +1 -1
  229. package/lib/test/db/relations.d.ts +22 -0
  230. package/lib/test/db/relations.d.ts.map +1 -1
  231. package/lib/test/gen/column.d.ts +1 -0
  232. package/lib/test/gen/column.d.ts.map +1 -1
  233. package/lib/test/seed/index.d.ts +40 -0
  234. package/lib/test/seed/index.d.ts.map +1 -1
  235. package/lib/types/ModelType.d.ts +10 -3
  236. package/lib/types/ModelType.d.ts.map +1 -1
  237. package/package.json +11 -4
  238. package/src/migrate/commands/implode.ts +1 -1
  239. package/src/migrate/sql/createTableSql.test.ts +1 -0
  240. package/src/orm.ts +10 -2
  241. package/src/queries/clauses/IncludeClause.ts +19 -3
  242. package/src/queries/clauses/ReturningClause.ts +4 -6
  243. package/src/queries/clauses/SelectClause.ts +4 -6
  244. package/src/queries/clauses/WhereClause.ts +1 -1
  245. package/src/queries/clauses/helpers/OptionalColumn.ts +10 -11
  246. package/src/queries/clauses/helpers/OptionalParams.ts +2 -2
  247. package/src/queries/clauses/helpers/RequiredColumn.ts +5 -6
  248. package/src/queries/clauses/helpers/RequiredParams.ts +2 -2
  249. package/src/queries/clauses/where/buildWhereClause.ts +1 -1
  250. package/src/queries/clauses/where/buildWhereClauses.test.ts +1 -1
  251. package/src/queries/clauses/where/buildWhereClauses.ts +1 -1
  252. package/src/queries/clauses/where/types/WhereClauseValue.ts +1 -1
  253. package/src/queries/count/buildCount.ts +39 -33
  254. package/src/queries/count/countToSql.ts +27 -32
  255. package/src/queries/count/types/CountBuilder.ts +23 -6
  256. package/src/queries/count.ts +3 -1
  257. package/src/queries/create/buildCreate.ts +8 -3
  258. package/src/queries/create/createResultSchema.ts +3 -1
  259. package/src/queries/create/createToSql.ts +10 -2
  260. package/src/queries/create/tests/createMany.varied-keys.test.ts +28 -0
  261. package/src/queries/create/tests/createOne.test.ts +70 -0
  262. package/src/queries/create/types/BaseCreateManyParams.ts +1 -0
  263. package/src/queries/create/types/BaseCreateOneParams.ts +1 -0
  264. package/src/queries/create/types/CreateManyParams.ts +4 -1
  265. package/src/queries/create/types/CreateManyResult.ts +1 -1
  266. package/src/queries/create/types/CreateOneParams.ts +4 -1
  267. package/src/queries/create/types/CreateOneResult.ts +1 -1
  268. package/src/queries/createMany.ts +3 -1
  269. package/src/queries/createOne.ts +9 -0
  270. package/src/queries/delete/buildDelete.ts +2 -2
  271. package/src/queries/delete/deleteResultSchema.ts +3 -1
  272. package/src/queries/delete/deleteToSql.ts +1 -1
  273. package/src/queries/delete/types/DeleteManyResult.ts +1 -1
  274. package/src/queries/delete/types/DeleteOneResult.ts +1 -1
  275. package/src/queries/delete/types/DeleteParams.ts +1 -1
  276. package/src/queries/deleteMany.ts +3 -1
  277. package/src/queries/find/buildFind.ts +46 -35
  278. package/src/queries/find/findResultSchema.ts +9 -2
  279. package/src/queries/find/findToSql.ts +31 -32
  280. package/src/queries/find/getIncludedManyToManyRelations.ts +49 -0
  281. package/src/queries/find/getIncludedOneToManyRelations.ts +44 -0
  282. package/src/queries/find/tests/findMany.include.test.ts +107 -0
  283. package/src/queries/find/tests/findMany.lateral.test.ts +90 -0
  284. package/src/queries/find/tests/findMany.nullable-relations.test.ts +127 -0
  285. package/src/queries/find/tests/middleware.find.where.test.ts +12 -12
  286. package/src/queries/find/types/BaseFindParams.ts +2 -1
  287. package/src/queries/find/types/FindBuilder.ts +25 -6
  288. package/src/queries/find/types/FindManyParams.ts +3 -2
  289. package/src/queries/find/types/FindManyResult.ts +2 -1
  290. package/src/queries/find/types/FindOneParams.ts +2 -1
  291. package/src/queries/find/types/FindOneResult.ts +48 -13
  292. package/src/queries/findMany.ts +127 -67
  293. package/src/queries/middleware/Middleware.ts +1 -1
  294. package/src/queries/update/buildUpdate.ts +10 -10
  295. package/src/queries/update/tests/updateOne.test.ts +3 -3
  296. package/src/queries/update/types/BaseUpdateParams.ts +1 -1
  297. package/src/queries/update/types/UpdateManyResult.ts +1 -1
  298. package/src/queries/update/types/UpdateOneResult.ts +1 -1
  299. package/src/queries/update/types/UpdateParams.ts +2 -2
  300. package/src/queries/update/types/UpdateValues.ts +1 -1
  301. package/src/queries/update/updateResultSchema.ts +3 -1
  302. package/src/queries/update/updateToSql.ts +3 -3
  303. package/src/queries/updateMany.ts +3 -1
  304. package/src/queries/util/rowToObject.ts +5 -1
  305. package/src/schema/populate/composeMiddleware.ts +1 -1
  306. package/src/schema/populate/populateModel.ts +1 -0
  307. package/src/schema/types/base/BaseColumn.ts +1 -0
  308. package/src/schema/types/base/BaseRelation.ts +1 -0
  309. package/src/schema/types/helpers/ColumnName.ts +5 -6
  310. package/src/schema/types/helpers/ColumnType.ts +2 -2
  311. package/src/schema/types/helpers/Columns.ts +2 -6
  312. package/src/schema/types/helpers/HasDefault.ts +5 -7
  313. package/src/schema/types/helpers/IsNullable.ts +4 -6
  314. package/src/schema/types/helpers/IsProvided.ts +8 -0
  315. package/src/schema/types/helpers/IsSerial.ts +4 -6
  316. package/src/schema/types/loose/LooseColumnDefinition.ts +6 -0
  317. package/src/schema/types/loose/LooseRelationDefinition.ts +1 -1
  318. package/src/schema/types/relations/ManyToManyRelation.ts +2 -2
  319. package/src/schema/types/relations/ManyToOneRelation.ts +1 -1
  320. package/src/schema/types/relations/OneToManyRelation.ts +2 -1
  321. package/src/schema/types/strict/ColumnDefinition.ts +6 -0
  322. package/src/test/db/models/post.model.ts +6 -0
  323. package/src/test/db/models/post.relations.ts +6 -0
  324. package/src/test/db/models/user.model.ts +6 -0
  325. package/src/test/db/models/user.relations.ts +16 -0
  326. package/src/types/ModelType.ts +16 -3
  327. package/.env +0 -2
  328. package/.eslintrc.cjs +0 -69
  329. package/.github/actions/ci-setup/action.yml +0 -19
  330. package/.github/dependabot.yml +0 -12
  331. package/.github/workflows/ci.yml +0 -119
  332. package/.github/workflows/dependabot.yml +0 -26
  333. package/.github/workflows/semgrep.yml +0 -24
  334. package/.prettierrc.cjs +0 -11
  335. package/.vscode/tasks.json +0 -28
  336. package/codecov.yml +0 -7
  337. package/lib/queries/clauses/helpers/ModelValues.d.ts +0 -8
  338. package/lib/queries/clauses/helpers/ModelValues.d.ts.map +0 -1
  339. package/lib/queries/clauses/helpers/ModelValues.js +0 -2
  340. package/lib/queries/clauses/helpers/ModelValues.js.map +0 -1
  341. package/src/queries/clauses/helpers/ModelValues.ts +0 -9
  342. package/tsconfig.json +0 -18
  343. package/vitest.config.ts +0 -15
@@ -10,7 +10,7 @@ export type CreateManyResult<
10
10
  M extends ModelName<Models>,
11
11
  P extends CreateOneParams<Models, M> | CreateManyParams<Models, M>,
12
12
  > =
13
- P["returning"] extends ReturningClause<Models, M>
13
+ P["returning"] extends ReturningClause<Models[M]>
14
14
  ? Readonly<{
15
15
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
16
16
  }>[]
@@ -15,5 +15,8 @@ export type CreateOneParams<
15
15
  M extends ModelName<Models>,
16
16
  > = {
17
17
  values: CreateValues<Models, M>;
18
- returning?: ReturningClause<Models, M>;
18
+ returning?: ReturningClause<Models[M]>;
19
+ onConflict?: {
20
+ do: "nothing";
21
+ };
19
22
  };
@@ -10,7 +10,7 @@ export type CreateOneResult<
10
10
  M extends ModelName<Models>,
11
11
  P extends CreateOneParams<Models, M> | CreateManyParams<Models, M>,
12
12
  > =
13
- P["returning"] extends SelectClause<Models, M>
13
+ P["returning"] extends SelectClause<Models[M]>
14
14
  ? Readonly<{
15
15
  [C in P["returning"][number]]: ColumnType<Models, M, C>;
16
16
  }>
@@ -26,8 +26,10 @@ export const createMany = async (
26
26
  values: statement.values,
27
27
  });
28
28
 
29
- if (process.env.NODE_ENV === "test" && !process.env.CI)
29
+ if (process.env.ORM_VERBOSE_LOGGING) {
30
30
  console.log(statement.text);
31
+ console.log(statement.values);
32
+ }
31
33
 
32
34
  const result = await conn.query(statement);
33
35
  return params.returning
@@ -1,5 +1,6 @@
1
1
  import { BaseConfiguration } from "src/schema/types/base/BaseConfiguration";
2
2
 
3
+ import { OrmError } from "..";
3
4
  import { Connection } from "../Connection";
4
5
  import { BaseCreateOneParams } from "./create/types/BaseCreateOneParams";
5
6
  import { createMany } from "./createMany";
@@ -10,6 +11,14 @@ export const createOne = async (
10
11
  m: string,
11
12
  params: BaseCreateOneParams,
12
13
  ) => {
14
+ if (params.onConflict?.do === "nothing" && params.returning) {
15
+ throw new OrmError(
16
+ "Cannot use 'returning' with 'onConflict' in createOne",
17
+ {
18
+ data: { m, params },
19
+ },
20
+ );
21
+ }
13
22
  const result = await createMany(conn, config, m, {
14
23
  ...params,
15
24
  values: [params.values],
@@ -9,7 +9,7 @@ import { BaseDeleteParams } from "./types/BaseDeleteParams";
9
9
 
10
10
  export type DeleteBuilder = {
11
11
  tableIndex: number;
12
- table: { name: string; model: string; alias: string; schema: string };
12
+ table: { table: string; model: string; alias: string; schema: string };
13
13
  where: WhereClause<LooseModelDefinitions, ModelName<LooseModelDefinitions>>;
14
14
  returning: { name: string; path: string; alias: string }[];
15
15
  };
@@ -23,7 +23,7 @@ export const buildDelete = (
23
23
  const builder: DeleteBuilder = {
24
24
  tableIndex: _tableIndex,
25
25
  table: {
26
- name: config.models[m].table,
26
+ table: config.models[m].table,
27
27
  schema: config.models[m].schema,
28
28
  model: m,
29
29
  alias: tableAlias(_tableIndex++),
@@ -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,42 @@ 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
+ );
96
+ // update the parent builder's tableIndex with the one from the
97
+ // joinBuilder, so that we don't have overlapping table indices
98
+ builder.tableIndex = joinBuilder.tableIndex;
99
+
88
100
  // this is admittedly a bit weird,
89
101
  // we wouldn't expect N:1 relations to specify
90
102
  // ordering, skipping, and limiting, and typescript
91
103
  // prevents users from doing this, but
92
104
  // we rely on them being present as part of the N:N
93
105
  // implementation
94
- builder.tables.push(...otherTables);
95
106
  builder.columns.push(...joinBuilder.columns);
96
107
  builder.orderBy.push(...joinBuilder.orderBy);
97
108
  builder.limit = min([builder.limit, joinBuilder.limit]);
@@ -114,7 +125,7 @@ export const buildFind = (
114
125
  if (query.orderBy) {
115
126
  builder.orderBy = query.orderBy.map((o) => ({
116
127
  table: alias,
117
- column: Array.isArray(o) ? o[0] : o,
128
+ column: model.columns[Array.isArray(o) ? o[0] : o].name,
118
129
  direction: Array.isArray(o) ? o[1] : "asc",
119
130
  }));
120
131
  }
@@ -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,90 @@
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 apply lateral clauses to queries with 1:N relations without creating duplicates", async () => {
8
+ await db.transact(
9
+ async (db) => {
10
+ await seed(db, {
11
+ users: [
12
+ {
13
+ username: "Russell",
14
+ tenants: [{ name: "Popova Park", posts: 3 }],
15
+ },
16
+ {
17
+ username: "Eliza",
18
+ tenants: [{ name: "Popova Park", posts: 2 }],
19
+ },
20
+ ],
21
+ });
22
+ const result = await db.findMany("post", {
23
+ select: ["title"],
24
+ include: {
25
+ author: {
26
+ select: ["username"],
27
+ include: {
28
+ posts: {
29
+ select: ["title"],
30
+ orderBy: ["title"],
31
+ },
32
+ },
33
+ },
34
+ },
35
+ orderBy: ["title"],
36
+ });
37
+ expect(result).toEqual([
38
+ {
39
+ title: "Post a",
40
+ author: {
41
+ username: "Russell",
42
+ posts: [
43
+ { title: "Post a" },
44
+ { title: "Post b" },
45
+ { title: "Post c" },
46
+ ],
47
+ },
48
+ },
49
+ {
50
+ title: "Post b",
51
+ author: {
52
+ username: "Russell",
53
+ posts: [
54
+ { title: "Post a" },
55
+ { title: "Post b" },
56
+ { title: "Post c" },
57
+ ],
58
+ },
59
+ },
60
+ {
61
+ title: "Post c",
62
+ author: {
63
+ username: "Russell",
64
+ posts: [
65
+ { title: "Post a" },
66
+ { title: "Post b" },
67
+ { title: "Post c" },
68
+ ],
69
+ },
70
+ },
71
+ {
72
+ title: "Post d",
73
+ author: {
74
+ username: "Eliza",
75
+ posts: [{ title: "Post d" }, { title: "Post e" }],
76
+ },
77
+ },
78
+ {
79
+ title: "Post e",
80
+ author: {
81
+ username: "Eliza",
82
+ posts: [{ title: "Post d" }, { title: "Post e" }],
83
+ },
84
+ },
85
+ ]);
86
+ },
87
+ { rollback: true },
88
+ );
89
+ });
90
+ });