@forklaunch/better-auth-mikro-orm-fork 0.4.105 → 0.4.106
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/lib/adapter.cjs +136 -119
- package/lib/adapter.d.cts +8 -3
- package/lib/adapter.d.ts +8 -3
- package/lib/adapter.js +137 -120
- package/package.json +2 -2
- package/readme.md +2 -2
package/lib/adapter.cjs
CHANGED
|
@@ -25,7 +25,8 @@ __export(src_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(src_exports);
|
|
26
26
|
|
|
27
27
|
// src/adapter.ts
|
|
28
|
-
var
|
|
28
|
+
var import_core2 = require("@mikro-orm/core");
|
|
29
|
+
var import_adapters = require("better-auth/adapters");
|
|
29
30
|
var import_dset2 = require("dset");
|
|
30
31
|
|
|
31
32
|
// src/utils/adapterUtils.ts
|
|
@@ -33,7 +34,7 @@ var import_core = require("@mikro-orm/core");
|
|
|
33
34
|
var import_dset = require("dset");
|
|
34
35
|
|
|
35
36
|
// src/utils/createAdapterError.ts
|
|
36
|
-
var import_better_auth = require("
|
|
37
|
+
var import_better_auth = require("better-auth");
|
|
37
38
|
function createAdapterError(message) {
|
|
38
39
|
throw new import_better_auth.BetterAuthError(`[Mikro ORM Adapter] ${message}`);
|
|
39
40
|
}
|
|
@@ -124,10 +125,12 @@ function createAdapterUtils(orm) {
|
|
|
124
125
|
const fields = {};
|
|
125
126
|
Object.entries(input).forEach(([key, value]) => {
|
|
126
127
|
if (typeof value === "object" && value.$in) {
|
|
127
|
-
|
|
128
|
+
const property = getPropertyMetadata(metadata2, key);
|
|
129
|
+
(0, import_dset.dset)(fields, [property.name], value.$in);
|
|
128
130
|
} else {
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
+
const property = getPropertyMetadata(metadata2, key);
|
|
132
|
+
const normalizedValue = normalizePropertyValue(property, value);
|
|
133
|
+
(0, import_dset.dset)(fields, [property.name], normalizedValue);
|
|
131
134
|
}
|
|
132
135
|
});
|
|
133
136
|
return fields;
|
|
@@ -169,6 +172,8 @@ function createAdapterUtils(orm) {
|
|
|
169
172
|
switch (w.operator) {
|
|
170
173
|
case "in":
|
|
171
174
|
return createWhereInClause(w.field, path, w.value);
|
|
175
|
+
case "not_in":
|
|
176
|
+
return createWhereClause(path, w.value, "$nin");
|
|
172
177
|
case "contains":
|
|
173
178
|
return createWhereClause(path, `%${w.value}%`, "$like");
|
|
174
179
|
case "starts_with":
|
|
@@ -188,18 +193,14 @@ function createAdapterUtils(orm) {
|
|
|
188
193
|
}
|
|
189
194
|
const result = {};
|
|
190
195
|
where.filter(({ connector }) => !connector || connector === "AND").forEach(({ field, operator, value }, index) => {
|
|
191
|
-
const path = ["$and", index].concat(
|
|
192
|
-
getFieldPath(metadata2, field, true)
|
|
193
|
-
);
|
|
196
|
+
const path = ["$and", index].concat(getFieldPath(metadata2, field, true));
|
|
194
197
|
if (operator === "in") {
|
|
195
198
|
return createWhereInClause(field, path, value, result);
|
|
196
199
|
}
|
|
197
200
|
return createWhereClause(path, value, "eq", result);
|
|
198
201
|
});
|
|
199
202
|
where.filter(({ connector }) => connector === "OR").forEach(({ field, value }, index) => {
|
|
200
|
-
const path = ["$
|
|
201
|
-
getFieldPath(metadata2, field, true)
|
|
202
|
-
);
|
|
203
|
+
const path = ["$or", index].concat(getFieldPath(metadata2, field, true));
|
|
203
204
|
return createWhereClause(path, value, "eq", result);
|
|
204
205
|
});
|
|
205
206
|
return result;
|
|
@@ -215,119 +216,135 @@ function createAdapterUtils(orm) {
|
|
|
215
216
|
}
|
|
216
217
|
|
|
217
218
|
// src/adapter.ts
|
|
218
|
-
var
|
|
219
|
+
var adapter = (orm) => ({ options }) => {
|
|
220
|
+
const {
|
|
221
|
+
getEntityMetadata,
|
|
222
|
+
getFieldPath,
|
|
223
|
+
normalizeInput,
|
|
224
|
+
normalizeOutput,
|
|
225
|
+
normalizeWhereClauses
|
|
226
|
+
} = createAdapterUtils(orm);
|
|
227
|
+
return {
|
|
228
|
+
async create({ model, data, select }) {
|
|
229
|
+
const metadata = getEntityMetadata(model);
|
|
230
|
+
const input = normalizeInput(metadata, data);
|
|
231
|
+
if (options.advanced?.generateId === false && !options.advanced?.database || options.advanced?.database?.generateId === false) {
|
|
232
|
+
Reflect.deleteProperty(input, "id");
|
|
233
|
+
}
|
|
234
|
+
const entity = orm.em.create(metadata.class, input);
|
|
235
|
+
try {
|
|
236
|
+
await orm.em.persistAndFlush(entity);
|
|
237
|
+
} catch (error) {
|
|
238
|
+
await orm.em.removeAndFlush(entity);
|
|
239
|
+
throw error;
|
|
240
|
+
}
|
|
241
|
+
return normalizeOutput(metadata, entity, select);
|
|
242
|
+
},
|
|
243
|
+
async count({ model, where }) {
|
|
244
|
+
const metadata = getEntityMetadata(model);
|
|
245
|
+
return orm.em.count(
|
|
246
|
+
metadata.class,
|
|
247
|
+
normalizeWhereClauses(metadata, where)
|
|
248
|
+
);
|
|
249
|
+
},
|
|
250
|
+
async findOne({ model, where, select }) {
|
|
251
|
+
const metadata = getEntityMetadata(model);
|
|
252
|
+
const entity = await orm.em.findOne(
|
|
253
|
+
metadata.class,
|
|
254
|
+
normalizeWhereClauses(metadata, where)
|
|
255
|
+
);
|
|
256
|
+
if (!entity) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
return normalizeOutput(metadata, entity, select);
|
|
260
|
+
},
|
|
261
|
+
async findMany({ model, where, limit, offset, sortBy }) {
|
|
262
|
+
const metadata = getEntityMetadata(model);
|
|
263
|
+
const options2 = {
|
|
264
|
+
limit,
|
|
265
|
+
offset
|
|
266
|
+
};
|
|
267
|
+
if (sortBy) {
|
|
268
|
+
const path = getFieldPath(metadata, sortBy.field);
|
|
269
|
+
(0, import_dset2.dset)(options2, ["orderBy", ...path], sortBy.direction);
|
|
270
|
+
}
|
|
271
|
+
const rows = await orm.em.find(
|
|
272
|
+
metadata.class,
|
|
273
|
+
normalizeWhereClauses(metadata, where),
|
|
274
|
+
options2
|
|
275
|
+
);
|
|
276
|
+
return rows.map((row) => normalizeOutput(metadata, row));
|
|
277
|
+
},
|
|
278
|
+
async update({ model, where, update }) {
|
|
279
|
+
const metadata = getEntityMetadata(model);
|
|
280
|
+
const entity = await orm.em.findOne(
|
|
281
|
+
metadata.class,
|
|
282
|
+
normalizeWhereClauses(metadata, where)
|
|
283
|
+
);
|
|
284
|
+
if (!entity) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
orm.em.assign(entity, normalizeInput(metadata, update));
|
|
288
|
+
try {
|
|
289
|
+
await orm.em.flush();
|
|
290
|
+
} catch (error) {
|
|
291
|
+
await orm.em.removeAndFlush(entity);
|
|
292
|
+
throw error;
|
|
293
|
+
}
|
|
294
|
+
return normalizeOutput(metadata, entity);
|
|
295
|
+
},
|
|
296
|
+
async updateMany({ model, where, update }) {
|
|
297
|
+
const metadata = getEntityMetadata(model);
|
|
298
|
+
return orm.em.nativeUpdate(
|
|
299
|
+
metadata.class,
|
|
300
|
+
normalizeWhereClauses(metadata, where),
|
|
301
|
+
normalizeInput(metadata, update)
|
|
302
|
+
);
|
|
303
|
+
},
|
|
304
|
+
async delete({ model, where }) {
|
|
305
|
+
const metadata = getEntityMetadata(model);
|
|
306
|
+
const entity = await orm.em.findOne(
|
|
307
|
+
metadata.class,
|
|
308
|
+
normalizeWhereClauses(metadata, where),
|
|
309
|
+
{
|
|
310
|
+
fields: ["id"]
|
|
311
|
+
}
|
|
312
|
+
);
|
|
313
|
+
if (entity) {
|
|
314
|
+
await orm.em.removeAndFlush(entity);
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
async deleteMany({ model, where }) {
|
|
318
|
+
const metadata = getEntityMetadata(model);
|
|
319
|
+
return orm.em.nativeDelete(
|
|
320
|
+
metadata.class,
|
|
321
|
+
normalizeWhereClauses(metadata, where)
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
};
|
|
326
|
+
var mikroOrmAdapter = (orm, { debugLogs, supportsJSON = true, options } = {}) => (0, import_adapters.createAdapterFactory)({
|
|
327
|
+
adapter: adapter(orm),
|
|
219
328
|
config: {
|
|
220
329
|
debugLogs,
|
|
221
330
|
supportsJSON,
|
|
222
331
|
adapterId: "mikro-orm-adapter",
|
|
223
|
-
adapterName: "Mikro ORM Adapter"
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const input = normalizeInput(metadata, data);
|
|
237
|
-
if (options.advanced?.generateId === false && !options.advanced?.database || options.advanced?.database?.generateId === false) {
|
|
238
|
-
Reflect.deleteProperty(input, "id");
|
|
239
|
-
}
|
|
240
|
-
const entity = orm.em.create(metadata.class, input);
|
|
241
|
-
try {
|
|
242
|
-
await orm.em.persistAndFlush(entity);
|
|
243
|
-
} catch (error) {
|
|
244
|
-
await orm.em.removeAndFlush(entity);
|
|
245
|
-
throw error;
|
|
246
|
-
}
|
|
247
|
-
return normalizeOutput(metadata, entity, select);
|
|
248
|
-
},
|
|
249
|
-
async count({ model, where }) {
|
|
250
|
-
const metadata = getEntityMetadata(model);
|
|
251
|
-
return orm.em.count(
|
|
252
|
-
metadata.class,
|
|
253
|
-
normalizeWhereClauses(metadata, where)
|
|
254
|
-
);
|
|
255
|
-
},
|
|
256
|
-
async findOne({ model, where, select }) {
|
|
257
|
-
const metadata = getEntityMetadata(model);
|
|
258
|
-
const entity = await orm.em.findOne(
|
|
259
|
-
metadata.class,
|
|
260
|
-
normalizeWhereClauses(metadata, where)
|
|
261
|
-
);
|
|
262
|
-
if (!entity) {
|
|
263
|
-
return null;
|
|
264
|
-
}
|
|
265
|
-
return normalizeOutput(metadata, entity, select);
|
|
266
|
-
},
|
|
267
|
-
async findMany({ model, where, limit, offset, sortBy }) {
|
|
268
|
-
const metadata = getEntityMetadata(model);
|
|
269
|
-
const options2 = {
|
|
270
|
-
limit,
|
|
271
|
-
offset
|
|
272
|
-
};
|
|
273
|
-
if (sortBy) {
|
|
274
|
-
const path = getFieldPath(metadata, sortBy.field);
|
|
275
|
-
(0, import_dset2.dset)(options2, ["orderBy", ...path], sortBy.direction);
|
|
276
|
-
}
|
|
277
|
-
const rows = await orm.em.find(
|
|
278
|
-
metadata.class,
|
|
279
|
-
normalizeWhereClauses(metadata, where),
|
|
280
|
-
options2
|
|
281
|
-
);
|
|
282
|
-
return rows.map((row) => normalizeOutput(metadata, row));
|
|
283
|
-
},
|
|
284
|
-
async update({ model, where, update }) {
|
|
285
|
-
const metadata = getEntityMetadata(model);
|
|
286
|
-
const entity = await orm.em.findOne(
|
|
287
|
-
metadata.class,
|
|
288
|
-
normalizeWhereClauses(metadata, where)
|
|
289
|
-
);
|
|
290
|
-
if (!entity) {
|
|
291
|
-
return null;
|
|
292
|
-
}
|
|
293
|
-
orm.em.assign(entity, normalizeInput(metadata, update));
|
|
294
|
-
try {
|
|
295
|
-
await orm.em.flush();
|
|
296
|
-
} catch (error) {
|
|
297
|
-
await orm.em.removeAndFlush(entity);
|
|
298
|
-
throw error;
|
|
299
|
-
}
|
|
300
|
-
return normalizeOutput(metadata, entity);
|
|
301
|
-
},
|
|
302
|
-
async updateMany({ model, where, update }) {
|
|
303
|
-
const metadata = getEntityMetadata(model);
|
|
304
|
-
return orm.em.nativeUpdate(
|
|
305
|
-
metadata.class,
|
|
306
|
-
normalizeWhereClauses(metadata, where),
|
|
307
|
-
normalizeInput(metadata, update)
|
|
332
|
+
adapterName: "Mikro ORM Adapter",
|
|
333
|
+
transaction: async (cb) => {
|
|
334
|
+
return orm.em.transactional(async () => {
|
|
335
|
+
return cb(
|
|
336
|
+
(0, import_adapters.createAdapterFactory)({
|
|
337
|
+
adapter: adapter(orm),
|
|
338
|
+
config: {
|
|
339
|
+
debugLogs,
|
|
340
|
+
supportsJSON,
|
|
341
|
+
adapterId: "mikro-orm-adapter-transaction",
|
|
342
|
+
adapterName: "Mikro ORM Adapter Transaction"
|
|
343
|
+
}
|
|
344
|
+
})(options ?? {})
|
|
308
345
|
);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
const metadata = getEntityMetadata(model);
|
|
312
|
-
const entity = await orm.em.findOne(
|
|
313
|
-
metadata.class,
|
|
314
|
-
normalizeWhereClauses(metadata, where),
|
|
315
|
-
{
|
|
316
|
-
fields: ["id"]
|
|
317
|
-
}
|
|
318
|
-
);
|
|
319
|
-
if (entity) {
|
|
320
|
-
await orm.em.removeAndFlush(entity);
|
|
321
|
-
}
|
|
322
|
-
},
|
|
323
|
-
async deleteMany({ model, where }) {
|
|
324
|
-
const metadata = getEntityMetadata(model);
|
|
325
|
-
return orm.em.nativeDelete(
|
|
326
|
-
metadata.class,
|
|
327
|
-
normalizeWhereClauses(metadata, where)
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
|
-
};
|
|
346
|
+
});
|
|
347
|
+
}
|
|
331
348
|
}
|
|
332
349
|
});
|
|
333
350
|
// Annotate the CommonJS export names for ESM import in node:
|
package/lib/adapter.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as better_auth_adapters from 'better-auth/adapters';
|
|
2
|
+
import { AdapterDebugLogs } from 'better-auth/adapters';
|
|
2
3
|
import { MikroORM } from '@mikro-orm/core';
|
|
3
|
-
import {
|
|
4
|
+
import { BetterAuthOptions } from 'better-auth/types';
|
|
4
5
|
|
|
5
6
|
interface MikroOrmAdapterConfig {
|
|
6
7
|
/**
|
|
@@ -20,6 +21,10 @@ interface MikroOrmAdapterConfig {
|
|
|
20
21
|
* @default true
|
|
21
22
|
*/
|
|
22
23
|
supportsJSON?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Options for the Better Auth adapter.
|
|
26
|
+
*/
|
|
27
|
+
options?: BetterAuthOptions;
|
|
23
28
|
}
|
|
24
29
|
/**
|
|
25
30
|
* Creates Mikro ORM adapter for Better Auth.
|
|
@@ -32,6 +37,6 @@ interface MikroOrmAdapterConfig {
|
|
|
32
37
|
* @param orm - Instance of Mikro ORM returned from `MikroORM.init` or `MikroORM.initSync` methods
|
|
33
38
|
* @param config - Additional configuration for Mikro ORM adapter
|
|
34
39
|
*/
|
|
35
|
-
declare const mikroOrmAdapter: (orm: MikroORM, { debugLogs, supportsJSON }?: MikroOrmAdapterConfig) =>
|
|
40
|
+
declare const mikroOrmAdapter: (orm: MikroORM, { debugLogs, supportsJSON, options }?: MikroOrmAdapterConfig) => better_auth_adapters.AdapterFactory;
|
|
36
41
|
|
|
37
42
|
export { type MikroOrmAdapterConfig, mikroOrmAdapter };
|
package/lib/adapter.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as better_auth_adapters from 'better-auth/adapters';
|
|
2
|
+
import { AdapterDebugLogs } from 'better-auth/adapters';
|
|
2
3
|
import { MikroORM } from '@mikro-orm/core';
|
|
3
|
-
import {
|
|
4
|
+
import { BetterAuthOptions } from 'better-auth/types';
|
|
4
5
|
|
|
5
6
|
interface MikroOrmAdapterConfig {
|
|
6
7
|
/**
|
|
@@ -20,6 +21,10 @@ interface MikroOrmAdapterConfig {
|
|
|
20
21
|
* @default true
|
|
21
22
|
*/
|
|
22
23
|
supportsJSON?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Options for the Better Auth adapter.
|
|
26
|
+
*/
|
|
27
|
+
options?: BetterAuthOptions;
|
|
23
28
|
}
|
|
24
29
|
/**
|
|
25
30
|
* Creates Mikro ORM adapter for Better Auth.
|
|
@@ -32,6 +37,6 @@ interface MikroOrmAdapterConfig {
|
|
|
32
37
|
* @param orm - Instance of Mikro ORM returned from `MikroORM.init` or `MikroORM.initSync` methods
|
|
33
38
|
* @param config - Additional configuration for Mikro ORM adapter
|
|
34
39
|
*/
|
|
35
|
-
declare const mikroOrmAdapter: (orm: MikroORM, { debugLogs, supportsJSON }?: MikroOrmAdapterConfig) =>
|
|
40
|
+
declare const mikroOrmAdapter: (orm: MikroORM, { debugLogs, supportsJSON, options }?: MikroOrmAdapterConfig) => better_auth_adapters.AdapterFactory;
|
|
36
41
|
|
|
37
42
|
export { type MikroOrmAdapterConfig, mikroOrmAdapter };
|
package/lib/adapter.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// src/adapter.ts
|
|
2
|
+
import "@mikro-orm/core";
|
|
2
3
|
import {
|
|
3
|
-
|
|
4
|
-
} from "
|
|
4
|
+
createAdapterFactory
|
|
5
|
+
} from "better-auth/adapters";
|
|
5
6
|
import { dset as dset2 } from "dset";
|
|
6
7
|
|
|
7
8
|
// src/utils/adapterUtils.ts
|
|
@@ -9,7 +10,7 @@ import { ReferenceKind, serialize } from "@mikro-orm/core";
|
|
|
9
10
|
import { dset } from "dset";
|
|
10
11
|
|
|
11
12
|
// src/utils/createAdapterError.ts
|
|
12
|
-
import { BetterAuthError } from "
|
|
13
|
+
import { BetterAuthError } from "better-auth";
|
|
13
14
|
function createAdapterError(message) {
|
|
14
15
|
throw new BetterAuthError(`[Mikro ORM Adapter] ${message}`);
|
|
15
16
|
}
|
|
@@ -100,10 +101,12 @@ function createAdapterUtils(orm) {
|
|
|
100
101
|
const fields = {};
|
|
101
102
|
Object.entries(input).forEach(([key, value]) => {
|
|
102
103
|
if (typeof value === "object" && value.$in) {
|
|
103
|
-
|
|
104
|
+
const property = getPropertyMetadata(metadata2, key);
|
|
105
|
+
dset(fields, [property.name], value.$in);
|
|
104
106
|
} else {
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
+
const property = getPropertyMetadata(metadata2, key);
|
|
108
|
+
const normalizedValue = normalizePropertyValue(property, value);
|
|
109
|
+
dset(fields, [property.name], normalizedValue);
|
|
107
110
|
}
|
|
108
111
|
});
|
|
109
112
|
return fields;
|
|
@@ -145,6 +148,8 @@ function createAdapterUtils(orm) {
|
|
|
145
148
|
switch (w.operator) {
|
|
146
149
|
case "in":
|
|
147
150
|
return createWhereInClause(w.field, path, w.value);
|
|
151
|
+
case "not_in":
|
|
152
|
+
return createWhereClause(path, w.value, "$nin");
|
|
148
153
|
case "contains":
|
|
149
154
|
return createWhereClause(path, `%${w.value}%`, "$like");
|
|
150
155
|
case "starts_with":
|
|
@@ -164,18 +169,14 @@ function createAdapterUtils(orm) {
|
|
|
164
169
|
}
|
|
165
170
|
const result = {};
|
|
166
171
|
where.filter(({ connector }) => !connector || connector === "AND").forEach(({ field, operator, value }, index) => {
|
|
167
|
-
const path = ["$and", index].concat(
|
|
168
|
-
getFieldPath(metadata2, field, true)
|
|
169
|
-
);
|
|
172
|
+
const path = ["$and", index].concat(getFieldPath(metadata2, field, true));
|
|
170
173
|
if (operator === "in") {
|
|
171
174
|
return createWhereInClause(field, path, value, result);
|
|
172
175
|
}
|
|
173
176
|
return createWhereClause(path, value, "eq", result);
|
|
174
177
|
});
|
|
175
178
|
where.filter(({ connector }) => connector === "OR").forEach(({ field, value }, index) => {
|
|
176
|
-
const path = ["$
|
|
177
|
-
getFieldPath(metadata2, field, true)
|
|
178
|
-
);
|
|
179
|
+
const path = ["$or", index].concat(getFieldPath(metadata2, field, true));
|
|
179
180
|
return createWhereClause(path, value, "eq", result);
|
|
180
181
|
});
|
|
181
182
|
return result;
|
|
@@ -191,119 +192,135 @@ function createAdapterUtils(orm) {
|
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
// src/adapter.ts
|
|
194
|
-
var
|
|
195
|
+
var adapter = (orm) => ({ options }) => {
|
|
196
|
+
const {
|
|
197
|
+
getEntityMetadata,
|
|
198
|
+
getFieldPath,
|
|
199
|
+
normalizeInput,
|
|
200
|
+
normalizeOutput,
|
|
201
|
+
normalizeWhereClauses
|
|
202
|
+
} = createAdapterUtils(orm);
|
|
203
|
+
return {
|
|
204
|
+
async create({ model, data, select }) {
|
|
205
|
+
const metadata = getEntityMetadata(model);
|
|
206
|
+
const input = normalizeInput(metadata, data);
|
|
207
|
+
if (options.advanced?.generateId === false && !options.advanced?.database || options.advanced?.database?.generateId === false) {
|
|
208
|
+
Reflect.deleteProperty(input, "id");
|
|
209
|
+
}
|
|
210
|
+
const entity = orm.em.create(metadata.class, input);
|
|
211
|
+
try {
|
|
212
|
+
await orm.em.persistAndFlush(entity);
|
|
213
|
+
} catch (error) {
|
|
214
|
+
await orm.em.removeAndFlush(entity);
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
return normalizeOutput(metadata, entity, select);
|
|
218
|
+
},
|
|
219
|
+
async count({ model, where }) {
|
|
220
|
+
const metadata = getEntityMetadata(model);
|
|
221
|
+
return orm.em.count(
|
|
222
|
+
metadata.class,
|
|
223
|
+
normalizeWhereClauses(metadata, where)
|
|
224
|
+
);
|
|
225
|
+
},
|
|
226
|
+
async findOne({ model, where, select }) {
|
|
227
|
+
const metadata = getEntityMetadata(model);
|
|
228
|
+
const entity = await orm.em.findOne(
|
|
229
|
+
metadata.class,
|
|
230
|
+
normalizeWhereClauses(metadata, where)
|
|
231
|
+
);
|
|
232
|
+
if (!entity) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
return normalizeOutput(metadata, entity, select);
|
|
236
|
+
},
|
|
237
|
+
async findMany({ model, where, limit, offset, sortBy }) {
|
|
238
|
+
const metadata = getEntityMetadata(model);
|
|
239
|
+
const options2 = {
|
|
240
|
+
limit,
|
|
241
|
+
offset
|
|
242
|
+
};
|
|
243
|
+
if (sortBy) {
|
|
244
|
+
const path = getFieldPath(metadata, sortBy.field);
|
|
245
|
+
dset2(options2, ["orderBy", ...path], sortBy.direction);
|
|
246
|
+
}
|
|
247
|
+
const rows = await orm.em.find(
|
|
248
|
+
metadata.class,
|
|
249
|
+
normalizeWhereClauses(metadata, where),
|
|
250
|
+
options2
|
|
251
|
+
);
|
|
252
|
+
return rows.map((row) => normalizeOutput(metadata, row));
|
|
253
|
+
},
|
|
254
|
+
async update({ model, where, update }) {
|
|
255
|
+
const metadata = getEntityMetadata(model);
|
|
256
|
+
const entity = await orm.em.findOne(
|
|
257
|
+
metadata.class,
|
|
258
|
+
normalizeWhereClauses(metadata, where)
|
|
259
|
+
);
|
|
260
|
+
if (!entity) {
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
orm.em.assign(entity, normalizeInput(metadata, update));
|
|
264
|
+
try {
|
|
265
|
+
await orm.em.flush();
|
|
266
|
+
} catch (error) {
|
|
267
|
+
await orm.em.removeAndFlush(entity);
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
return normalizeOutput(metadata, entity);
|
|
271
|
+
},
|
|
272
|
+
async updateMany({ model, where, update }) {
|
|
273
|
+
const metadata = getEntityMetadata(model);
|
|
274
|
+
return orm.em.nativeUpdate(
|
|
275
|
+
metadata.class,
|
|
276
|
+
normalizeWhereClauses(metadata, where),
|
|
277
|
+
normalizeInput(metadata, update)
|
|
278
|
+
);
|
|
279
|
+
},
|
|
280
|
+
async delete({ model, where }) {
|
|
281
|
+
const metadata = getEntityMetadata(model);
|
|
282
|
+
const entity = await orm.em.findOne(
|
|
283
|
+
metadata.class,
|
|
284
|
+
normalizeWhereClauses(metadata, where),
|
|
285
|
+
{
|
|
286
|
+
fields: ["id"]
|
|
287
|
+
}
|
|
288
|
+
);
|
|
289
|
+
if (entity) {
|
|
290
|
+
await orm.em.removeAndFlush(entity);
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
async deleteMany({ model, where }) {
|
|
294
|
+
const metadata = getEntityMetadata(model);
|
|
295
|
+
return orm.em.nativeDelete(
|
|
296
|
+
metadata.class,
|
|
297
|
+
normalizeWhereClauses(metadata, where)
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
};
|
|
302
|
+
var mikroOrmAdapter = (orm, { debugLogs, supportsJSON = true, options } = {}) => createAdapterFactory({
|
|
303
|
+
adapter: adapter(orm),
|
|
195
304
|
config: {
|
|
196
305
|
debugLogs,
|
|
197
306
|
supportsJSON,
|
|
198
307
|
adapterId: "mikro-orm-adapter",
|
|
199
|
-
adapterName: "Mikro ORM Adapter"
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
const input = normalizeInput(metadata, data);
|
|
213
|
-
if (options.advanced?.generateId === false && !options.advanced?.database || options.advanced?.database?.generateId === false) {
|
|
214
|
-
Reflect.deleteProperty(input, "id");
|
|
215
|
-
}
|
|
216
|
-
const entity = orm.em.create(metadata.class, input);
|
|
217
|
-
try {
|
|
218
|
-
await orm.em.persistAndFlush(entity);
|
|
219
|
-
} catch (error) {
|
|
220
|
-
await orm.em.removeAndFlush(entity);
|
|
221
|
-
throw error;
|
|
222
|
-
}
|
|
223
|
-
return normalizeOutput(metadata, entity, select);
|
|
224
|
-
},
|
|
225
|
-
async count({ model, where }) {
|
|
226
|
-
const metadata = getEntityMetadata(model);
|
|
227
|
-
return orm.em.count(
|
|
228
|
-
metadata.class,
|
|
229
|
-
normalizeWhereClauses(metadata, where)
|
|
230
|
-
);
|
|
231
|
-
},
|
|
232
|
-
async findOne({ model, where, select }) {
|
|
233
|
-
const metadata = getEntityMetadata(model);
|
|
234
|
-
const entity = await orm.em.findOne(
|
|
235
|
-
metadata.class,
|
|
236
|
-
normalizeWhereClauses(metadata, where)
|
|
237
|
-
);
|
|
238
|
-
if (!entity) {
|
|
239
|
-
return null;
|
|
240
|
-
}
|
|
241
|
-
return normalizeOutput(metadata, entity, select);
|
|
242
|
-
},
|
|
243
|
-
async findMany({ model, where, limit, offset, sortBy }) {
|
|
244
|
-
const metadata = getEntityMetadata(model);
|
|
245
|
-
const options2 = {
|
|
246
|
-
limit,
|
|
247
|
-
offset
|
|
248
|
-
};
|
|
249
|
-
if (sortBy) {
|
|
250
|
-
const path = getFieldPath(metadata, sortBy.field);
|
|
251
|
-
dset2(options2, ["orderBy", ...path], sortBy.direction);
|
|
252
|
-
}
|
|
253
|
-
const rows = await orm.em.find(
|
|
254
|
-
metadata.class,
|
|
255
|
-
normalizeWhereClauses(metadata, where),
|
|
256
|
-
options2
|
|
257
|
-
);
|
|
258
|
-
return rows.map((row) => normalizeOutput(metadata, row));
|
|
259
|
-
},
|
|
260
|
-
async update({ model, where, update }) {
|
|
261
|
-
const metadata = getEntityMetadata(model);
|
|
262
|
-
const entity = await orm.em.findOne(
|
|
263
|
-
metadata.class,
|
|
264
|
-
normalizeWhereClauses(metadata, where)
|
|
265
|
-
);
|
|
266
|
-
if (!entity) {
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
orm.em.assign(entity, normalizeInput(metadata, update));
|
|
270
|
-
try {
|
|
271
|
-
await orm.em.flush();
|
|
272
|
-
} catch (error) {
|
|
273
|
-
await orm.em.removeAndFlush(entity);
|
|
274
|
-
throw error;
|
|
275
|
-
}
|
|
276
|
-
return normalizeOutput(metadata, entity);
|
|
277
|
-
},
|
|
278
|
-
async updateMany({ model, where, update }) {
|
|
279
|
-
const metadata = getEntityMetadata(model);
|
|
280
|
-
return orm.em.nativeUpdate(
|
|
281
|
-
metadata.class,
|
|
282
|
-
normalizeWhereClauses(metadata, where),
|
|
283
|
-
normalizeInput(metadata, update)
|
|
308
|
+
adapterName: "Mikro ORM Adapter",
|
|
309
|
+
transaction: async (cb) => {
|
|
310
|
+
return orm.em.transactional(async () => {
|
|
311
|
+
return cb(
|
|
312
|
+
createAdapterFactory({
|
|
313
|
+
adapter: adapter(orm),
|
|
314
|
+
config: {
|
|
315
|
+
debugLogs,
|
|
316
|
+
supportsJSON,
|
|
317
|
+
adapterId: "mikro-orm-adapter-transaction",
|
|
318
|
+
adapterName: "Mikro ORM Adapter Transaction"
|
|
319
|
+
}
|
|
320
|
+
})(options ?? {})
|
|
284
321
|
);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
const metadata = getEntityMetadata(model);
|
|
288
|
-
const entity = await orm.em.findOne(
|
|
289
|
-
metadata.class,
|
|
290
|
-
normalizeWhereClauses(metadata, where),
|
|
291
|
-
{
|
|
292
|
-
fields: ["id"]
|
|
293
|
-
}
|
|
294
|
-
);
|
|
295
|
-
if (entity) {
|
|
296
|
-
await orm.em.removeAndFlush(entity);
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
|
-
async deleteMany({ model, where }) {
|
|
300
|
-
const metadata = getEntityMetadata(model);
|
|
301
|
-
return orm.em.nativeDelete(
|
|
302
|
-
metadata.class,
|
|
303
|
-
normalizeWhereClauses(metadata, where)
|
|
304
|
-
);
|
|
305
|
-
}
|
|
306
|
-
};
|
|
322
|
+
});
|
|
323
|
+
}
|
|
307
324
|
}
|
|
308
325
|
});
|
|
309
326
|
export {
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"private": false,
|
|
3
3
|
"type": "module",
|
|
4
4
|
"name": "@forklaunch/better-auth-mikro-orm-fork",
|
|
5
|
-
"version": "0.4.
|
|
5
|
+
"version": "0.4.106",
|
|
6
6
|
"description": "Mikro ORM Adapter for Better Auth",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"auth",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"@types/uuid": "10.0.0",
|
|
60
60
|
"@vitest/coverage-v8": "3.1.1",
|
|
61
61
|
"@vitest/ui": "3.1.1",
|
|
62
|
-
"
|
|
62
|
+
"better-auth": "1.3.11",
|
|
63
63
|
"del-cli": "6.0.0",
|
|
64
64
|
"es-toolkit": "1.39.7",
|
|
65
65
|
"husky": "9.1.7",
|
package/readme.md
CHANGED
|
@@ -32,8 +32,8 @@ pnpm add better-auth-mikro-orm
|
|
|
32
32
|
2. When you're finished with the schema definitions, you can simply pass the result of the `mikroOrmAdapter` call to the `database` option like this:
|
|
33
33
|
|
|
34
34
|
```ts
|
|
35
|
-
import { mikroOrmAdapter } from "
|
|
36
|
-
import { betterAuth } from "
|
|
35
|
+
import { mikroOrmAdapter } from "better-auth-mikro-orm";
|
|
36
|
+
import { betterAuth } from "better-auth";
|
|
37
37
|
|
|
38
38
|
import { orm } from "./orm.js"; // Your Mikro ORM instance
|
|
39
39
|
|