@c9up/atlas 0.2.0 → 0.2.2

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 (234) hide show
  1. package/README.md +8 -0
  2. package/db.darwin-arm64.node +0 -0
  3. package/db.darwin-x64.node +0 -0
  4. package/db.linux-arm64-gnu.node +0 -0
  5. package/db.linux-x64-gnu.node +0 -0
  6. package/db.win32-x64-msvc.node +0 -0
  7. package/dist/AtlasProvider.d.ts +60 -7
  8. package/dist/AtlasProvider.d.ts.map +1 -1
  9. package/dist/AtlasProvider.js +204 -38
  10. package/dist/AtlasProvider.js.map +1 -1
  11. package/dist/BaseEntity.d.ts +17 -0
  12. package/dist/BaseEntity.d.ts.map +1 -1
  13. package/dist/BaseEntity.js.map +1 -1
  14. package/dist/BaseModel.d.ts +63 -27
  15. package/dist/BaseModel.d.ts.map +1 -1
  16. package/dist/BaseModel.js +108 -51
  17. package/dist/BaseModel.js.map +1 -1
  18. package/dist/BaseRepository.d.ts +11 -1
  19. package/dist/BaseRepository.d.ts.map +1 -1
  20. package/dist/BaseRepository.js +95 -20
  21. package/dist/BaseRepository.js.map +1 -1
  22. package/dist/ConnectionManager.d.ts +106 -0
  23. package/dist/ConnectionManager.d.ts.map +1 -0
  24. package/dist/ConnectionManager.js +228 -0
  25. package/dist/ConnectionManager.js.map +1 -0
  26. package/dist/ModelQuery.d.ts +256 -43
  27. package/dist/ModelQuery.d.ts.map +1 -1
  28. package/dist/ModelQuery.js +899 -231
  29. package/dist/ModelQuery.js.map +1 -1
  30. package/dist/Transaction.d.ts +54 -1
  31. package/dist/Transaction.d.ts.map +1 -1
  32. package/dist/Transaction.js +121 -59
  33. package/dist/Transaction.js.map +1 -1
  34. package/dist/adapters/NapiDbAdapter.d.ts +11 -0
  35. package/dist/adapters/NapiDbAdapter.d.ts.map +1 -1
  36. package/dist/adapters/NapiDbAdapter.js +35 -7
  37. package/dist/adapters/NapiDbAdapter.js.map +1 -1
  38. package/dist/console/contract.d.ts +62 -0
  39. package/dist/console/contract.d.ts.map +1 -0
  40. package/dist/console/contract.js +38 -0
  41. package/dist/console/contract.js.map +1 -0
  42. package/dist/console/factoryCommands.d.ts +23 -0
  43. package/dist/console/factoryCommands.d.ts.map +1 -0
  44. package/dist/console/factoryCommands.js +62 -0
  45. package/dist/console/factoryCommands.js.map +1 -0
  46. package/dist/console/migrationCommands.d.ts +38 -8
  47. package/dist/console/migrationCommands.d.ts.map +1 -1
  48. package/dist/console/migrationCommands.js +157 -50
  49. package/dist/console/migrationCommands.js.map +1 -1
  50. package/dist/console/schemaCheckCommand.d.ts +11 -17
  51. package/dist/console/schemaCheckCommand.d.ts.map +1 -1
  52. package/dist/console/schemaCheckCommand.js +21 -15
  53. package/dist/console/schemaCheckCommand.js.map +1 -1
  54. package/dist/console/schemaDumpCommand.d.ts +30 -0
  55. package/dist/console/schemaDumpCommand.d.ts.map +1 -0
  56. package/dist/console/schemaDumpCommand.js +69 -0
  57. package/dist/console/schemaDumpCommand.js.map +1 -0
  58. package/dist/console/schemaGenerateCommand.d.ts +100 -0
  59. package/dist/console/schemaGenerateCommand.d.ts.map +1 -0
  60. package/dist/console/schemaGenerateCommand.js +246 -0
  61. package/dist/console/schemaGenerateCommand.js.map +1 -0
  62. package/dist/console/seederCommands.d.ts +46 -0
  63. package/dist/console/seederCommands.d.ts.map +1 -0
  64. package/dist/console/seederCommands.js +136 -0
  65. package/dist/console/seederCommands.js.map +1 -0
  66. package/dist/decorators/entity.d.ts +13 -2
  67. package/dist/decorators/entity.d.ts.map +1 -1
  68. package/dist/decorators/entity.js +10 -0
  69. package/dist/decorators/entity.js.map +1 -1
  70. package/dist/decorators/hooks.d.ts +3 -3
  71. package/dist/decorators/hooks.d.ts.map +1 -1
  72. package/dist/decorators/hooks.js.map +1 -1
  73. package/dist/events.d.ts +5 -0
  74. package/dist/events.d.ts.map +1 -1
  75. package/dist/events.js.map +1 -1
  76. package/dist/factories.d.ts +8 -0
  77. package/dist/factories.d.ts.map +1 -0
  78. package/dist/factories.js +8 -0
  79. package/dist/factories.js.map +1 -0
  80. package/dist/index.d.ts +11 -5
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +12 -4
  83. package/dist/index.js.map +1 -1
  84. package/dist/lucid-schema.d.ts +15 -0
  85. package/dist/lucid-schema.d.ts.map +1 -0
  86. package/dist/lucid-schema.js +16 -0
  87. package/dist/lucid-schema.js.map +1 -0
  88. package/dist/orm.d.ts +14 -0
  89. package/dist/orm.d.ts.map +1 -0
  90. package/dist/orm.js +14 -0
  91. package/dist/orm.js.map +1 -0
  92. package/dist/query/DatabaseQueryBuilder.d.ts +557 -0
  93. package/dist/query/DatabaseQueryBuilder.d.ts.map +1 -0
  94. package/dist/query/DatabaseQueryBuilder.js +1798 -0
  95. package/dist/query/DatabaseQueryBuilder.js.map +1 -0
  96. package/dist/query/DmlBuilder.d.ts +62 -0
  97. package/dist/query/DmlBuilder.d.ts.map +1 -0
  98. package/dist/query/DmlBuilder.js +84 -0
  99. package/dist/query/DmlBuilder.js.map +1 -0
  100. package/dist/query/QueryBuilder.d.ts +5 -0
  101. package/dist/query/QueryBuilder.d.ts.map +1 -1
  102. package/dist/query/QueryBuilder.js +7 -0
  103. package/dist/query/QueryBuilder.js.map +1 -1
  104. package/dist/query/RawQueryBuilder.d.ts +47 -0
  105. package/dist/query/RawQueryBuilder.d.ts.map +1 -0
  106. package/dist/query/RawQueryBuilder.js +138 -0
  107. package/dist/query/RawQueryBuilder.js.map +1 -0
  108. package/dist/query/interpolate.d.ts +45 -0
  109. package/dist/query/interpolate.d.ts.map +1 -0
  110. package/dist/query/interpolate.js +51 -0
  111. package/dist/query/interpolate.js.map +1 -0
  112. package/dist/query/native.d.ts +8 -0
  113. package/dist/query/native.d.ts.map +1 -1
  114. package/dist/query/native.js +14 -0
  115. package/dist/query/native.js.map +1 -1
  116. package/dist/query/operators.d.ts +4 -0
  117. package/dist/query/operators.d.ts.map +1 -0
  118. package/dist/query/operators.js +27 -0
  119. package/dist/query/operators.js.map +1 -0
  120. package/dist/schema/Migration.d.ts +31 -7
  121. package/dist/schema/Migration.d.ts.map +1 -1
  122. package/dist/schema/Migration.js +34 -7
  123. package/dist/schema/Migration.js.map +1 -1
  124. package/dist/schema/MigrationRunner.d.ts +56 -6
  125. package/dist/schema/MigrationRunner.d.ts.map +1 -1
  126. package/dist/schema/MigrationRunner.js +382 -112
  127. package/dist/schema/MigrationRunner.js.map +1 -1
  128. package/dist/schema/Schema.d.ts +59 -2
  129. package/dist/schema/Schema.d.ts.map +1 -1
  130. package/dist/schema/Schema.js +143 -9
  131. package/dist/schema/Schema.js.map +1 -1
  132. package/dist/schema/SchemaDumper.d.ts +121 -0
  133. package/dist/schema/SchemaDumper.d.ts.map +1 -0
  134. package/dist/schema/SchemaDumper.js +365 -0
  135. package/dist/schema/SchemaDumper.js.map +1 -0
  136. package/dist/schema/Seeder.d.ts +13 -0
  137. package/dist/schema/Seeder.d.ts.map +1 -1
  138. package/dist/schema/Seeder.js +28 -5
  139. package/dist/schema/Seeder.js.map +1 -1
  140. package/dist/schema/TableBuilder.d.ts +27 -8
  141. package/dist/schema/TableBuilder.d.ts.map +1 -1
  142. package/dist/schema/TableBuilder.js +50 -12
  143. package/dist/schema/TableBuilder.js.map +1 -1
  144. package/dist/schema/catalog.d.ts +25 -1
  145. package/dist/schema/catalog.d.ts.map +1 -1
  146. package/dist/schema/catalog.js +69 -22
  147. package/dist/schema/catalog.js.map +1 -1
  148. package/dist/schema/introspect.d.ts +1 -1
  149. package/dist/schema/introspect.d.ts.map +1 -1
  150. package/dist/schema/introspect.js +26 -11
  151. package/dist/schema/introspect.js.map +1 -1
  152. package/dist/seeders.d.ts +7 -0
  153. package/dist/seeders.d.ts.map +1 -0
  154. package/dist/seeders.js +7 -0
  155. package/dist/seeders.js.map +1 -0
  156. package/dist/services/db.d.ts +120 -9
  157. package/dist/services/db.d.ts.map +1 -1
  158. package/dist/services/db.js +182 -26
  159. package/dist/services/db.js.map +1 -1
  160. package/dist/testing/DatabaseCleanup.d.ts +29 -6
  161. package/dist/testing/DatabaseCleanup.d.ts.map +1 -1
  162. package/dist/testing/DatabaseCleanup.js +44 -17
  163. package/dist/testing/DatabaseCleanup.js.map +1 -1
  164. package/dist/testing/DbAssertions.d.ts +54 -0
  165. package/dist/testing/DbAssertions.d.ts.map +1 -0
  166. package/dist/testing/DbAssertions.js +156 -0
  167. package/dist/testing/DbAssertions.js.map +1 -0
  168. package/dist/testing/Factory.d.ts +111 -25
  169. package/dist/testing/Factory.d.ts.map +1 -1
  170. package/dist/testing/Factory.js +331 -56
  171. package/dist/testing/Factory.js.map +1 -1
  172. package/dist/testing/TestUtils.d.ts +49 -0
  173. package/dist/testing/TestUtils.d.ts.map +1 -0
  174. package/dist/testing/TestUtils.js +79 -0
  175. package/dist/testing/TestUtils.js.map +1 -0
  176. package/dist/testing/index.d.ts +3 -1
  177. package/dist/testing/index.d.ts.map +1 -1
  178. package/dist/testing/index.js +3 -1
  179. package/dist/testing/index.js.map +1 -1
  180. package/dist/types/relations.d.ts +31 -0
  181. package/dist/types/relations.d.ts.map +1 -0
  182. package/dist/types/relations.js +20 -0
  183. package/dist/types/relations.js.map +1 -0
  184. package/index.darwin-arm64.node +0 -0
  185. package/index.darwin-x64.node +0 -0
  186. package/index.linux-arm64-gnu.node +0 -0
  187. package/index.linux-x64-gnu.node +0 -0
  188. package/index.win32-x64-msvc.node +0 -0
  189. package/package.json +30 -2
  190. package/src/AtlasProvider.ts +297 -51
  191. package/src/BaseEntity.ts +29 -0
  192. package/src/BaseModel.ts +174 -37
  193. package/src/BaseRepository.ts +136 -17
  194. package/src/ConnectionManager.ts +298 -0
  195. package/src/ModelQuery.ts +1309 -260
  196. package/src/Transaction.ts +194 -60
  197. package/src/adapters/NapiDbAdapter.ts +72 -14
  198. package/src/console/contract.ts +96 -0
  199. package/src/console/factoryCommands.ts +73 -0
  200. package/src/console/migrationCommands.ts +253 -63
  201. package/src/console/schemaCheckCommand.ts +26 -22
  202. package/src/console/schemaDumpCommand.ts +96 -0
  203. package/src/console/schemaGenerateCommand.ts +380 -0
  204. package/src/console/seederCommands.ts +174 -0
  205. package/src/decorators/entity.ts +18 -2
  206. package/src/decorators/hooks.ts +5 -3
  207. package/src/events.ts +5 -0
  208. package/src/factories.ts +10 -0
  209. package/src/index.ts +50 -3
  210. package/src/lucid-schema.ts +22 -0
  211. package/src/orm.ts +13 -0
  212. package/src/query/DatabaseQueryBuilder.ts +2724 -0
  213. package/src/query/DmlBuilder.ts +131 -0
  214. package/src/query/QueryBuilder.ts +8 -0
  215. package/src/query/RawQueryBuilder.ts +173 -0
  216. package/src/query/interpolate.ts +73 -0
  217. package/src/query/native.ts +29 -0
  218. package/src/query/operators.ts +27 -0
  219. package/src/schema/Migration.ts +36 -7
  220. package/src/schema/MigrationRunner.ts +483 -119
  221. package/src/schema/Schema.ts +168 -19
  222. package/src/schema/SchemaDumper.ts +518 -0
  223. package/src/schema/Seeder.ts +47 -10
  224. package/src/schema/TableBuilder.ts +48 -11
  225. package/src/schema/catalog.ts +94 -24
  226. package/src/schema/introspect.ts +26 -9
  227. package/src/seeders.ts +16 -0
  228. package/src/services/db.ts +343 -31
  229. package/src/testing/DatabaseCleanup.ts +73 -21
  230. package/src/testing/DbAssertions.ts +220 -0
  231. package/src/testing/Factory.ts +559 -79
  232. package/src/testing/TestUtils.ts +123 -0
  233. package/src/testing/index.ts +12 -1
  234. package/src/types/relations.ts +43 -0
