@convex-dev/better-auth 0.10.5 → 0.10.7
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/dist/auth-options.d.ts +1 -1
- package/dist/auth-options.d.ts.map +1 -1
- package/dist/auth.js +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/client/adapter-utils.d.ts +3 -3
- package/dist/client/adapter-utils.js +1 -1
- package/dist/client/adapter-utils.js.map +1 -1
- package/dist/client/adapter.d.ts.map +1 -1
- package/dist/client/adapter.js +15 -13
- package/dist/client/adapter.js.map +1 -1
- package/dist/client/create-api.d.ts +4 -2
- package/dist/client/create-api.d.ts.map +1 -1
- package/dist/client/create-api.js +2 -0
- package/dist/client/create-api.js.map +1 -1
- package/dist/client/create-client.d.ts.map +1 -1
- package/dist/client/create-client.js +3 -0
- package/dist/client/create-client.js.map +1 -1
- package/dist/client/create-schema.js +1 -1
- package/dist/component/_generated/component.d.ts +4 -8
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/adapter.d.ts +3 -1
- package/dist/component/adapter.d.ts.map +1 -1
- package/dist/component/adapterTest.d.ts +8 -15
- package/dist/component/adapterTest.d.ts.map +1 -1
- package/dist/component/adapterTest.js +390 -61
- package/dist/component/adapterTest.js.map +1 -1
- package/dist/nextjs/index.js +1 -1
- package/dist/nextjs/index.js.map +1 -1
- package/dist/plugins/convex/index.d.ts +2 -1
- package/dist/plugins/convex/index.d.ts.map +1 -1
- package/dist/plugins/convex/index.js +5 -5
- package/dist/plugins/convex/index.js.map +1 -1
- package/dist/react-start/index.js +1 -1
- package/dist/react-start/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +5 -4
- package/src/auth-options.ts +1 -1
- package/src/auth.ts +1 -1
- package/src/client/adapter-utils.ts +1 -1
- package/src/client/adapter.test.ts +24 -440
- package/src/client/adapter.ts +19 -14
- package/src/client/create-api.ts +3 -1
- package/src/client/create-client.ts +3 -0
- package/src/client/create-schema.ts +1 -1
- package/src/component/_generated/component.ts +4 -8
- package/src/component/adapterTest.ts +457 -100
- package/src/nextjs/index.ts +1 -1
- package/src/plugins/convex/index.ts +6 -10
- package/src/react-start/index.ts +1 -1
- package/src/utils/index.ts +3 -1
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Auth
|
|
1
|
+
import type { Auth } from "better-auth";
|
|
2
|
+
import type { betterAuth } from "better-auth/minimal";
|
|
2
3
|
import type { AuthProvider, DefaultFunctionArgs, FunctionReference, GenericActionCtx, GenericDataModel, GenericMutationCtx, GenericQueryCtx } from "convex/server";
|
|
3
4
|
import type { Jwk } from "better-auth/plugins/jwt";
|
|
4
5
|
export type CreateAuth<DataModel extends GenericDataModel, A extends ReturnType<typeof betterAuth> = Auth> = (ctx: GenericCtx<DataModel>) => A;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/get-convex/better-auth/issues"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.10.
|
|
9
|
+
"version": "0.10.7",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"keywords": [
|
|
12
12
|
"convex",
|
|
@@ -28,10 +28,11 @@
|
|
|
28
28
|
"test:watch": "vitest --typecheck --clearScreen false",
|
|
29
29
|
"test:debug": "vitest --inspect-brk --no-file-parallelism",
|
|
30
30
|
"test:coverage": "vitest run --coverage --coverage.reporter=text",
|
|
31
|
-
"prepublishOnly": "npm run build",
|
|
31
|
+
"prepublishOnly": "npm whoami && npm run build",
|
|
32
32
|
"preversion": "npm run clean && npm ci && npm run build && run-p test lint typecheck",
|
|
33
33
|
"alpha": "npm version prerelease --preid alpha && npm publish --tag alpha && git push --follow-tags",
|
|
34
34
|
"release": "npm version patch && npm publish && git push --follow-tags",
|
|
35
|
+
"prerelease": "npm whoami",
|
|
35
36
|
"version": "vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md"
|
|
36
37
|
},
|
|
37
38
|
"files": [
|
|
@@ -101,7 +102,7 @@
|
|
|
101
102
|
}
|
|
102
103
|
},
|
|
103
104
|
"peerDependencies": {
|
|
104
|
-
"better-auth": "1.4.
|
|
105
|
+
"better-auth": "1.4.9",
|
|
105
106
|
"convex": "^1.25.0",
|
|
106
107
|
"react": "^18.3.1 || ^19.0.0",
|
|
107
108
|
"react-dom": "^18.3.1 || ^19.0.0"
|
|
@@ -140,7 +141,7 @@
|
|
|
140
141
|
"types": "./dist/client/index.d.ts",
|
|
141
142
|
"module": "./dist/client/index.js",
|
|
142
143
|
"dependencies": {
|
|
143
|
-
"@better-auth/passkey": "1.4.
|
|
144
|
+
"@better-auth/passkey": "1.4.9",
|
|
144
145
|
"@better-fetch/fetch": "^1.1.18",
|
|
145
146
|
"common-tags": "^1.8.2",
|
|
146
147
|
"convex-helpers": "^0.1.95",
|
package/src/auth-options.ts
CHANGED
package/src/auth.ts
CHANGED
|
@@ -349,7 +349,6 @@ const filterByWhere = <
|
|
|
349
349
|
case "not_in": {
|
|
350
350
|
const result =
|
|
351
351
|
Array.isArray(w.value) && !(w.value as any[]).includes(value);
|
|
352
|
-
console.log(doc, "not_in", w, value, result);
|
|
353
352
|
return result;
|
|
354
353
|
}
|
|
355
354
|
case "lt": {
|
|
@@ -432,6 +431,7 @@ const generateQuery = (
|
|
|
432
431
|
: indexedQuery;
|
|
433
432
|
const filteredQuery = orderedQuery.filterWith(async (doc) => {
|
|
434
433
|
if (!index && indexFields?.length) {
|
|
434
|
+
// eslint-disable-next-line no-console
|
|
435
435
|
console.warn(
|
|
436
436
|
stripIndent`
|
|
437
437
|
Querying without an index on table "${args.model}".
|
|
@@ -1,53 +1,28 @@
|
|
|
1
1
|
/// <reference types="vite/client" />
|
|
2
2
|
|
|
3
|
-
import { describe
|
|
4
|
-
import { runAdapterTest } from "better-auth/adapters/test";
|
|
3
|
+
import { describe } from "vitest";
|
|
4
|
+
import type { runAdapterTest } from "better-auth/adapters/test";
|
|
5
5
|
import { convexTest } from "convex-test";
|
|
6
6
|
import { api } from "../component/_generated/api.js";
|
|
7
7
|
import schema from "../component/schema.js";
|
|
8
|
-
import {
|
|
9
|
-
import type {
|
|
8
|
+
import { createClient } from "./create-client.js";
|
|
9
|
+
import type { DataModel } from "../component/_generated/dataModel.js";
|
|
10
|
+
import type { BetterAuthOptions } from "better-auth/types";
|
|
11
|
+
import type { GenericCtx } from "./index.js";
|
|
10
12
|
|
|
11
|
-
export const getAdapter
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return t.query(api.adapterTest.findOne, data);
|
|
23
|
-
},
|
|
24
|
-
findMany: async (data) => {
|
|
25
|
-
return t.query(api.adapterTest.findMany, data);
|
|
26
|
-
},
|
|
27
|
-
count: async (data) => {
|
|
28
|
-
return t.query(api.adapterTest.count, data);
|
|
29
|
-
},
|
|
30
|
-
update: async (data) => {
|
|
31
|
-
return t.mutation(api.adapterTest.update, {
|
|
32
|
-
...data,
|
|
33
|
-
update: serialize(data.update),
|
|
34
|
-
});
|
|
35
|
-
},
|
|
36
|
-
updateMany: async (data) => {
|
|
37
|
-
return t.mutation(api.adapterTest.updateMany, data);
|
|
38
|
-
},
|
|
39
|
-
delete: async (data) => {
|
|
40
|
-
await t.mutation(api.adapterTest.delete, data);
|
|
41
|
-
},
|
|
42
|
-
deleteMany: async (data) => {
|
|
43
|
-
return t.mutation(api.adapterTest.deleteMany, data);
|
|
44
|
-
},
|
|
45
|
-
transaction: false as any,
|
|
46
|
-
} satisfies DBAdapter;
|
|
47
|
-
};
|
|
13
|
+
export const getAdapter: (
|
|
14
|
+
ctx: GenericCtx<DataModel>
|
|
15
|
+
) => Parameters<typeof runAdapterTest>[0]["getAdapter"] =
|
|
16
|
+
(ctx: GenericCtx<DataModel>) =>
|
|
17
|
+
async (opts?: Omit<BetterAuthOptions, "database">) => {
|
|
18
|
+
const authComponent = createClient<DataModel>(api as any, {
|
|
19
|
+
verbose: false,
|
|
20
|
+
});
|
|
21
|
+
const adapterFactory = authComponent.adapter(ctx);
|
|
22
|
+
return adapterFactory(opts ?? {});
|
|
23
|
+
};
|
|
48
24
|
|
|
49
25
|
describe("Better Auth Adapter Tests", async () => {
|
|
50
|
-
const _t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
51
26
|
const status = {
|
|
52
27
|
active: "active",
|
|
53
28
|
only: "only",
|
|
@@ -59,6 +34,9 @@ describe("Better Auth Adapter Tests", async () => {
|
|
|
59
34
|
FIND_MODEL: status.active,
|
|
60
35
|
FIND_MODEL_WITHOUT_ID: status.active,
|
|
61
36
|
FIND_MODEL_WITH_SELECT: status.active,
|
|
37
|
+
// Requires a custom schema - we fake success by overriding custom user
|
|
38
|
+
// schema in the test adapter because this test creates a user that other
|
|
39
|
+
// tests rely on.
|
|
62
40
|
FIND_MODEL_WITH_MODIFIED_FIELD_NAME: status.active,
|
|
63
41
|
UPDATE_MODEL: status.active,
|
|
64
42
|
SHOULD_FIND_MANY: status.active,
|
|
@@ -95,405 +73,11 @@ describe("Better Auth Adapter Tests", async () => {
|
|
|
95
73
|
})
|
|
96
74
|
);
|
|
97
75
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
disableTests,
|
|
101
|
-
});
|
|
76
|
+
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
77
|
+
await t.action(api.adapterTest.runTests, { disableTests });
|
|
102
78
|
});
|
|
103
79
|
|
|
104
80
|
describe("Convex Adapter Tests", async () => {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const adapter = await getAdapter(t)();
|
|
108
|
-
const user = await adapter.create({
|
|
109
|
-
model: "user",
|
|
110
|
-
data: {
|
|
111
|
-
name: "ab",
|
|
112
|
-
email: "a@a.com",
|
|
113
|
-
},
|
|
114
|
-
});
|
|
115
|
-
expect(
|
|
116
|
-
await adapter.findMany({
|
|
117
|
-
model: "user",
|
|
118
|
-
where: [
|
|
119
|
-
{
|
|
120
|
-
field: "name",
|
|
121
|
-
operator: "lt",
|
|
122
|
-
value: "a",
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
})
|
|
126
|
-
).toEqual([]);
|
|
127
|
-
expect(
|
|
128
|
-
await adapter.findMany({
|
|
129
|
-
model: "user",
|
|
130
|
-
where: [
|
|
131
|
-
{
|
|
132
|
-
field: "name",
|
|
133
|
-
operator: "lte",
|
|
134
|
-
value: "a",
|
|
135
|
-
},
|
|
136
|
-
],
|
|
137
|
-
})
|
|
138
|
-
).toEqual([]);
|
|
139
|
-
expect(
|
|
140
|
-
await adapter.findMany({
|
|
141
|
-
model: "user",
|
|
142
|
-
where: [
|
|
143
|
-
{
|
|
144
|
-
field: "name",
|
|
145
|
-
operator: "gt",
|
|
146
|
-
value: "a",
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
})
|
|
150
|
-
).toEqual([user]);
|
|
151
|
-
expect(
|
|
152
|
-
await adapter.findMany({
|
|
153
|
-
model: "user",
|
|
154
|
-
where: [
|
|
155
|
-
{
|
|
156
|
-
field: "name",
|
|
157
|
-
operator: "gte",
|
|
158
|
-
value: "ab",
|
|
159
|
-
},
|
|
160
|
-
],
|
|
161
|
-
})
|
|
162
|
-
).toEqual([user]);
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
test("should handle compound indexes that include id field", async () => {
|
|
166
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
167
|
-
const adapter = await getAdapter(t)();
|
|
168
|
-
const user = await adapter.create({
|
|
169
|
-
model: "user",
|
|
170
|
-
data: {
|
|
171
|
-
name: "foo",
|
|
172
|
-
email: "foo@bar.com",
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
expect(
|
|
176
|
-
await adapter.findOne({
|
|
177
|
-
model: "user",
|
|
178
|
-
where: [
|
|
179
|
-
{
|
|
180
|
-
field: "id",
|
|
181
|
-
value: user.id,
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
field: "name",
|
|
185
|
-
value: "wrong name",
|
|
186
|
-
},
|
|
187
|
-
],
|
|
188
|
-
})
|
|
189
|
-
).toEqual(null);
|
|
190
|
-
expect(
|
|
191
|
-
await adapter.findOne({
|
|
192
|
-
model: "user",
|
|
193
|
-
where: [
|
|
194
|
-
{
|
|
195
|
-
field: "id",
|
|
196
|
-
value: user.id,
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
field: "name",
|
|
200
|
-
value: "foo",
|
|
201
|
-
},
|
|
202
|
-
],
|
|
203
|
-
})
|
|
204
|
-
).toEqual(user);
|
|
205
|
-
expect(
|
|
206
|
-
await adapter.findOne({
|
|
207
|
-
model: "user",
|
|
208
|
-
where: [
|
|
209
|
-
{
|
|
210
|
-
field: "id",
|
|
211
|
-
value: user.id,
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
field: "name",
|
|
215
|
-
value: "foo",
|
|
216
|
-
operator: "lt",
|
|
217
|
-
},
|
|
218
|
-
],
|
|
219
|
-
})
|
|
220
|
-
).toEqual(null);
|
|
221
|
-
expect(
|
|
222
|
-
await adapter.findOne({
|
|
223
|
-
model: "user",
|
|
224
|
-
where: [
|
|
225
|
-
{
|
|
226
|
-
field: "id",
|
|
227
|
-
value: user.id,
|
|
228
|
-
},
|
|
229
|
-
{
|
|
230
|
-
field: "name",
|
|
231
|
-
value: "foo",
|
|
232
|
-
operator: "lte",
|
|
233
|
-
},
|
|
234
|
-
],
|
|
235
|
-
})
|
|
236
|
-
).toEqual(user);
|
|
237
|
-
expect(
|
|
238
|
-
await adapter.findOne({
|
|
239
|
-
model: "user",
|
|
240
|
-
where: [
|
|
241
|
-
{
|
|
242
|
-
field: "id",
|
|
243
|
-
value: user.id,
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
field: "name",
|
|
247
|
-
value: "foo",
|
|
248
|
-
operator: "gt",
|
|
249
|
-
},
|
|
250
|
-
],
|
|
251
|
-
})
|
|
252
|
-
).toEqual(null);
|
|
253
|
-
expect(
|
|
254
|
-
await adapter.findOne({
|
|
255
|
-
model: "user",
|
|
256
|
-
where: [
|
|
257
|
-
{
|
|
258
|
-
field: "id",
|
|
259
|
-
value: user.id,
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
field: "name",
|
|
263
|
-
value: "foo",
|
|
264
|
-
operator: "gte",
|
|
265
|
-
},
|
|
266
|
-
],
|
|
267
|
-
})
|
|
268
|
-
).toEqual(user);
|
|
269
|
-
expect(
|
|
270
|
-
await adapter.findOne({
|
|
271
|
-
model: "user",
|
|
272
|
-
where: [
|
|
273
|
-
{
|
|
274
|
-
field: "id",
|
|
275
|
-
value: user.id,
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
field: "name",
|
|
279
|
-
operator: "in",
|
|
280
|
-
value: ["wrong", "name"],
|
|
281
|
-
},
|
|
282
|
-
],
|
|
283
|
-
})
|
|
284
|
-
).toEqual(null);
|
|
285
|
-
expect(
|
|
286
|
-
await adapter.findOne({
|
|
287
|
-
model: "user",
|
|
288
|
-
where: [
|
|
289
|
-
{
|
|
290
|
-
field: "id",
|
|
291
|
-
value: user.id,
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
field: "name",
|
|
295
|
-
operator: "in",
|
|
296
|
-
value: ["foo"],
|
|
297
|
-
},
|
|
298
|
-
],
|
|
299
|
-
})
|
|
300
|
-
).toEqual(user);
|
|
301
|
-
});
|
|
302
|
-
test("should automatically paginate", async () => {
|
|
303
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
304
|
-
const adapter = await getAdapter(t)();
|
|
305
|
-
for (let i = 0; i < 300; i++) {
|
|
306
|
-
await adapter.create({
|
|
307
|
-
model: "user",
|
|
308
|
-
data: {
|
|
309
|
-
name: `foo${i}`,
|
|
310
|
-
email: `foo${i}@bar.com`,
|
|
311
|
-
},
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
// Better Auth defaults to a limit of 100
|
|
315
|
-
expect(
|
|
316
|
-
await adapter.findMany({
|
|
317
|
-
model: "user",
|
|
318
|
-
})
|
|
319
|
-
).toHaveLength(100);
|
|
320
|
-
|
|
321
|
-
// Pagination has a hardcoded numItems max of 200, this tests that it can handle
|
|
322
|
-
// specified limits beyond that
|
|
323
|
-
expect(
|
|
324
|
-
await adapter.findMany({
|
|
325
|
-
model: "user",
|
|
326
|
-
limit: 250,
|
|
327
|
-
})
|
|
328
|
-
).toHaveLength(250);
|
|
329
|
-
expect(
|
|
330
|
-
await adapter.findMany({
|
|
331
|
-
model: "user",
|
|
332
|
-
limit: 350,
|
|
333
|
-
})
|
|
334
|
-
).toHaveLength(300);
|
|
335
|
-
});
|
|
336
|
-
test("should handle OR where clauses", async () => {
|
|
337
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
338
|
-
const adapter = await getAdapter(t)();
|
|
339
|
-
const user = await adapter.create({
|
|
340
|
-
model: "user",
|
|
341
|
-
data: {
|
|
342
|
-
name: "foo",
|
|
343
|
-
email: "foo@bar.com",
|
|
344
|
-
},
|
|
345
|
-
});
|
|
346
|
-
expect(
|
|
347
|
-
await adapter.findOne({
|
|
348
|
-
model: "user",
|
|
349
|
-
where: [
|
|
350
|
-
{ field: "name", value: "bar", connector: "OR" },
|
|
351
|
-
{ field: "name", value: "foo", connector: "OR" },
|
|
352
|
-
],
|
|
353
|
-
})
|
|
354
|
-
).toEqual(user);
|
|
355
|
-
});
|
|
356
|
-
test("should handle OR where clauses with sortBy", async () => {
|
|
357
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
358
|
-
const adapter = await getAdapter(t)();
|
|
359
|
-
const fooUser = await adapter.create({
|
|
360
|
-
model: "user",
|
|
361
|
-
data: {
|
|
362
|
-
name: "foo",
|
|
363
|
-
email: "foo@bar.com",
|
|
364
|
-
},
|
|
365
|
-
});
|
|
366
|
-
const barUser = await adapter.create({
|
|
367
|
-
model: "user",
|
|
368
|
-
data: {
|
|
369
|
-
name: "bar",
|
|
370
|
-
email: "bar@bar.com",
|
|
371
|
-
},
|
|
372
|
-
});
|
|
373
|
-
await adapter.create({
|
|
374
|
-
model: "user",
|
|
375
|
-
data: {
|
|
376
|
-
name: "baz",
|
|
377
|
-
email: "baz@bar.com",
|
|
378
|
-
},
|
|
379
|
-
});
|
|
380
|
-
expect(
|
|
381
|
-
await adapter.findMany({
|
|
382
|
-
model: "user",
|
|
383
|
-
where: [
|
|
384
|
-
{ field: "name", value: "bar", connector: "OR" },
|
|
385
|
-
{ field: "name", value: "foo", connector: "OR" },
|
|
386
|
-
],
|
|
387
|
-
sortBy: { field: "name", direction: "asc" },
|
|
388
|
-
})
|
|
389
|
-
).toEqual([barUser, fooUser]);
|
|
390
|
-
expect(
|
|
391
|
-
await adapter.findMany({
|
|
392
|
-
model: "user",
|
|
393
|
-
where: [
|
|
394
|
-
{ field: "name", value: "bar", connector: "OR" },
|
|
395
|
-
{ field: "name", value: "foo", connector: "OR" },
|
|
396
|
-
],
|
|
397
|
-
sortBy: { field: "name", direction: "desc" },
|
|
398
|
-
})
|
|
399
|
-
).toEqual([fooUser, barUser]);
|
|
400
|
-
});
|
|
401
|
-
test("should handle count", async () => {
|
|
402
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
403
|
-
const adapter = await getAdapter(t)();
|
|
404
|
-
await adapter.create({
|
|
405
|
-
model: "user",
|
|
406
|
-
data: {
|
|
407
|
-
name: "foo",
|
|
408
|
-
email: "foo@bar.com",
|
|
409
|
-
},
|
|
410
|
-
});
|
|
411
|
-
await adapter.create({
|
|
412
|
-
model: "user",
|
|
413
|
-
data: {
|
|
414
|
-
name: "bar",
|
|
415
|
-
email: "bar@bar.com",
|
|
416
|
-
},
|
|
417
|
-
});
|
|
418
|
-
expect(
|
|
419
|
-
await adapter.count({
|
|
420
|
-
model: "user",
|
|
421
|
-
where: [{ field: "name", value: "foo" }],
|
|
422
|
-
})
|
|
423
|
-
).toEqual(1);
|
|
424
|
-
});
|
|
425
|
-
test("should handle queries with no index", async () => {
|
|
426
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
427
|
-
const adapter = await getAdapter(t)();
|
|
428
|
-
const user = await adapter.create({
|
|
429
|
-
model: "user",
|
|
430
|
-
data: {
|
|
431
|
-
name: "foo",
|
|
432
|
-
email: "foo@bar.com",
|
|
433
|
-
emailVerified: true,
|
|
434
|
-
},
|
|
435
|
-
});
|
|
436
|
-
expect(
|
|
437
|
-
await adapter.findOne({
|
|
438
|
-
model: "user",
|
|
439
|
-
where: [{ field: "emailVerified", value: true }],
|
|
440
|
-
})
|
|
441
|
-
).toEqual(user);
|
|
442
|
-
expect(
|
|
443
|
-
await adapter.findOne({
|
|
444
|
-
model: "user",
|
|
445
|
-
where: [{ field: "emailVerified", value: false }],
|
|
446
|
-
})
|
|
447
|
-
).toEqual(null);
|
|
448
|
-
});
|
|
449
|
-
|
|
450
|
-
test("should handle compound operator on non-unique field without an index", async () => {
|
|
451
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
452
|
-
const adapter = await getAdapter(t)();
|
|
453
|
-
await adapter.create({
|
|
454
|
-
model: "account",
|
|
455
|
-
data: {
|
|
456
|
-
accountId: "foo",
|
|
457
|
-
providerId: "bar",
|
|
458
|
-
userId: "baz",
|
|
459
|
-
accessTokenExpiresAt: null,
|
|
460
|
-
createdAt: Date.now(),
|
|
461
|
-
updatedAt: Date.now(),
|
|
462
|
-
},
|
|
463
|
-
});
|
|
464
|
-
expect(
|
|
465
|
-
await adapter.findOne({
|
|
466
|
-
model: "account",
|
|
467
|
-
where: [
|
|
468
|
-
{
|
|
469
|
-
operator: "lt",
|
|
470
|
-
connector: "AND",
|
|
471
|
-
field: "accessTokenExpiresAt",
|
|
472
|
-
value: Date.now(),
|
|
473
|
-
},
|
|
474
|
-
{
|
|
475
|
-
operator: "ne",
|
|
476
|
-
connector: "AND",
|
|
477
|
-
field: "accessTokenExpiresAt",
|
|
478
|
-
value: null,
|
|
479
|
-
},
|
|
480
|
-
],
|
|
481
|
-
})
|
|
482
|
-
).toEqual(null);
|
|
483
|
-
});
|
|
484
|
-
|
|
485
|
-
test("should fail to create a record with a unique field that already exists", async () => {
|
|
486
|
-
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
487
|
-
const adapter = await getAdapter(t)();
|
|
488
|
-
await adapter.create({
|
|
489
|
-
model: "user",
|
|
490
|
-
data: { name: "foo", email: "foo@bar.com" },
|
|
491
|
-
});
|
|
492
|
-
await expect(
|
|
493
|
-
adapter.create({
|
|
494
|
-
model: "user",
|
|
495
|
-
data: { name: "foo", email: "foo@bar.com" },
|
|
496
|
-
})
|
|
497
|
-
).rejects.toThrow("user email already exists");
|
|
498
|
-
});
|
|
81
|
+
const t = convexTest(schema, import.meta.glob("../component/**/*.*s"));
|
|
82
|
+
await t.action(api.adapterTest.runCustomTests);
|
|
499
83
|
});
|