@casekit/orm 0.0.1-alpha.12 → 0.0.1-alpha.13

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 (227) hide show
  1. package/package.json +13 -3
  2. package/.env +0 -2
  3. package/.eslintrc.cjs +0 -69
  4. package/.github/actions/ci-setup/action.yml +0 -19
  5. package/.github/dependabot.yml +0 -12
  6. package/.github/workflows/ci.yml +0 -119
  7. package/.github/workflows/dependabot.yml +0 -26
  8. package/.github/workflows/semgrep.yml +0 -24
  9. package/.prettierrc.cjs +0 -11
  10. package/.vscode/tasks.json +0 -28
  11. package/codecov.yml +0 -7
  12. package/lib/orm.query.test.d.ts +0 -2
  13. package/lib/orm.query.test.d.ts.map +0 -1
  14. package/lib/orm.query.test.js +0 -22
  15. package/lib/orm.query.test.js.map +0 -1
  16. package/src/Connection.ts +0 -65
  17. package/src/errors.ts +0 -18
  18. package/src/index.ts +0 -16
  19. package/src/logger.ts +0 -3
  20. package/src/migrate/commands/implode.ts +0 -46
  21. package/src/migrate/index.ts +0 -1
  22. package/src/migrate/migrator.ts +0 -24
  23. package/src/migrate/sql/createExtensionsSql.test.ts +0 -26
  24. package/src/migrate/sql/createExtensionsSql.ts +0 -16
  25. package/src/migrate/sql/createForeignKeyConstraintSql.test.ts +0 -50
  26. package/src/migrate/sql/createForeignKeyConstraintSql.ts +0 -44
  27. package/src/migrate/sql/createSchemasSql.test.ts +0 -81
  28. package/src/migrate/sql/createSchemasSql.ts +0 -15
  29. package/src/migrate/sql/createTableSql.properties.ts +0 -38
  30. package/src/migrate/sql/createTableSql.test.ts +0 -74
  31. package/src/migrate/sql/createTableSql.ts +0 -53
  32. package/src/migrate/sql/createUniqueConstraintSql.ts +0 -27
  33. package/src/migrate/sql/dropSchemasSql.ts +0 -15
  34. package/src/migrate/sql/dropTableSql.ts +0 -13
  35. package/src/orm.query.test.ts +0 -28
  36. package/src/orm.ts +0 -370
  37. package/src/pull/index.ts +0 -1
  38. package/src/pull/introspect/getForeignKeys.ts +0 -64
  39. package/src/pull/introspect/getPrimaryKeys.ts +0 -26
  40. package/src/pull/introspect/getTables.ts +0 -51
  41. package/src/pull/introspect/getUniqueConstraints.ts +0 -39
  42. package/src/pull/parse/parseCreateUniqueIndexStatement.test.ts +0 -14
  43. package/src/pull/parse/parseCreateUniqueIndexStatement.ts +0 -19
  44. package/src/pull/pull.ts +0 -78
  45. package/src/pull/render/renderModel.test.ts +0 -144
  46. package/src/pull/render/renderModel.ts +0 -141
  47. package/src/pull/render/renderModelsIndex.ts +0 -24
  48. package/src/pull/render/renderRelations.ts +0 -77
  49. package/src/pull/render/renderRelationsIndex.ts +0 -24
  50. package/src/pull/types/ColumnMeta.ts +0 -10
  51. package/src/pull/types/ForeignKey.ts +0 -6
  52. package/src/pull/types/PrimaryKey.ts +0 -6
  53. package/src/pull/types/UniqueConstraint.ts +0 -8
  54. package/src/pull/util/format.ts +0 -17
  55. package/src/pull/util/quote.ts +0 -7
  56. package/src/pull/util/unquote.ts +0 -9
  57. package/src/queries/clauses/IncludeClause.ts +0 -39
  58. package/src/queries/clauses/LateralByClause.ts +0 -4
  59. package/src/queries/clauses/ReturningClause.ts +0 -7
  60. package/src/queries/clauses/SelectClause.ts +0 -7
  61. package/src/queries/clauses/WhereClause.ts +0 -16
  62. package/src/queries/clauses/helpers/OptionalColumn.ts +0 -18
  63. package/src/queries/clauses/helpers/OptionalParams.ts +0 -14
  64. package/src/queries/clauses/helpers/RequiredColumn.ts +0 -8
  65. package/src/queries/clauses/helpers/RequiredParams.ts +0 -14
  66. package/src/queries/clauses/include/IncludedRelationModel.ts +0 -13
  67. package/src/queries/clauses/include/IncludedRelationName.ts +0 -11
  68. package/src/queries/clauses/include/IncludedRelationQuery.ts +0 -20
  69. package/src/queries/clauses/where/buildWhereClause.ts +0 -121
  70. package/src/queries/clauses/where/buildWhereClauses.test.ts +0 -145
  71. package/src/queries/clauses/where/buildWhereClauses.ts +0 -45
  72. package/src/queries/clauses/where/operators.ts +0 -13
  73. package/src/queries/clauses/where/types/WhereClauseValue.ts +0 -39
  74. package/src/queries/count/buildCount.ts +0 -77
  75. package/src/queries/count/countToSql.ts +0 -66
  76. package/src/queries/count/tests/count.test.ts +0 -35
  77. package/src/queries/count/types/BaseCountParams.ts +0 -11
  78. package/src/queries/count/types/CountBuilder.ts +0 -45
  79. package/src/queries/count/types/CountParams.ts +0 -27
  80. package/src/queries/count.ts +0 -33
  81. package/src/queries/create/buildCreate.ts +0 -67
  82. package/src/queries/create/createResultSchema.ts +0 -24
  83. package/src/queries/create/createToSql.ts +0 -44
  84. package/src/queries/create/tests/createMany.varied-keys.test.ts +0 -28
  85. package/src/queries/create/tests/createOne.test-d.ts +0 -116
  86. package/src/queries/create/tests/createOne.test.ts +0 -197
  87. package/src/queries/create/types/BaseCreateManyParams.ts +0 -7
  88. package/src/queries/create/types/BaseCreateOneParams.ts +0 -7
  89. package/src/queries/create/types/CreateManyParams.ts +0 -15
  90. package/src/queries/create/types/CreateManyResult.ts +0 -17
  91. package/src/queries/create/types/CreateOneParams.ts +0 -22
  92. package/src/queries/create/types/CreateOneResult.ts +0 -17
  93. package/src/queries/createMany.ts +0 -38
  94. package/src/queries/createOne.ts +0 -27
  95. package/src/queries/delete/buildDelete.ts +0 -56
  96. package/src/queries/delete/deleteResultSchema.ts +0 -23
  97. package/src/queries/delete/deleteToSql.ts +0 -48
  98. package/src/queries/delete/tests/deleteOne.test.ts +0 -108
  99. package/src/queries/delete/types/BaseDeleteParams.ts +0 -9
  100. package/src/queries/delete/types/DeleteManyResult.ts +0 -16
  101. package/src/queries/delete/types/DeleteOneResult.ts +0 -16
  102. package/src/queries/delete/types/DeleteParams.ts +0 -12
  103. package/src/queries/deleteMany.ts +0 -33
  104. package/src/queries/deleteOne.ts +0 -32
  105. package/src/queries/find/buildFind.ts +0 -138
  106. package/src/queries/find/findResultSchema.ts +0 -32
  107. package/src/queries/find/findToSql.test.ts +0 -123
  108. package/src/queries/find/findToSql.ts +0 -141
  109. package/src/queries/find/getIncludedManyToManyRelations.ts +0 -49
  110. package/src/queries/find/getIncludedOneToManyRelations.ts +0 -44
  111. package/src/queries/find/tests/findMany.include.test.ts +0 -107
  112. package/src/queries/find/tests/findMany.limit.test-d.ts +0 -75
  113. package/src/queries/find/tests/findMany.limit.test.ts +0 -176
  114. package/src/queries/find/tests/findMany.nullable-relations.test.ts +0 -127
  115. package/src/queries/find/tests/findMany.orderBy.test-d.ts +0 -84
  116. package/src/queries/find/tests/findMany.orderBy.test.ts +0 -184
  117. package/src/queries/find/tests/findMany.select.test-d.ts +0 -117
  118. package/src/queries/find/tests/findMany.select.test.ts +0 -188
  119. package/src/queries/find/tests/findMany.too-deep.test-d.ts +0 -154
  120. package/src/queries/find/tests/findMany.where.test-d.ts +0 -85
  121. package/src/queries/find/tests/findMany.where.test.ts +0 -76
  122. package/src/queries/find/tests/middleware.find.where.test.ts +0 -467
  123. package/src/queries/find/types/BaseFindParams.ts +0 -18
  124. package/src/queries/find/types/FindBuilder.ts +0 -73
  125. package/src/queries/find/types/FindManyParams.ts +0 -24
  126. package/src/queries/find/types/FindManyResult.ts +0 -13
  127. package/src/queries/find/types/FindOneParams.ts +0 -17
  128. package/src/queries/find/types/FindOneResult.ts +0 -50
  129. package/src/queries/findMany.ts +0 -134
  130. package/src/queries/findOne.ts +0 -30
  131. package/src/queries/middleware/Middleware.ts +0 -53
  132. package/src/queries/middleware/ValuesMiddleware.ts +0 -9
  133. package/src/queries/middleware/WhereMiddleware.ts +0 -16
  134. package/src/queries/update/buildUpdate.ts +0 -76
  135. package/src/queries/update/tests/updateOne.test.ts +0 -118
  136. package/src/queries/update/types/BaseUpdateParams.ts +0 -10
  137. package/src/queries/update/types/UpdateManyResult.ts +0 -16
  138. package/src/queries/update/types/UpdateOneResult.ts +0 -16
  139. package/src/queries/update/types/UpdateParams.ts +0 -14
  140. package/src/queries/update/types/UpdateValues.ts +0 -12
  141. package/src/queries/update/updateResultSchema.ts +0 -23
  142. package/src/queries/update/updateToSql.ts +0 -43
  143. package/src/queries/updateMany.ts +0 -33
  144. package/src/queries/updateOne.ts +0 -33
  145. package/src/queries/util/hasConditions.test.ts +0 -36
  146. package/src/queries/util/hasConditions.ts +0 -14
  147. package/src/queries/util/rowToObject.test.ts +0 -76
  148. package/src/queries/util/rowToObject.ts +0 -13
  149. package/src/queries/util/tableAlias.test.ts +0 -20
  150. package/src/queries/util/tableAlias.ts +0 -10
  151. package/src/schema/populate/composeMiddleware.ts +0 -51
  152. package/src/schema/populate/populateConfiguration.ts +0 -48
  153. package/src/schema/populate/populateModel.ts +0 -98
  154. package/src/schema/populate/suggestedColumnSchema.ts +0 -62
  155. package/src/schema/types/base/BaseColumn.ts +0 -10
  156. package/src/schema/types/base/BaseConfiguration.ts +0 -14
  157. package/src/schema/types/base/BaseModel.ts +0 -12
  158. package/src/schema/types/base/BaseModels.ts +0 -3
  159. package/src/schema/types/base/BaseOrm.ts +0 -8
  160. package/src/schema/types/base/BaseRelation.ts +0 -19
  161. package/src/schema/types/base/BaseRelations.ts +0 -3
  162. package/src/schema/types/constraints/ForeignKey.ts +0 -13
  163. package/src/schema/types/constraints/UniqueConstraint.ts +0 -9
  164. package/src/schema/types/helpers/ColumnName.ts +0 -6
  165. package/src/schema/types/helpers/ColumnType.ts +0 -23
  166. package/src/schema/types/helpers/Columns.ts +0 -3
  167. package/src/schema/types/helpers/HasDefault.ts +0 -11
  168. package/src/schema/types/helpers/IsNullable.ts +0 -7
  169. package/src/schema/types/helpers/IsProvided.ts +0 -8
  170. package/src/schema/types/helpers/IsSerial.ts +0 -10
  171. package/src/schema/types/helpers/ModelName.ts +0 -6
  172. package/src/schema/types/loose/LooseColumnDefinition.ts +0 -80
  173. package/src/schema/types/loose/LooseModelDefinition.ts +0 -47
  174. package/src/schema/types/loose/LooseModelDefinitions.ts +0 -3
  175. package/src/schema/types/loose/LooseRelationDefinition.ts +0 -10
  176. package/src/schema/types/loose/LooseRelationsDefinition.ts +0 -8
  177. package/src/schema/types/loose/LooseRelationsDefinitions.ts +0 -7
  178. package/src/schema/types/postgres/DataType.ts +0 -65
  179. package/src/schema/types/relations/ManyToManyRelation.ts +0 -15
  180. package/src/schema/types/relations/ManyToOneRelation.ts +0 -14
  181. package/src/schema/types/relations/OneToManyRelation.ts +0 -12
  182. package/src/schema/types/strict/ColumnDefinition.ts +0 -81
  183. package/src/schema/types/strict/ModelDefinition.ts +0 -47
  184. package/src/schema/types/strict/ModelDefinitions.ts +0 -3
  185. package/src/schema/types/strict/RelationDefinition.ts +0 -13
  186. package/src/schema/types/strict/RelationsDefinition.ts +0 -8
  187. package/src/schema/types/strict/RelationsDefinitions.ts +0 -7
  188. package/src/schema/validate/validateConfiguration.ts +0 -9
  189. package/src/schema/validate/validateModel.ts +0 -32
  190. package/src/sql/SQLStatement.test.ts +0 -112
  191. package/src/sql/SQLStatement.ts +0 -86
  192. package/src/sql/index.ts +0 -2
  193. package/src/sql/sql.ts +0 -47
  194. package/src/test/db/index.ts +0 -27
  195. package/src/test/db/models/foo.model.ts +0 -24
  196. package/src/test/db/models/foo.relations.ts +0 -4
  197. package/src/test/db/models/post.model.ts +0 -34
  198. package/src/test/db/models/post.relations.ts +0 -21
  199. package/src/test/db/models/tenant.model.ts +0 -14
  200. package/src/test/db/models/tenant.relations.ts +0 -22
  201. package/src/test/db/models/tenantUser.model.ts +0 -23
  202. package/src/test/db/models/tenantUser.relations.ts +0 -15
  203. package/src/test/db/models/user.model.ts +0 -29
  204. package/src/test/db/models/user.relations.ts +0 -38
  205. package/src/test/db/models.ts +0 -15
  206. package/src/test/db/relations.ts +0 -13
  207. package/src/test/gen/column.ts +0 -39
  208. package/src/test/gen/index.ts +0 -2
  209. package/src/test/gen/model.ts +0 -58
  210. package/src/test/gen/sqldate.ts +0 -8
  211. package/src/test/globalSetup.ts +0 -6
  212. package/src/test/seed/index.ts +0 -75
  213. package/src/test/util/withRollback.ts +0 -18
  214. package/src/test/util/withTransaction.ts +0 -19
  215. package/src/types/ColumnName.ts +0 -6
  216. package/src/types/ColumnType.ts +0 -20
  217. package/src/types/Configuration.ts +0 -21
  218. package/src/types/ModelType.ts +0 -20
  219. package/src/types/util/DeepRequired.ts +0 -7
  220. package/src/types/util/DisallowExtraKeys.ts +0 -5
  221. package/src/types/util/NonEmptyArray.ts +0 -1
  222. package/src/types/util/Simplify.ts +0 -8
  223. package/src/util/ensureArray.ts +0 -4
  224. package/src/util/interleave.test.ts +0 -35
  225. package/src/util/interleave.ts +0 -8
  226. package/tsconfig.json +0 -18
  227. package/vitest.config.ts +0 -15