@@ -17,6 +17,8 @@ import { faker } from "@faker-js/faker";
17
17
  import { BaseRepository } from "../BaseRepository.js";
18
18
  import { getPrimaryKey, getRelationMetadata } from "../decorators/entity.js";
19
19
  import { getConnection } from "../services/db.js";
20
+ import { transaction } from "../Transaction.js";
21
+ const factoryInternals = new WeakMap();
20
22
  /**
21
23
  * Process-wide counter for stubbed primary keys (Lucid's stub id). Every
22
24
  * `makeStubbed*` build with no explicit PK gets the next value, so stubbed
@@ -24,6 +26,12 @@ import { getConnection } from "../services/db.js";
24
26
  * persisted and to key relations/serialization without a round trip.
25
27
  */
26
28
  let stubIdCounter = 0;
29
+ /**
30
+ * Global stub-id generator override (Adonis Lucid `Factory.stubId`). Set via
31
+ * {@link Factory.stubId} when models use non-integer primary keys (uuid, etc.);
32
+ * receives the running counter and the instance, returns the id to assign.
33
+ */
34
+ let globalStubId;
27
35
  /** Keys that must never be written through a recursive merge — prototype-pollution guard. */
28
36
  const FORBIDDEN_MERGE_KEYS = new Set(["__proto__", "constructor", "prototype"]);
