@c9up/atlas 0.2.0 → 0.2.1
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.
- package/README.md +8 -0
- package/db.darwin-arm64.node +0 -0
- package/db.darwin-x64.node +0 -0
- package/db.linux-arm64-gnu.node +0 -0
- package/db.linux-x64-gnu.node +0 -0
- package/db.win32-x64-msvc.node +0 -0
- package/dist/AtlasProvider.d.ts +60 -7
- package/dist/AtlasProvider.d.ts.map +1 -1
- package/dist/AtlasProvider.js +204 -38
- package/dist/AtlasProvider.js.map +1 -1
- package/dist/BaseEntity.d.ts +17 -0
- package/dist/BaseEntity.d.ts.map +1 -1
- package/dist/BaseEntity.js.map +1 -1
- package/dist/BaseModel.d.ts +63 -27
- package/dist/BaseModel.d.ts.map +1 -1
- package/dist/BaseModel.js +108 -51
- package/dist/BaseModel.js.map +1 -1
- package/dist/BaseRepository.d.ts +11 -1
- package/dist/BaseRepository.d.ts.map +1 -1
- package/dist/BaseRepository.js +95 -20
- package/dist/BaseRepository.js.map +1 -1
- package/dist/ConnectionManager.d.ts +106 -0
- package/dist/ConnectionManager.d.ts.map +1 -0
- package/dist/ConnectionManager.js +228 -0
- package/dist/ConnectionManager.js.map +1 -0
- package/dist/ModelQuery.d.ts +256 -43
- package/dist/ModelQuery.d.ts.map +1 -1
- package/dist/ModelQuery.js +899 -231
- package/dist/ModelQuery.js.map +1 -1
- package/dist/Transaction.d.ts +54 -1
- package/dist/Transaction.d.ts.map +1 -1
- package/dist/Transaction.js +121 -59
- package/dist/Transaction.js.map +1 -1
- package/dist/adapters/NapiDbAdapter.d.ts +11 -0
- package/dist/adapters/NapiDbAdapter.d.ts.map +1 -1
- package/dist/adapters/NapiDbAdapter.js +35 -7
- package/dist/adapters/NapiDbAdapter.js.map +1 -1
- package/dist/console/contract.d.ts +62 -0
- package/dist/console/contract.d.ts.map +1 -0
- package/dist/console/contract.js +38 -0
- package/dist/console/contract.js.map +1 -0
- package/dist/console/factoryCommands.d.ts +23 -0
- package/dist/console/factoryCommands.d.ts.map +1 -0
- package/dist/console/factoryCommands.js +62 -0
- package/dist/console/factoryCommands.js.map +1 -0
- package/dist/console/migrationCommands.d.ts +38 -8
- package/dist/console/migrationCommands.d.ts.map +1 -1
- package/dist/console/migrationCommands.js +157 -50
- package/dist/console/migrationCommands.js.map +1 -1
- package/dist/console/schemaCheckCommand.d.ts +11 -17
- package/dist/console/schemaCheckCommand.d.ts.map +1 -1
- package/dist/console/schemaCheckCommand.js +21 -15
- package/dist/console/schemaCheckCommand.js.map +1 -1
- package/dist/console/schemaDumpCommand.d.ts +30 -0
- package/dist/console/schemaDumpCommand.d.ts.map +1 -0
- package/dist/console/schemaDumpCommand.js +69 -0
- package/dist/console/schemaDumpCommand.js.map +1 -0
- package/dist/console/schemaGenerateCommand.d.ts +100 -0
- package/dist/console/schemaGenerateCommand.d.ts.map +1 -0
- package/dist/console/schemaGenerateCommand.js +246 -0
- package/dist/console/schemaGenerateCommand.js.map +1 -0
- package/dist/console/seederCommands.d.ts +46 -0
- package/dist/console/seederCommands.d.ts.map +1 -0
- package/dist/console/seederCommands.js +136 -0
- package/dist/console/seederCommands.js.map +1 -0
- package/dist/decorators/entity.d.ts +13 -2
- package/dist/decorators/entity.d.ts.map +1 -1
- package/dist/decorators/entity.js +10 -0
- package/dist/decorators/entity.js.map +1 -1
- package/dist/decorators/hooks.d.ts +3 -3
- package/dist/decorators/hooks.d.ts.map +1 -1
- package/dist/decorators/hooks.js.map +1 -1
- package/dist/events.d.ts +5 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/factories.d.ts +8 -0
- package/dist/factories.d.ts.map +1 -0
- package/dist/factories.js +8 -0
- package/dist/factories.js.map +1 -0
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/lucid-schema.d.ts +15 -0
- package/dist/lucid-schema.d.ts.map +1 -0
- package/dist/lucid-schema.js +16 -0
- package/dist/lucid-schema.js.map +1 -0
- package/dist/orm.d.ts +14 -0
- package/dist/orm.d.ts.map +1 -0
- package/dist/orm.js +14 -0
- package/dist/orm.js.map +1 -0
- package/dist/query/DatabaseQueryBuilder.d.ts +557 -0
- package/dist/query/DatabaseQueryBuilder.d.ts.map +1 -0
- package/dist/query/DatabaseQueryBuilder.js +1798 -0
- package/dist/query/DatabaseQueryBuilder.js.map +1 -0
- package/dist/query/DmlBuilder.d.ts +62 -0
- package/dist/query/DmlBuilder.d.ts.map +1 -0
- package/dist/query/DmlBuilder.js +84 -0
- package/dist/query/DmlBuilder.js.map +1 -0
- package/dist/query/QueryBuilder.d.ts +5 -0
- package/dist/query/QueryBuilder.d.ts.map +1 -1
- package/dist/query/QueryBuilder.js +7 -0
- package/dist/query/QueryBuilder.js.map +1 -1
- package/dist/query/RawQueryBuilder.d.ts +47 -0
- package/dist/query/RawQueryBuilder.d.ts.map +1 -0
- package/dist/query/RawQueryBuilder.js +138 -0
- package/dist/query/RawQueryBuilder.js.map +1 -0
- package/dist/query/interpolate.d.ts +45 -0
- package/dist/query/interpolate.d.ts.map +1 -0
- package/dist/query/interpolate.js +51 -0
- package/dist/query/interpolate.js.map +1 -0
- package/dist/query/native.d.ts +8 -0
- package/dist/query/native.d.ts.map +1 -1
- package/dist/query/native.js +14 -0
- package/dist/query/native.js.map +1 -1
- package/dist/query/operators.d.ts +4 -0
- package/dist/query/operators.d.ts.map +1 -0
- package/dist/query/operators.js +27 -0
- package/dist/query/operators.js.map +1 -0
- package/dist/schema/Migration.d.ts +31 -7
- package/dist/schema/Migration.d.ts.map +1 -1
- package/dist/schema/Migration.js +34 -7
- package/dist/schema/Migration.js.map +1 -1
- package/dist/schema/MigrationRunner.d.ts +56 -6
- package/dist/schema/MigrationRunner.d.ts.map +1 -1
- package/dist/schema/MigrationRunner.js +382 -112
- package/dist/schema/MigrationRunner.js.map +1 -1
- package/dist/schema/Schema.d.ts +59 -2
- package/dist/schema/Schema.d.ts.map +1 -1
- package/dist/schema/Schema.js +143 -9
- package/dist/schema/Schema.js.map +1 -1
- package/dist/schema/SchemaDumper.d.ts +121 -0
- package/dist/schema/SchemaDumper.d.ts.map +1 -0
- package/dist/schema/SchemaDumper.js +365 -0
- package/dist/schema/SchemaDumper.js.map +1 -0
- package/dist/schema/Seeder.d.ts +13 -0
- package/dist/schema/Seeder.d.ts.map +1 -1
- package/dist/schema/Seeder.js +28 -5
- package/dist/schema/Seeder.js.map +1 -1
- package/dist/schema/TableBuilder.d.ts +27 -8
- package/dist/schema/TableBuilder.d.ts.map +1 -1
- package/dist/schema/TableBuilder.js +50 -12
- package/dist/schema/TableBuilder.js.map +1 -1
- package/dist/schema/catalog.d.ts +25 -1
- package/dist/schema/catalog.d.ts.map +1 -1
- package/dist/schema/catalog.js +69 -22
- package/dist/schema/catalog.js.map +1 -1
- package/dist/schema/introspect.d.ts +1 -1
- package/dist/schema/introspect.d.ts.map +1 -1
- package/dist/schema/introspect.js +26 -11
- package/dist/schema/introspect.js.map +1 -1
- package/dist/seeders.d.ts +7 -0
- package/dist/seeders.d.ts.map +1 -0
- package/dist/seeders.js +7 -0
- package/dist/seeders.js.map +1 -0
- package/dist/services/db.d.ts +120 -9
- package/dist/services/db.d.ts.map +1 -1
- package/dist/services/db.js +182 -26
- package/dist/services/db.js.map +1 -1
- package/dist/testing/DatabaseCleanup.d.ts +29 -6
- package/dist/testing/DatabaseCleanup.d.ts.map +1 -1
- package/dist/testing/DatabaseCleanup.js +44 -17
- package/dist/testing/DatabaseCleanup.js.map +1 -1
- package/dist/testing/DbAssertions.d.ts +48 -0
- package/dist/testing/DbAssertions.d.ts.map +1 -0
- package/dist/testing/DbAssertions.js +80 -0
- package/dist/testing/DbAssertions.js.map +1 -0
- package/dist/testing/Factory.d.ts +111 -25
- package/dist/testing/Factory.d.ts.map +1 -1
- package/dist/testing/Factory.js +331 -56
- package/dist/testing/Factory.js.map +1 -1
- package/dist/testing/TestUtils.d.ts +49 -0
- package/dist/testing/TestUtils.d.ts.map +1 -0
- package/dist/testing/TestUtils.js +79 -0
- package/dist/testing/TestUtils.js.map +1 -0
- package/dist/testing/index.d.ts +3 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/types/relations.d.ts +31 -0
- package/dist/types/relations.d.ts.map +1 -0
- package/dist/types/relations.js +20 -0
- package/dist/types/relations.js.map +1 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +30 -2
- package/src/AtlasProvider.ts +297 -51
- package/src/BaseEntity.ts +29 -0
- package/src/BaseModel.ts +174 -37
- package/src/BaseRepository.ts +136 -17
- package/src/ConnectionManager.ts +298 -0
- package/src/ModelQuery.ts +1309 -260
- package/src/Transaction.ts +194 -60
- package/src/adapters/NapiDbAdapter.ts +72 -14
- package/src/console/contract.ts +96 -0
- package/src/console/factoryCommands.ts +73 -0
- package/src/console/migrationCommands.ts +253 -63
- package/src/console/schemaCheckCommand.ts +26 -22
- package/src/console/schemaDumpCommand.ts +96 -0
- package/src/console/schemaGenerateCommand.ts +380 -0
- package/src/console/seederCommands.ts +174 -0
- package/src/decorators/entity.ts +18 -2
- package/src/decorators/hooks.ts +5 -3
- package/src/events.ts +5 -0
- package/src/factories.ts +10 -0
- package/src/index.ts +50 -3
- package/src/lucid-schema.ts +22 -0
- package/src/orm.ts +13 -0
- package/src/query/DatabaseQueryBuilder.ts +2724 -0
- package/src/query/DmlBuilder.ts +131 -0
- package/src/query/QueryBuilder.ts +8 -0
- package/src/query/RawQueryBuilder.ts +173 -0
- package/src/query/interpolate.ts +73 -0
- package/src/query/native.ts +29 -0
- package/src/query/operators.ts +27 -0
- package/src/schema/Migration.ts +36 -7
- package/src/schema/MigrationRunner.ts +483 -119
- package/src/schema/Schema.ts +168 -19
- package/src/schema/SchemaDumper.ts +518 -0
- package/src/schema/Seeder.ts +47 -10
- package/src/schema/TableBuilder.ts +48 -11
- package/src/schema/catalog.ts +94 -24
- package/src/schema/introspect.ts +26 -9
- package/src/seeders.ts +16 -0
- package/src/services/db.ts +343 -31
- package/src/testing/DatabaseCleanup.ts +73 -21
- package/src/testing/DbAssertions.ts +127 -0
- package/src/testing/Factory.ts +559 -79
- package/src/testing/TestUtils.ts +123 -0
- package/src/testing/index.ts +12 -1
- package/src/types/relations.ts +43 -0
package/dist/testing/Factory.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
-
|
|
179
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
242
|
-
|
|
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
|
-
|
|
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
|
|
253
|
-
const
|
|
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
|
-
|
|
270
|
-
//
|
|
271
|
-
//
|
|
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
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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
|
|
288
|
-
const
|
|
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
|
-
|
|
292
|
-
|
|
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
|