@forklaunch/better-auth-mikro-orm-fork 0.4.104 → 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 +134 -113
- package/lib/adapter.d.cts +8 -3
- package/lib/adapter.d.ts +8 -3
- package/lib/adapter.js +137 -114
- package/package.json +2 -2
- package/readme.md +2 -2
package/lib/adapter.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(src_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(src_exports);
|
|
26
26
|
|
|
27
27
|
// src/adapter.ts
|
|
28
|
+
var import_core2 = require("@mikro-orm/core");
|
|
28
29
|
var import_adapters = require("better-auth/adapters");
|
|
29
30
|
var import_dset2 = require("dset");
|
|
30
31
|
|
|
@@ -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":
|
|
@@ -195,7 +200,7 @@ function createAdapterUtils(orm) {
|
|
|
195
200
|
return createWhereClause(path, value, "eq", result);
|
|
196
201
|
});
|
|
197
202
|
where.filter(({ connector }) => connector === "OR").forEach(({ field, value }, index) => {
|
|
198
|
-
const path = ["$
|
|
203
|
+
const path = ["$or", index].concat(getFieldPath(metadata2, field, true));
|
|
199
204
|
return createWhereClause(path, value, "eq", result);
|
|
200
205
|
});
|
|
201
206
|
return result;
|
|
@@ -211,119 +216,135 @@ function createAdapterUtils(orm) {
|
|
|
211
216
|
}
|
|
212
217
|
|
|
213
218
|
// src/adapter.ts
|
|
214
|
-
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),
|
|
215
328
|
config: {
|
|
216
329
|
debugLogs,
|
|
217
330
|
supportsJSON,
|
|
218
331
|
adapterId: "mikro-orm-adapter",
|
|
219
|
-
adapterName: "Mikro ORM Adapter"
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
const input = normalizeInput(metadata, data);
|
|
233
|
-
if (options.advanced?.generateId === false && !options.advanced?.database || options.advanced?.database?.generateId === false) {
|
|
234
|
-
Reflect.deleteProperty(input, "id");
|
|
235
|
-
}
|
|
236
|
-
const entity = orm.em.create(metadata.class, input);
|
|
237
|
-
try {
|
|
238
|
-
await orm.em.persistAndFlush(entity);
|
|
239
|
-
} catch (error) {
|
|
240
|
-
await orm.em.removeAndFlush(entity);
|
|
241
|
-
throw error;
|
|
242
|
-
}
|
|
243
|
-
return normalizeOutput(metadata, entity, select);
|
|
244
|
-
},
|
|
245
|
-
async count({ model, where }) {
|
|
246
|
-
const metadata = getEntityMetadata(model);
|
|
247
|
-
return orm.em.count(
|
|
248
|
-
metadata.class,
|
|
249
|
-
normalizeWhereClauses(metadata, where)
|
|
250
|
-
);
|
|
251
|
-
},
|
|
252
|
-
async findOne({ model, where, select }) {
|
|
253
|
-
const metadata = getEntityMetadata(model);
|
|
254
|
-
const entity = await orm.em.findOne(
|
|
255
|
-
metadata.class,
|
|
256
|
-
normalizeWhereClauses(metadata, where)
|
|
257
|
-
);
|
|
258
|
-
if (!entity) {
|
|
259
|
-
return null;
|
|
260
|
-
}
|
|
261
|
-
return normalizeOutput(metadata, entity, select);
|
|
262
|
-
},
|
|
263
|
-
async findMany({ model, where, limit, offset, sortBy }) {
|
|
264
|
-
const metadata = getEntityMetadata(model);
|
|
265
|
-
const options2 = {
|
|
266
|
-
limit,
|
|
267
|
-
offset
|
|
268
|
-
};
|
|
269
|
-
if (sortBy) {
|
|
270
|
-
const path = getFieldPath(metadata, sortBy.field);
|
|
271
|
-
(0, import_dset2.dset)(options2, ["orderBy", ...path], sortBy.direction);
|
|
272
|
-
}
|
|
273
|
-
const rows = await orm.em.find(
|
|
274
|
-
metadata.class,
|
|
275
|
-
normalizeWhereClauses(metadata, where),
|
|
276
|
-
options2
|
|
277
|
-
);
|
|
278
|
-
return rows.map((row) => normalizeOutput(metadata, row));
|
|
279
|
-
},
|
|
280
|
-
async update({ model, where, update }) {
|
|
281
|
-
const metadata = getEntityMetadata(model);
|
|
282
|
-
const entity = await orm.em.findOne(
|
|
283
|
-
metadata.class,
|
|
284
|
-
normalizeWhereClauses(metadata, where)
|
|
285
|
-
);
|
|
286
|
-
if (!entity) {
|
|
287
|
-
return null;
|
|
288
|
-
}
|
|
289
|
-
orm.em.assign(entity, normalizeInput(metadata, update));
|
|
290
|
-
try {
|
|
291
|
-
await orm.em.flush();
|
|
292
|
-
} catch (error) {
|
|
293
|
-
await orm.em.removeAndFlush(entity);
|
|
294
|
-
throw error;
|
|
295
|
-
}
|
|
296
|
-
return normalizeOutput(metadata, entity);
|
|
297
|
-
},
|
|
298
|
-
async updateMany({ model, where, update }) {
|
|
299
|
-
const metadata = getEntityMetadata(model);
|
|
300
|
-
return orm.em.nativeUpdate(
|
|
301
|
-
metadata.class,
|
|
302
|
-
normalizeWhereClauses(metadata, where),
|
|
303
|
-
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 ?? {})
|
|
304
345
|
);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
const metadata = getEntityMetadata(model);
|
|
308
|
-
const entity = await orm.em.findOne(
|
|
309
|
-
metadata.class,
|
|
310
|
-
normalizeWhereClauses(metadata, where),
|
|
311
|
-
{
|
|
312
|
-
fields: ["id"]
|
|
313
|
-
}
|
|
314
|
-
);
|
|
315
|
-
if (entity) {
|
|
316
|
-
await orm.em.removeAndFlush(entity);
|
|
317
|
-
}
|
|
318
|
-
},
|
|
319
|
-
async deleteMany({ model, where }) {
|
|
320
|
-
const metadata = getEntityMetadata(model);
|
|
321
|
-
return orm.em.nativeDelete(
|
|
322
|
-
metadata.class,
|
|
323
|
-
normalizeWhereClauses(metadata, where)
|
|
324
|
-
);
|
|
325
|
-
}
|
|
326
|
-
};
|
|
346
|
+
});
|
|
347
|
+
}
|
|
327
348
|
}
|
|
328
349
|
});
|
|
329
350
|
// Annotate the CommonJS export names for ESM import in node:
|
package/lib/adapter.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { MikroORM } from '@mikro-orm/core';
|
|
1
|
+
import * as better_auth_adapters from 'better-auth/adapters';
|
|
3
2
|
import { AdapterDebugLogs } from 'better-auth/adapters';
|
|
3
|
+
import { MikroORM } from '@mikro-orm/core';
|
|
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
|
|
2
|
-
import { MikroORM } from '@mikro-orm/core';
|
|
1
|
+
import * as better_auth_adapters from 'better-auth/adapters';
|
|
3
2
|
import { AdapterDebugLogs } from 'better-auth/adapters';
|
|
3
|
+
import { MikroORM } from '@mikro-orm/core';
|
|
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,5 +1,8 @@
|
|
|
1
1
|
// src/adapter.ts
|
|
2
|
-
import
|
|
2
|
+
import "@mikro-orm/core";
|
|
3
|
+
import {
|
|
4
|
+
createAdapterFactory
|
|
5
|
+
} from "better-auth/adapters";
|
|
3
6
|
import { dset as dset2 } from "dset";
|
|
4
7
|
|
|
5
8
|
// src/utils/adapterUtils.ts
|
|
@@ -7,7 +10,7 @@ import { ReferenceKind, serialize } from "@mikro-orm/core";
|
|
|
7
10
|
import { dset } from "dset";
|
|
8
11
|
|
|
9
12
|
// src/utils/createAdapterError.ts
|
|
10
|
-
import { BetterAuthError } from "
|
|
13
|
+
import { BetterAuthError } from "better-auth";
|
|
11
14
|
function createAdapterError(message) {
|
|
12
15
|
throw new BetterAuthError(`[Mikro ORM Adapter] ${message}`);
|
|
13
16
|
}
|
|
@@ -98,10 +101,12 @@ function createAdapterUtils(orm) {
|
|
|
98
101
|
const fields = {};
|
|
99
102
|
Object.entries(input).forEach(([key, value]) => {
|
|
100
103
|
if (typeof value === "object" && value.$in) {
|
|
101
|
-
|
|
104
|
+
const property = getPropertyMetadata(metadata2, key);
|
|
105
|
+
dset(fields, [property.name], value.$in);
|
|
102
106
|
} else {
|
|
103
|
-
const
|
|
104
|
-
|
|
107
|
+
const property = getPropertyMetadata(metadata2, key);
|
|
108
|
+
const normalizedValue = normalizePropertyValue(property, value);
|
|
109
|
+
dset(fields, [property.name], normalizedValue);
|
|
105
110
|
}
|
|
106
111
|
});
|
|
107
112
|
return fields;
|
|
@@ -143,6 +148,8 @@ function createAdapterUtils(orm) {
|
|
|
143
148
|
switch (w.operator) {
|
|
144
149
|
case "in":
|
|
145
150
|
return createWhereInClause(w.field, path, w.value);
|
|
151
|
+
case "not_in":
|
|
152
|
+
return createWhereClause(path, w.value, "$nin");
|
|
146
153
|
case "contains":
|
|
147
154
|
return createWhereClause(path, `%${w.value}%`, "$like");
|
|
148
155
|
case "starts_with":
|
|
@@ -169,7 +176,7 @@ function createAdapterUtils(orm) {
|
|
|
169
176
|
return createWhereClause(path, value, "eq", result);
|
|
170
177
|
});
|
|
171
178
|
where.filter(({ connector }) => connector === "OR").forEach(({ field, value }, index) => {
|
|
172
|
-
const path = ["$
|
|
179
|
+
const path = ["$or", index].concat(getFieldPath(metadata2, field, true));
|
|
173
180
|
return createWhereClause(path, value, "eq", result);
|
|
174
181
|
});
|
|
175
182
|
return result;
|
|
@@ -185,119 +192,135 @@ function createAdapterUtils(orm) {
|
|
|
185
192
|
}
|
|
186
193
|
|
|
187
194
|
// src/adapter.ts
|
|
188
|
-
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),
|
|
189
304
|
config: {
|
|
190
305
|
debugLogs,
|
|
191
306
|
supportsJSON,
|
|
192
307
|
adapterId: "mikro-orm-adapter",
|
|
193
|
-
adapterName: "Mikro ORM Adapter"
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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)
|
|
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 ?? {})
|
|
278
321
|
);
|
|
279
|
-
}
|
|
280
|
-
|
|
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
|
-
};
|
|
322
|
+
});
|
|
323
|
+
}
|
|
301
324
|
}
|
|
302
325
|
});
|
|
303
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
|
-
"better-auth": "1.
|
|
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
|
|