@@ -1,467 +0,0 @@
1
- import { snakeCase } from "lodash-es";
2
- import pg from "pg";
3
- import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
4
-
5
- import { orm } from "../../../orm";
6
- import { models, relations } from "../../../test/db";
7
- import { seed } from "../../../test/seed";
8
- import { $not } from "../../clauses/where/operators";
9
- import { Middleware } from "../../middleware/Middleware";
10
-
11
- export const timestamps: Middleware = {
12
- create: {
13
- values: (values, { model, config }) => {
14
- if ("createdAt" in config.models[model].columns) {
15
- return {
16
- createdAt: new Date(),
17
- ...values,
18
- };
19
- }
20
- return values;
21
- },
22
- },
23
- update: {
24
- set: (set, { model, config }) => {
25
- if ("updatedAt" in config.models[model].columns) {
26
- return {
27
- updatedAt: new Date(),
28
- ...set,
29
- };
30
- } else {
31
- return set;
32
- }
33
- },
34
- },
35
- };
36
-
37
- export const softdelete: Middleware = {
38
- where: (where, { model, config }) => {
39
- if ("deletedAt" in config.models[model].columns) {
40
- return {
41
- deletedAt: null,
42
- ...where,
43
- };
44
- } else {
45
- return where;
46
- }
47
- },
48
- delete: {
49
- deleteOne: (params, { model, config, deleteOne, updateOne }) => {
50
- if ("deletedAt" in config.models[model].columns) {
51
- return updateOne({
52
- ...params,
53
- set: {
54
- deletedAt: new Date(),
55
- },
56
- });
57
- } else return deleteOne(params);
58
- },
59
- deleteMany: (params, { model, config, deleteMany, updateMany }) => {
60
- if ("deletedAt" in config.models[model].columns) {
61
- return updateMany({
62
- ...params,
63
- set: {
64
- deletedAt: new Date(),
65
- },
66
- });
67
- } else return deleteMany(params);
68
- },
69
- },
70
- };
71
-
72
- describe("middleware.find.where", () => {
73
- beforeEach(() => {
74
- vi.useFakeTimers();
75
- });
76
-
77
- afterEach(() => {
78
- vi.useRealTimers();
79
- });
80
-
81
- test("it allows modifying the query object before a find operation", async () => {
82
- const db = orm({
83
- models,
84
- relations,
85
- extensions: ["uuid-ossp"],
86
- naming: { column: snakeCase },
87
- schema: "casekit",
88
- middleware: [softdelete],
89
- pool: new pg.Pool(),
90
- });
91
- await db.transact(
92
- async (db) => {
93
- const { users } = await seed(db, {
94
- users: [
95
- {
96
- username: "Lynne Tillman",
97
- tenants: [{ name: "Popova Park", posts: 2 }],
98
- },
99
- ],
100
- });
101
-
102
- const lynne = users["Lynne Tillman"];
103
-
104
- expect(
105
- await db.findMany("post", {
106
- select: ["title"],
107
- where: { authorId: lynne.id },
108
- orderBy: ["title"],
109
- }),
110
- ).toEqual([{ title: "Post a" }, { title: "Post b" }]);
111
-
112
- await db.updateMany("post", {
113
- set: { deletedAt: new Date() },
114
- where: { authorId: lynne.id },
115
- });
116
-
117
- expect(
118
- await db.findMany("post", {
119
- select: ["title"],
120
- where: { authorId: lynne.id },
121
- orderBy: ["title"],
122
- }),
123
- ).toEqual([]);
124
- },
125
- { rollback: true },
126
- );
127
- });
128
-
129
- test("it applies to N:1 relations", async () => {
130
- const db = orm({
131
- models,
132
- relations,
133
- extensions: ["uuid-ossp"],
134
- naming: { column: snakeCase },
135
- schema: "casekit",
136
- middleware: [softdelete],
137
- pool: new pg.Pool(),
138
- });
139
- await db.transact(
140
- async (db) => {
141
- const { users } = await seed(db, {
142
- users: [
143
- {
144
- username: "Lynne Tillman",
145
- tenants: [{ name: "Popova Park", posts: 2 }],
146
- },
147
- ],
148
- });
149
-
150
- const lynne = users["Lynne Tillman"];
151
-
152
- expect(
153
- await db.findMany("post", {
154
- select: ["title"],
155
- where: { authorId: lynne.id },
156
- orderBy: ["title"],
157
- }),
158
- ).toEqual([{ title: "Post a" }, { title: "Post b" }]);
159
-
160
- await db.updateOne("user", {
161
- set: { deletedAt: new Date() },
162
- where: { id: lynne.id },
163
- });
164
-
165
- expect(
166
- await db.findMany("post", {
167
- select: ["title"],
168
- include: { author: { select: ["username"] } },
169
- orderBy: ["title"],
170
- }),
171
- ).toEqual([]);
172
- },
173
- { rollback: true },
174
- );
175
- });
176
-
177
- test("it applies to 1:N relations", async () => {
178
- const db = orm({
179
- models,
180
- relations,
181
- extensions: ["uuid-ossp"],
182
- naming: { column: snakeCase },
183
- schema: "casekit",
184
- middleware: [softdelete],
185
- pool: new pg.Pool(),
186
- });
187
- await db.transact(
188
- async (db) => {
189
- const { users } = await seed(db, {
190
- users: [
191
- {
192
- username: "Lynne Tillman",
193
- tenants: [{ name: "Popova Park", posts: 2 }],
194
- },
195
- ],
196
- });
197
-
198
- const lynne = users["Lynne Tillman"];
199
-
200
- expect(
201
- await db.findMany("post", {
202
- select: ["title"],
203
- where: { authorId: lynne.id },
204
- orderBy: ["title"],
205
- }),
206
- ).toEqual([{ title: "Post a" }, { title: "Post b" }]);
207
-
208
- await db.updateOne("post", {
209
- set: { deletedAt: new Date() },
210
- where: { title: "Post a" },
211
- });
212
-
213
- expect(
214
- await db.findOne("user", {
215
- select: ["username"],
216
- include: { posts: { select: ["title"] } },
217
- where: { id: lynne.id },
218
- }),
219
- ).toEqual({
220
- username: "Lynne Tillman",
221
- posts: [{ title: "Post b" }],
222
- });
223
- },
224
- { rollback: true },
225
- );
226
- });
227
-
228
- test("it applies to N:N relations", async () => {
229
- const db = orm({
230
- models,
231
- relations,
232
- extensions: ["uuid-ossp"],
233
- naming: { column: snakeCase },
234
- schema: "casekit",
235
- middleware: [softdelete],
236
- pool: new pg.Pool(),
237
- });
238
- await db.transact(
239
- async (db) => {
240
- await seed(db, {
241
- users: [
242
- {
243
- username: "Lynne Tillman",
244
- tenants: [{ name: "Popova Park", posts: 2 }],
245
- },
246
- ],
247
- });
248
-
249
- expect(
250
- await db.findMany("tenant", {
251
- select: ["name"],
252
- include: { users: { select: ["username"] } },
253
- orderBy: ["name"],
254
- }),
255
- ).toEqual([
256
- {
257
- name: "Popova Park",
258
- users: [{ username: "Lynne Tillman" }],
259
- },
260
- ]);
261
-
262
- await db.updateOne("user", {
263
- set: { deletedAt: new Date() },
264
- where: { username: "Lynne Tillman" },
265
- });
266
-
267
- expect(
268
- await db.findOne("tenant", {
269
- select: ["name"],
270
- include: { users: { select: ["username"] } },
271
- where: { name: "Popova Park" },
272
- }),
273
- ).toEqual({
274
- name: "Popova Park",
275
- users: [],
276
- });
277
- },
278
- { rollback: true },
279
- );
280
- });
281
-
282
- test("it works even if there is no where clause in the original query", async () => {
283
- const db = orm({
284
- models,
285
- relations,
286
- extensions: ["uuid-ossp"],
287
- naming: { column: snakeCase },
288
- schema: "casekit",
289
- middleware: [softdelete],
290
- pool: new pg.Pool(),
291
- });
292
- await db.transact(
293
- async (db) => {
294
- const { users } = await seed(db, {
295
- users: [
296
- {
297
- username: "Lynne Tillman",
298
- tenants: [{ name: "Popova Park", posts: 2 }],
299
- },
300
- ],
301
- });
302
-
303
- const lynne = users["Lynne Tillman"];
304
-
305
- expect(
306
- await db.findMany("post", {
307
- select: ["title"],
308
- where: { authorId: lynne.id },
309
- orderBy: ["title"],
310
- }),
311
- ).toEqual([{ title: "Post a" }, { title: "Post b" }]);
312
-
313
- await db.updateMany("post", {
314
- set: { deletedAt: new Date() },
315
- where: { authorId: lynne.id },
316
- });
317
-
318
- expect(
319
- await db.findMany("post", { select: ["title"] }),
320
- ).toEqual([]);
321
- },
322
- { rollback: true },
323
- );
324
- });
325
-
326
- test("multilpe middlewares can be applied", async () => {
327
- const db = orm({
328
- models,
329
- relations,
330
- extensions: ["uuid-ossp"],
331
- naming: { column: snakeCase },
332
- schema: "casekit",
333
- middleware: [softdelete, timestamps],
334
- pool: new pg.Pool(),
335
- });
336
-
337
- await db.transact(
338
- async (db) => {
339
- const { users } = await seed(db, {
340
- users: [
341
- {
342
- username: "Lynne Tillman",
343
- tenants: [{ name: "Popova Park", posts: 2 }],
344
- },
345
- ],
346
- });
347
-
348
- vi.setSystemTime(new Date("2022-05-23"));
349
- const lynne = users["Lynne Tillman"];
350
-
351
- expect(
352
- await db.findMany("post", {
353
- select: ["title", "updatedAt"],
354
- where: { authorId: lynne.id },
355
- orderBy: ["title"],
356
- }),
357
- ).toEqual([
358
- { title: "Post a", updatedAt: null },
359
- { title: "Post b", updatedAt: null },
360
- ]);
361
-
362
- await db.updateMany("post", {
363
- set: { title: "Post AAAAAA" },
364
- where: { authorId: lynne.id, title: "Post a" },
365
- });
366
- await db.updateMany("post", {
367
- set: { deletedAt: new Date() },
368
- where: { authorId: lynne.id, title: "Post b" },
369
- });
370
-
371
- // updatedAt field has been set by the timestamps middleware
372
- // and Post b is not returned by the query because of the softdelete middleware
373
- expect(
374
- await db.findMany("post", {
375
- select: ["title", "updatedAt"],
376
- }),
377
- ).toEqual([
378
- {
379
- title: "Post AAAAAA",
380
- updatedAt: new Date("2022-05-23"),
381
- },
382
- ]);
383
- },
384
- { rollback: true },
385
- );
386
- });
387
- test("it allows overriding deleteOne and deleteMany functions", async () => {
388
- const db = orm({
389
- models,
390
- relations,
391
- extensions: ["uuid-ossp"],
392
- naming: { column: snakeCase },
393
- schema: "casekit",
394
- middleware: [softdelete, timestamps],
395
- pool: new pg.Pool(),
396
- });
397
- await db.transact(
398
- async (db) => {
399
- const { users } = await seed(db, {
400
- users: [
401
- {
402
- username: "Lynne Tillman",
403
- tenants: [{ name: "Popova Park", posts: 2 }],
404
- },
405
- ],
406
- });
407
-
408
- const lynne = users["Lynne Tillman"];
409
-
410
- expect(
411
- await db.findMany("post", {
412
- select: ["title", "updatedAt"],
413
- where: { authorId: lynne.id },
414
- orderBy: ["title"],
415
- }),
416
- ).toEqual([
417
- { title: "Post a", updatedAt: null },
418
- { title: "Post b", updatedAt: null },
419
- ]);
420
-
421
- vi.setSystemTime(new Date("2022-05-23"));
422
-
423
- await db.deleteMany("post", {
424
- where: { authorId: lynne.id, title: "Post a" },
425
- });
426
-
427
- expect(
428
- await db.findMany("post", {
429
- select: ["title", "updatedAt", "deletedAt"],
430
- where: { deletedAt: { [$not]: null } },
431
- }),
432
- ).toEqual([
433
- {
434
- title: "Post a",
435
- updatedAt: new Date("2022-05-23"),
436
- deletedAt: new Date("2022-05-23"),
437
- },
438
- ]);
439
-
440
- vi.setSystemTime(new Date("2022-05-24"));
441
-
442
- await db.deleteOne("post", {
443
- where: { authorId: lynne.id, title: "Post b" },
444
- });
445
-
446
- expect(
447
- await db.findMany("post", {
448
- select: ["title", "updatedAt", "deletedAt"],
449
- where: { deletedAt: { [$not]: null } },
450
- }),
451
- ).toEqual([
452
- {
453
- title: "Post a",
454
- updatedAt: new Date("2022-05-23"),
455
- deletedAt: new Date("2022-05-23"),
456
- },
457
- {
458
- title: "Post b",
459
- updatedAt: new Date("2022-05-24"),
460
- deletedAt: new Date("2022-05-24"),
461
- },
462
- ]);
463
- },
464
- { rollback: true },
465
- );
466
- });
467
- });
@@ -1,18 +0,0 @@
1
- import { ModelName } from "../../../schema/types/helpers/ModelName";
2
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
3
- import { LateralByClause } from "../../clauses/LateralByClause";
4
- import { WhereClause } from "../../clauses/WhereClause";
5
-
6
- export type BaseFindParams = {
7
- select: string[];
8
- include?: Partial<Record<string, Omit<BaseFindParams, "for">>>;
9
- where?: WhereClause<
10
- LooseModelDefinitions,
11
- ModelName<LooseModelDefinitions>
12
- >;
13
- limit?: number;
14
- offset?: number;
15
- lateralBy?: LateralByClause;
16
- for?: "update" | "no key update" | "share" | "key share";
17
- orderBy?: (string | [string, "asc" | "desc"])[];
18
- };
@@ -1,73 +0,0 @@
1
- import { ModelName } from "../../../schema/types/helpers/ModelName";
2
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
3
- import { WhereClause } from "../../clauses/WhereClause";
4
-
5
- export type FindBuilder = {
6
- tableIndex: number;
7
-
8
- columns: {
9
- table: string;
10
- name: string;
11
- alias: string;
12
- path: string[];
13
- }[];
14
-
15
- table: {
16
- table: string;
17
- model: string;
18
- schema: string;
19
- alias: string;
20
- joins: Join[];
21
- conditions?: WhereClause<
22
- LooseModelDefinitions,
23
- ModelName<LooseModelDefinitions>
24
- >;
25
- where?: WhereClause<
26
- LooseModelDefinitions,
27
- ModelName<LooseModelDefinitions>
28
- >;
29
- };
30
-
31
- lateralBy?: {
32
- groupTable: string;
33
- itemTable: string;
34
- columns: {
35
- column: string;
36
- type: string;
37
- values: unknown[];
38
- }[];
39
- };
40
-
41
- for?: "update" | "no key update" | "share" | "key share";
42
-
43
- orderBy: {
44
- table: string;
45
- column: string;
46
- direction: "asc" | "desc";
47
- }[];
48
-
49
- limit?: number;
50
-
51
- offset?: number;
52
- };
53
- export type Join = {
54
- from: {
55
- schema: string;
56
- table: string;
57
- alias: string;
58
- model: string;
59
- columns: string[];
60
- };
61
- to: {
62
- schema: string;
63
- table: string;
64
- alias: string;
65
- model: string;
66
- columns: string[];
67
- };
68
- where?: WhereClause<
69
- LooseModelDefinitions,
70
- ModelName<LooseModelDefinitions>
71
- >;
72
- type?: "inner" | "left";
73
- };
@@ -1,24 +0,0 @@
1
- import { ColumnName } from "../../../schema/types/helpers/ColumnName";
2
- import { ModelName } from "../../../schema/types/helpers/ModelName";
3
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
4
- import { LooseRelationsDefinitions } from "../../../schema/types/loose/LooseRelationsDefinitions";
5
- import { NonEmptyArray } from "../../../types/util/NonEmptyArray";
6
- import { IncludeClause } from "../../clauses/IncludeClause";
7
- import { SelectClause } from "../../clauses/SelectClause";
8
- import { WhereClause } from "../../clauses/WhereClause";
9
-
10
- export type FindManyParams<
11
- Models extends LooseModelDefinitions,
12
- Relations extends LooseRelationsDefinitions<Models>,
13
- M extends ModelName<Models>,
14
- > = {
15
- select: SelectClause<Models[M]>;
16
- include?: IncludeClause<Models, Relations, M>;
17
- where?: WhereClause<Models, M>;
18
- limit?: number;
19
- offset?: number;
20
- orderBy?: NonEmptyArray<
21
- ColumnName<Models[M]> | [ColumnName<Models[M]>, "asc" | "desc"]
22
- >;
23
- for?: "update" | "no key update" | "share" | "key share";
24
- };
@@ -1,13 +0,0 @@
1
- import { ModelName } from "../../../schema/types/helpers/ModelName";
2
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
3
- import { LooseRelationsDefinitions } from "../../../schema/types/loose/LooseRelationsDefinitions";
4
- import { Simplify } from "../../../types/util/Simplify";
5
- import { FindManyParams } from "./FindManyParams";
6
- import { FindOneResult } from "./FindOneResult";
7
-
8
- export type FindManyResult<
9
- Models extends LooseModelDefinitions,
10
- Relations extends LooseRelationsDefinitions<Models>,
11
- M extends ModelName<Models>,
12
- Q extends FindManyParams<Models, Relations, M>,
13
- > = Simplify<FindOneResult<Models, Relations, M, Q>[]>;
@@ -1,17 +0,0 @@
1
- import { ModelName } from "../../../schema/types/helpers/ModelName";
2
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
3
- import { LooseRelationsDefinitions } from "../../../schema/types/loose/LooseRelationsDefinitions";
4
- import { IncludeClause } from "../../clauses/IncludeClause";
5
- import { SelectClause } from "../../clauses/SelectClause";
6
- import { WhereClause } from "../../clauses/WhereClause";
7
-
8
- export type FindOneParams<
9
- Models extends LooseModelDefinitions,
10
- Relations extends LooseRelationsDefinitions<Models>,
11
- M extends ModelName<Models>,
12
- > = {
13
- select: SelectClause<Models[M]>;
14
- where?: WhereClause<Models, M>;
15
- include?: IncludeClause<Models, Relations, M>;
16
- for?: "update" | "no key update" | "share" | "key share";
17
- };
@@ -1,50 +0,0 @@
1
- import { ColumnType } from "../../../schema/types/helpers/ColumnType";
2
- import { ModelName } from "../../../schema/types/helpers/ModelName";
3
- import { LooseModelDefinitions } from "../../../schema/types/loose/LooseModelDefinitions";
4
- import { LooseRelationsDefinitions } from "../../../schema/types/loose/LooseRelationsDefinitions";
5
- import { Simplify } from "../../../types/util/Simplify";
6
- import { IncludedRelationModel } from "../../clauses/include/IncludedRelationModel";
7
- import { IncludedRelationName } from "../../clauses/include/IncludedRelationName";
8
- import { IncludedRelationQuery } from "../../clauses/include/IncludedRelationQuery";
9
- import { FindManyParams } from "./FindManyParams";
10
- import { FindOneParams } from "./FindOneParams";
11
-
12
- export type FindOneResult<
13
- Models extends LooseModelDefinitions,
14
- Relations extends LooseRelationsDefinitions<Models>,
15
- M extends ModelName<Models>,
16
- Q extends
17
- | FindManyParams<Models, Relations, M>
18
- | FindOneParams<Models, Relations, M>,
19
- > = Readonly<
20
- Simplify<
21
- {
22
- [C in Extract<Q["select"][number], string>]: ColumnType<
23
- Models,
24
- M,
25
- C
26
- >;
27
- } & (undefined extends Q["include"]
28
- ? unknown
29
- : {
30
- [R in IncludedRelationName<
31
- Models,
32
- Relations,
33
- M,
34
- Q
35
- >]: Relations[M][R] extends { type: "N:1" }
36
- ? FindOneResult<
37
- Models,
38
- Relations,
39
- IncludedRelationModel<Models, Relations, M, R>,
40
- IncludedRelationQuery<Models, Relations, M, R, Q>
41
- >
42
- : FindOneResult<
43
- Models,
44
- Relations,
45
- IncludedRelationModel<Models, Relations, M, R>,
46
- IncludedRelationQuery<Models, Relations, M, R, Q>
47
- >[];
48
- })
49
- >
50
- >;