29
37
  function isPlainObject(value) {
@@ -58,11 +66,39 @@ function deepMerge(target, source) {
58
66
  * name: 'Test User',
59
67
  * }))
60
68
  */
69
+ /**
70
+ * Adonis Lucid `Factory.define(Model, callback).build()` entry point. `define`
71
+ * captures the model and its defaults; `build()` returns the usable factory
72
+ * builder. Equivalent to the one-call {@link factory} shorthand, which stays.
73
+ *
74
+ * const UserFactory = Factory.define(User, ({ faker }) => ({
75
+ * email: faker.internet.email(),
76
+ * })).build()
77
+ */
78
+ export const Factory = {
79
+ define(entityClass, defaults) {
80
+ return { build: () => factory(entityClass, defaults) };
81
+ },
82
+ /**
83
+ * Override the global stub-id generator (Adonis Lucid `Factory.stubId`). Use
84
+ * when your models have non-integer primary keys — the callback receives the
85
+ * running counter and the instance and returns the id to assign. Pass
86
+ * `null`/nothing to restore the default incrementing integer.
87
+ */
88
+ stubId(generator) {
89
+ globalStubId = generator ?? undefined;
90
+ },
91
+ };
61
92
  export function factory(entityClass, defaults) {
62
93
  // Persistent state — lives across calls.
63
94
  const states = new Map();
64
95
  // Transient state — resets after every `make`/`create`.
65
96
  let pendingOverrides = {};
97
+ // Per-row overrides from `merge([...])`, applied by row index on makeMany/createMany.
98
+ let pendingOverridesList;
99
+ // `merge(callback)` mutators, applied on the built INSTANCE (with the resolved
100
+ // attributes) after instantiation, in call order.
101
+ let pendingMergeFns = [];
66
102
  // Recursive overrides are kept apart from the shallow `pendingOverrides`
67
103
  // because they must deep-merge into `defaults()`, which only exists at build
68
104
  // time — a shallow spread here would clobber a whole nested object.
@@ -73,7 +109,15 @@ export function factory(entityClass, defaults) {
73
109
  const relations = new Map();
74
110
  let pendingWith = [];
75
111
  // Transient `.tap()` callbacks run on the built instance before persistence.
112
+ // Adonis Lucid passes the model, the runtime context, and the factory builder.
76
113
  let pendingTap = [];
114
+ // Transient pivot columns for the NEXT m2m `.with()` link (Adonis Lucid
115
+ // `.pivotAttributes()`), read by the parent factory's applyRelations. A single
116
+ // object applies to every linked row; an array sets per-row values.
117
+ let pendingPivot;
118
+ // Persistent custom instantiation (Adonis Lucid `.newUp`) — replaces
119
+ // `new Model() + setProp` when set.
120
+ let customNewUp;
77
121
  // Persistent connection bound via `.client()`/`.connection()`, used when
78
122
  // create()/createMany() are called without an explicit `db`.
79
123
  let boundClient;
@@ -85,52 +129,124 @@ export function factory(entityClass, defaults) {
85
129
  }
86
130
  return conn;
87
131
  };
132
+ const beforeHooks = {
133
+ create: [],
134
+ makeStubbed: [],
135
+ };
136
+ // `make` has no `before` counterpart in Lucid (nothing to gate before an
137
+ // un-persisted build), so it lives on the after-side only.
138
+ const afterHooks = {
139
+ make: [],
140
+ create: [],
141
+ makeStubbed: [],
142
+ };
88
143
  // Primary-key property, resolved once, for stub-id assignment. Same fallback
89
144
  // as BaseRepository so a model without an explicit `@PrimaryKey` uses `id`.
90
145
  const primaryKey = getPrimaryKey(entityClass) ?? "id";
91
- /** Hydrate a fresh (not-yet-persisted) instance from a data object. */
92
- const newInstance = (data) => {
146
+ /** Hydrate a fresh (not-yet-persisted) instance or defer to `.newUp` when set. */
147
+ const newInstance = (data, ctx) => {
148
+ if (customNewUp)
149
+ return customNewUp(data, ctx);
93
150
  const entity = new entityClass();
94
151
  for (const [key, value] of Object.entries(data)) {
95
152
  entity.setProp(key, value);
96
153
  }
97
154
  return entity;
98
155
  };
156
+ /** Run every tap with the Lucid `(model, ctx, builder)` signature. */
157
+ const runTaps = (taps, entity, ctx) => {
158
+ for (const tap of taps)
159
+ tap(entity, ctx, builder);
160
+ };
99
161
  /** Build a stubbed instance: hydrate, run taps, give it a stub id if none was
100
162
  * supplied, then mark persisted so it mirrors a fetched row. Taps run before
101
163
  * `markAsPersisted` so tapped fields land in the clean snapshot. */
102
- const stub = (data, taps) => {
103
- const entity = newInstance(data);
104
- for (const tap of taps)
105
- tap(entity);
106
- if (data[primaryKey] === undefined) {
107
- entity.setProp(primaryKey, ++stubIdCounter);
164
+ /** Build the runtime context for a build (Adonis Lucid factory `ctx`). */
165
+ const makeCtx = (isStubbed) => ({
166
+ faker,
167
+ isStubbed,
168
+ $trx: boundClient,
169
+ });
170
+ const stub = (data, taps, mergeFns, stateNames, ctx) => {
171
+ const entity = newInstance(data, ctx);
172
+ applyMergeFns(entity, data, mergeFns, ctx);
173
+ applyStates(entity, stateNames, ctx);
174
+ runTaps(taps, entity, ctx);
175
+ // before('makeStubbed') runs BEFORE the stub id, so a hook can set the PK.
176
+ for (const hook of beforeHooks.makeStubbed)
177
+ hook(builder, entity, ctx);
178
+ // Assign a stub id only when neither the data NOR a before hook set the PK.
179
+ // A global `Factory.stubId` override generates it (uuid, etc.) when set.
180
+ if (entity[primaryKey] === undefined) {
181
+ const next = ++stubIdCounter;
182
+ entity.setProp(primaryKey, globalStubId ? globalStubId(next, entity) : next);
108
183
  }
109
184
  entity.markAsPersisted();
185
+ for (const hook of afterHooks.makeStubbed)
186
+ hook(builder, entity, ctx);
110
187
  return entity;
111
188
  };
112
- const buildData = () => {
189
+ const buildData = (ctx, index = 0) => {
113
190
  let data = {
114
- ...defaults({ faker }),
191
+ ...defaults(ctx),
115
192
  ...pendingOverrides,
193
+ // Per-row array overrides (merge([...])) win over the shared object.
194
+ ...(pendingOverridesList?.[index] ?? {}),
116
195
  };
117
196
  // Deep overrides layer on top of the shallow one so nested defaults survive.
118
197
  if (Object.keys(pendingRecursive).length > 0) {
119
198
  data = deepMerge(data, pendingRecursive);
120
199
  }
121
- for (const name of pendingStates) {
200
+ return data;
201
+ };
202
+ /**
203
+ * Run `merge(callback)` mutators on the built INSTANCE (Adonis Lucid passes the
204
+ * model, the resolved attributes, and the context). Runs before states/taps.
205
+ */
206
+ const applyMergeFns = (entity, attributes, mergeFns, ctx) => {
207
+ for (const fn of mergeFns)
208
+ fn(entity, attributes, ctx);
209
+ };
210
+ /**
211
+ * Run the named states on the built INSTANCE (Adonis Lucid). Separated from
212
+ * {@link buildData} because states mutate the model, not the raw attributes.
213
+ */
214
+ const applyStates = (entity, stateNames, ctx) => {
215
+ for (const name of stateNames) {
122
216
  const fn = states.get(name);
123
- if (!fn)
217
+ if (!fn) {
124
218
  throw new Error(`Factory state '${name}' is not defined on ${entityClass.name}Factory`);
125
- fn(data);
219
+ }
220
+ fn(entity, ctx);
126
221
  }
222
+ };
223
+ /** Build one raw row and clear transient state — the persistence paths
224
+ * (`create`/`createMany`) need the plain object, not an instance. */
225
+ const consumeData = (ctx) => {
226
+ const data = buildData(ctx);
227
+ resetPending();
127
228
  return data;
128
229
  };
230
+ /** Build `count` raw rows (distinct faker/Date values per row), then reset. */
231
+ const consumeDataMany = (count, ctx) => {
232
+ const rows = [];
233
+ for (let i = 0; i < count; i++)
234
+ rows.push(buildData(ctx, i));
235
+ resetPending();
236
+ return rows;
237
+ };
129
238
  const resetPending = () => {
130
239
  pendingOverrides = {};
240
+ pendingOverridesList = undefined;
241
+ pendingMergeFns = [];
131
242
  pendingRecursive = {};
132
243
  pendingStates = [];
133
244
  pendingTap = [];
245
+ pendingPivot = undefined;
246
+ // Also clear queued relations, so `.with(...).make()` — which ignores
247
+ // relations — cannot leak them into the NEXT create() (create/createMany
248
+ // capture the queue before make() runs, so they are unaffected).
249
+ pendingWith = [];
134
250
  };
135
251
  /**
136
252
  * Persist one row. With no taps this is the plain `repo.create(data)` path,
@@ -138,22 +254,59 @@ export function factory(entityClass, defaults) {
138
254
  * can mutate the model before the INSERT (Adonis Lucid `.tap`). `save` on a
139
255
  * fresh instance runs the same create hooks as `create`.
140
256
  */
141
- const persist = async (repo, data, taps) => {
142
- if (taps.length === 0)
257
+ const persist = async (repo, data, taps, mergeFns, stateNames, ctx) => {
258
+ if (taps.length === 0 &&
259
+ mergeFns.length === 0 &&
260
+ stateNames.length === 0 &&
261
+ beforeHooks.create.length === 0 &&
262
+ afterHooks.create.length === 0 &&
263
+ !customNewUp) {
143
264
  return repo.create(data);
144
- const entity = newInstance(data);
145
- for (const tap of taps)
146
- tap(entity);
265
+ }
266
+ const entity = newInstance(data, ctx);
267
+ applyMergeFns(entity, data, mergeFns, ctx);
268
+ applyStates(entity, stateNames, ctx);
269
+ runTaps(taps, entity, ctx);
270
+ for (const hook of beforeHooks.create)
271
+ hook(builder, entity, ctx);
147
272
  await repo.save(entity);
273
+ for (const hook of afterHooks.create)
274
+ hook(builder, entity, ctx);
148
275
  return entity;
149
276
  };
277
+ /**
278
+ * Persist a parent and its queued `.with()` relations. With relations, the
279
+ * whole graph runs in a managed transaction (Adonis Lucid: if a related write
280
+ * fails the parent insert rolls back too); the parent is created through a
281
+ * `useTransaction`-bound repo so its `related()` proxies also use the trx.
282
+ * With no relations there's nothing to make atomic — a single insert already
283
+ * is — so it stays on the plain connection.
284
+ */
285
+ const persistWithRelations = async (conn, withReqs, recursive, build) => {
286
+ if (withReqs.length === 0) {
287
+ // ctx.$trx is the connection actually used to persist (an explicit
288
+ // create(db) client, or the bound one) — not just the bound client.
289
+ return build(new BaseRepository(entityClass, conn), {
290
+ faker,
291
+ isStubbed: false,
292
+ $trx: conn,
293
+ });
294
+ }
295
+ return transaction(conn, async (trx) => {
296
+ const repo = new BaseRepository(entityClass, conn).useTransaction(trx);
297
+ const entity = await build(repo, { faker, isStubbed: false, $trx: trx });
298
+ await applyRelations(entity, withReqs, trx, recursive);
299
+ return entity;
300
+ });
301
+ };
150
302
  /**
151
303
  * Persist the queued `.with()` relations for one just-created parent, routing
152
304
  * through the parent's relation proxy so the FK / pivot is wired by the
153
305
  * already-tested relation-write code (not re-derived here).
154
306
  */
155
- const applyRelations = async (parent, reqs, db) => {
307
+ const applyRelations = async (parent, reqs, db, recursive) => {
156
308
  const meta = getRelationMetadata(entityClass);
309
+ const hasRecursive = recursive && Object.keys(recursive).length > 0;
157
310
  for (const req of reqs) {
158
311
  const relMeta = meta.find((r) => r.propertyKey === req.name);
159
312
  if (!relMeta) {
@@ -164,26 +317,60 @@ export function factory(entityClass, defaults) {
164
317
  throw new Error(`Factory .with('${req.name}'): no related factory — declare it with .relation('${req.name}', () => XFactory)`);
165
318
  }
166
319
  const childFactory = resolver();
320
+ // mergeRecursive cascades the SAME overrides onto every related factory
321
+ // (Adonis Lucid) — applied before the callback so an explicit merge in
322
+ // the callback still wins.
323
+ if (hasRecursive && recursive)
324
+ childFactory.mergeRecursive(recursive);
167
325
  if (req.callback)
168
326
  req.callback(childFactory);
327
+ const childInternals = factoryInternals.get(childFactory);
169
328
  const proxy = parent.related(req.name);
329
+ if (proxy.type === "belongsTo") {
330
+ // FK lives on the parent: create() runs the owner's OWN with-graph,
331
+ // then associate re-saves the parent with the FK set.
332
+ const owner = await childFactory.create(db);
333
+ await proxy.associate(owner);
334
+ continue;
335
+ }
336
+ // The proxy-persisted branches bypass the child factory's create() path,
337
+ // so its queued nested `.with()` must be captured before make() clears it,
338
+ // then recursed onto each persisted child (Adonis Lucid nested factories:
339
+ // `post.with('comments', 5)` inside the callback).
340
+ const nestedWith = childInternals?.consumeWith() ?? [];
341
+ // Pivot columns from a `.pivotAttributes()` in the callback — captured
342
+ // now, before make() clears the child's transient state.
343
+ const nestedPivot = childInternals?.consumePivot();
344
+ const recurse = async (children) => {
345
+ if (nestedWith.length === 0 || !childInternals)
346
+ return;
347
+ for (const child of children) {
348
+ // Cascade the recursive overrides further down the graph.
349
+ await childInternals.applyRelations(child, nestedWith, db, recursive);
350
+ }
351
+ };
170
352
  if (proxy.type === "hasMany") {
171
- await proxy.createMany(childFactory.makeMany(req.count));
353
+ await recurse(await proxy.createMany(childFactory.makeMany(req.count)));
172
354
  }
173
355
  else if (proxy.type === "hasOne") {
174
- await proxy.create(childFactory.make());
356
+ await recurse([await proxy.create(childFactory.make())]);
175
357
  }
176
358
  else if (proxy.type === "manyToMany") {
177
- // The m2m proxy's create() inserts the related row AND the pivot link.
178
- for (const row of childFactory.makeMany(req.count)) {
179
- await proxy.create(row);
359
+ // The m2m proxy's create() inserts the related row AND the pivot link,
360
+ // with the `.pivotAttributes()` columns on the pivot row. An array of
361
+ // pivot attrs applies per-row (`pivot[i]`); a single object, to all.
362
+ const rows = childFactory.makeMany(req.count);
363
+ // Adonis Lucid: an array's length must match the related-row count —
364
+ // reject a mismatch rather than silently leave rows without pivot data.
365
+ if (Array.isArray(nestedPivot) && nestedPivot.length !== rows.length) {
366
+ throw new Error(`Factory .with('${req.name}'): pivotAttributes array length (${nestedPivot.length}) must match the related-row count (${rows.length}).`);
367
+ }
368
+ for (let i = 0; i < rows.length; i++) {
369
+ const pivot = Array.isArray(nestedPivot)
370
+ ? nestedPivot[i]
371
+ : nestedPivot;
372
+ await recurse([await proxy.create(rows[i], pivot)]);
180
373
  }
181
- }
182
- else if (proxy.type === "belongsTo") {
183
- // FK lives on the parent: create the owner, then associate re-saves
184
- // the parent with the FK set.
185
- const owner = await childFactory.create(db);
186
- await proxy.associate(owner);
187
374
  }
188
375
  else {
189
376
  throw new Error(`Factory .with('${req.name}'): '${relMeta.type}' relations are not supported`);
@@ -192,7 +379,15 @@ export function factory(entityClass, defaults) {
192
379
  };
193
380
  const builder = {
194
381
  merge(overrides) {
195
- pendingOverrides = { ...pendingOverrides, ...overrides };
382
+ if (typeof overrides === "function") {
383
+ pendingMergeFns.push(overrides);
384
+ }
385
+ else if (Array.isArray(overrides)) {
386
+ pendingOverridesList = overrides;
387
+ }
388
+ else {
389
+ pendingOverrides = { ...pendingOverrides, ...overrides };
390
+ }
196
391
  return builder;
197
392
  },
198
393
  mergeRecursive(overrides) {
@@ -219,6 +414,27 @@ export function factory(entityClass, defaults) {
219
414
  pendingTap.push(fn);
220
415
  return builder;
221
416
  },
417
+ newUp(fn) {
418
+ customNewUp = fn;
419
+ return builder;
420
+ },
421
+ pivotAttributes(attrs) {
422
+ // An array (per-row values) replaces wholesale; objects merge (repeated
423
+ // `.pivotAttributes({...})` accumulate, matching the single-object case).
424
+ pendingPivot =
425
+ Array.isArray(attrs) || Array.isArray(pendingPivot)
426
+ ? attrs
427
+ : { ...pendingPivot, ...attrs };
428
+ return builder;
429
+ },
430
+ before(event, callback) {
431
+ beforeHooks[event].push(callback);
432
+ return builder;
433
+ },
434
+ after(event, callback) {
435
+ afterHooks[event].push(callback);
436
+ return builder;
437
+ },
222
438
  client(connection) {
223
439
  boundClient = connection;
224
440
  return builder;
@@ -231,26 +447,63 @@ export function factory(entityClass, defaults) {
231
447
  boundClient = conn;
232
448
  return builder;
233
449
  },
450
+ query(options) {
451
+ if (options.client) {
452
+ boundClient = options.client;
453
+ }
454
+ else if (options.connection) {
455
+ const conn = getConnection(options.connection);
456
+ if (!conn) {
457
+ throw new Error(`Factory ${entityClass.name}: no connection registered under '${options.connection}'.`);
458
+ }
459
+ boundClient = conn;
460
+ }
461
+ return builder;
462
+ },
234
463
  make() {
235
- const data = buildData();
464
+ // Lucid `make`: an UN-persisted instance (no PK, `$isPersisted` false).
465
+ // Taps run on it, like the other instance-producing paths.
466
+ const taps = pendingTap;
467
+ const mergeFns = pendingMergeFns;
468
+ const stateNames = pendingStates;
469
+ const ctx = makeCtx(false);
470
+ const data = buildData(ctx);
471
+ const entity = newInstance(data, ctx);
472
+ applyMergeFns(entity, data, mergeFns, ctx);
473
+ applyStates(entity, stateNames, ctx);
474
+ runTaps(taps, entity, ctx);
475
+ for (const hook of afterHooks.make)
476
+ hook(builder, entity, ctx);
236
477
  resetPending();
237
- return data;
478
+ return entity;
238
479
  },
239
480
  makeMany(count) {
240
481
  // Re-evaluate defaults for each row so `Date.now()` / faker generate
241
- // distinct values. `buildData()` reads (never mutates) the pending
242
- // overrides/states, so they stay stable across iterations on their own.
482
+ // distinct values, each hydrated into its own un-persisted instance.
483
+ const taps = pendingTap;
484
+ const mergeFns = pendingMergeFns;
485
+ const stateNames = pendingStates;
486
+ const ctx = makeCtx(false);
243
487
  const rows = [];
244
488
  for (let i = 0; i < count; i++) {
245
- rows.push(buildData());
489
+ const data = buildData(ctx, i);
490
+ const entity = newInstance(data, ctx);
491
+ applyMergeFns(entity, data, mergeFns, ctx);
492
+ applyStates(entity, stateNames, ctx);
493
+ runTaps(taps, entity, ctx);
494
+ for (const hook of afterHooks.make)
495
+ hook(builder, entity, ctx);
496
+ rows.push(entity);
246
497
  }
247
498
  resetPending();
248
499
  return rows;
249
500
  },
250
501
  makeStubbed() {
251
502
  const taps = pendingTap;
252
- const data = buildData();
253
- const entity = stub(data, taps);
503
+ const mergeFns = pendingMergeFns;
504
+ const stateNames = pendingStates;
505
+ const ctx = makeCtx(true);
506
+ const entity = stub(buildData(ctx), taps, mergeFns, stateNames, ctx);
254
507
  resetPending();
255
508
  return entity;
256
509
  },
@@ -258,45 +511,67 @@ export function factory(entityClass, defaults) {
258
511
  // Re-evaluate defaults per row (distinct Date.now()/faker values), same
259
512
  // as makeMany; each row then gets its own stub id + taps via `stub`.
260
513
  const taps = pendingTap;
514
+ const mergeFns = pendingMergeFns;
515
+ const stateNames = pendingStates;
516
+ const ctx = makeCtx(true);
261
517
  const rows = [];
262
518
  for (let i = 0; i < count; i++) {
263
- rows.push(stub(buildData(), taps));
519
+ rows.push(stub(buildData(ctx, i), taps, mergeFns, stateNames, ctx));
264
520
  }
265
521
  resetPending();
266
522
  return rows;
267
523
  },
268
524
  async create(db) {
269
- const conn = resolveConnection(db);
270
- // Capture + clear the relation/tap queues before make() (which resets
271
- // pending state) so they aren't lost and a later create() starts clean.
525
+ // Capture + clear the relation/tap queues, then consume the raw data
526
+ // (which resets the rest of the pending state) BEFORE resolveConnection,
527
+ // so a missing connection can't throw with pending overrides/states/with/
528
+ // tap still dirty and leak them into the next create().
272
529
  const withReqs = pendingWith;
273
530
  pendingWith = [];
274
531
  const taps = pendingTap;
275
- const data = builder.make();
276
- const repo = new BaseRepository(entityClass, conn);
277
- const entity = await persist(repo, data, taps);
278
- if (withReqs.length > 0)
279
- await applyRelations(entity, withReqs, conn);
280
- return entity;
532
+ const mergeFns = pendingMergeFns;
533
+ const stateNames = pendingStates;
534
+ // Snapshot the recursive overrides BEFORE consumeData resets them — they
535
+ // cascade onto every related factory (Adonis Lucid `mergeRecursive`).
536
+ const recursive = { ...pendingRecursive };
537
+ const ctx = makeCtx(false);
538
+ const data = consumeData(ctx);
539
+ const conn = resolveConnection(db);
540
+ return persistWithRelations(conn, withReqs, recursive, (repo, txCtx) => persist(repo, data, taps, mergeFns, stateNames, txCtx));
281
541
  },
282
542
  async createMany(count, db) {
283
- const conn = resolveConnection(db);
284
543
  const withReqs = pendingWith;
285
544
  pendingWith = [];
286
545
  const taps = pendingTap;
287
- const rows = builder.makeMany(count);
288
- const repo = new BaseRepository(entityClass, conn);
546
+ const mergeFns = pendingMergeFns;
547
+ const stateNames = pendingStates;
548
+ const recursive = { ...pendingRecursive };
549
+ const ctx = makeCtx(false);
550
+ const rows = consumeDataMany(count, ctx);
551
+ const conn = resolveConnection(db);
289
552
  const created = [];
290
553
  for (const data of rows) {
291
- const entity = await persist(repo, data, taps);
292
- // Each created parent gets its own related rows (Lucid semantics).
293
- if (withReqs.length > 0)
294
- await applyRelations(entity, withReqs, conn);
295
- created.push(entity);
554
+ // Each created parent + its relations are atomic (Lucid semantics).
555
+ created.push(await persistWithRelations(conn, withReqs, recursive, (repo, txCtx) => persist(repo, data, taps, mergeFns, stateNames, txCtx)));
296
556
  }
297
557
  return created;
298
558
  },
299
559
  };
560
+ // Register this builder's internals so a PARENT factory can drive nested
561
+ // `.with()` on it (kept off the public type, keyed by the builder object).
562
+ factoryInternals.set(builder, {
563
+ consumeWith() {
564
+ const reqs = pendingWith;
565
+ pendingWith = [];
566
+ return reqs;
567
+ },
568
+ consumePivot() {
569
+ const pivot = pendingPivot;
570
+ pendingPivot = undefined;
571
+ return pivot;
572
+ },
573
+ applyRelations,
574
+ });
300
575
  return builder;
301
576
  }
302
577
  //# sourceMappingURL=Factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Factory.js","sourceRoot":"","sources":["../../src/testing/Factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Factory.js","sourceRoot":"","sources":["../../src/testing/Factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * `testUtils.db()` — the AdonisJS `testUtils.db()` facade for test state
3
+ * management, wired to atlas's migration/seed/truncate/transaction bricks:
4
+ *
5
+ * const t = testUtils(connection, { migrationsDir, seedersDir });
6
+ * test.group("users", (group) => {
7
+ * group.each.setup(() => t.db().truncate()); // teardown truncates
8
+ * });
9
+ *
10
+ * Each method returns the TEARDOWN function a Japa/helix hook uses (Adonis
11
+ * parity): `group.each.setup(() => testUtils.db().truncate())`.
12
+ *
13
+ * NOTE (named atlas deviation): Lucid's `withGlobalTransaction()` transparently
14
+ * routes EVERY query through a hidden connection-global transaction. atlas
15
+ * deliberately does NOT bind a global transaction (it caused silent pool-scatter
16
+ * bugs — see `useTransaction`); instead it hands back a PINNED trx the test
17
+ * drives explicitly. So `withGlobalTransaction()` returns `{ trx, rollback }` —
18
+ * run the test's queries through `trx`, not the pooled connection.
19
+ */
20
+ import type { AsyncDatabaseConnection } from "../adapters/NapiDbAdapter.js";
21
+ import { type TestTransaction } from "./DatabaseCleanup.js";
22
+ /** Where migrations/seeders live, for `migrate()`/`seed()`. */
23
+ export interface DbTestUtilsOptions {
24
+ /** Directory of migration files (Adonis `database/migrations`). */
25
+ migrationsDir?: string;
26
+ /** Directory of seeder files (Adonis `database/seeders`). */
27
+ seedersDir?: string;
28
+ /** Tables `truncate()` leaves alone (in addition to `ream_*` internals). */
29
+ ignoreTables?: readonly string[];
30
+ }
31
+ /** The `testUtils.db()` surface. */
32
+ export interface DbTestUtils {
33
+ /** Run migrations now; returns a teardown that rolls them back. */
34
+ migrate(): Promise<() => Promise<void>>;
35
+ /** Returns a teardown that empties every user table (test isolation). */
36
+ truncate(): () => Promise<void>;
37
+ /** Run seeders now (optionally a `files` subset). */
38
+ seed(files?: readonly string[]): Promise<void>;
39
+ /**
40
+ * Begin a pinned transaction for the test; returns `{ trx, rollback }`. Run
41
+ * the test's queries through `trx` (atlas has no transparent global trx).
42
+ */
43
+ withGlobalTransaction(): Promise<TestTransaction>;
44
+ }
45
+ /** AdonisJS `testUtils` facade (db slice) bound to a connection. */
46
+ export declare function testUtils(conn: AsyncDatabaseConnection, options?: DbTestUtilsOptions): {
47
+ db(): DbTestUtils;
48
+ };
49
+ //# sourceMappingURL=TestUtils.d.ts.map