@convex-dev/better-auth 0.7.0-alpha.1 → 0.7.0-alpha.11
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/commonjs/client/adapter.d.ts +10 -1
- package/dist/commonjs/client/adapter.d.ts.map +1 -1
- package/dist/commonjs/client/adapter.js +183 -192
- package/dist/commonjs/client/adapter.js.map +1 -1
- package/dist/commonjs/client/index.d.ts +238 -179
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +63 -67
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/component/adapterTest.d.ts +19 -0
- package/dist/commonjs/component/adapterTest.d.ts.map +1 -0
- package/dist/commonjs/component/adapterTest.js +82 -0
- package/dist/commonjs/component/adapterTest.js.map +1 -0
- package/dist/commonjs/component/lib.d.ts +218 -548
- package/dist/commonjs/component/lib.d.ts.map +1 -1
- package/dist/commonjs/component/lib.js +315 -286
- package/dist/commonjs/component/lib.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +90 -28
- package/dist/commonjs/component/schema.d.ts.map +1 -1
- package/dist/commonjs/component/schema.js +76 -18
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/util.d.ts +148 -86
- package/dist/commonjs/component/util.d.ts.map +1 -1
- package/dist/commonjs/nextjs/index.d.ts.map +1 -1
- package/dist/commonjs/nextjs/index.js +12 -0
- package/dist/commonjs/nextjs/index.js.map +1 -1
- package/dist/commonjs/plugins/convex/index.d.ts +14 -11
- package/dist/commonjs/plugins/convex/index.d.ts.map +1 -1
- package/dist/commonjs/plugins/convex/index.js +10 -4
- package/dist/commonjs/plugins/convex/index.js.map +1 -1
- package/dist/commonjs/plugins/cross-domain/client.d.ts +1 -1
- package/dist/commonjs/plugins/cross-domain/index.d.ts +5 -3
- package/dist/commonjs/plugins/cross-domain/index.d.ts.map +1 -1
- package/dist/commonjs/plugins/cross-domain/index.js +19 -5
- package/dist/commonjs/plugins/cross-domain/index.js.map +1 -1
- package/dist/commonjs/react/client.d.ts +1 -1
- package/dist/commonjs/react/client.d.ts.map +1 -1
- package/dist/commonjs/react/client.js +3 -9
- package/dist/commonjs/react/client.js.map +1 -1
- package/dist/commonjs/react-start/index.d.ts +37 -3
- package/dist/commonjs/react-start/index.d.ts.map +1 -1
- package/dist/commonjs/react-start/index.js +20 -4
- package/dist/commonjs/react-start/index.js.map +1 -1
- package/dist/commonjs/utils/index.d.ts +2 -0
- package/dist/commonjs/utils/index.d.ts.map +1 -0
- package/dist/commonjs/utils/index.js +8 -0
- package/dist/commonjs/utils/index.js.map +1 -0
- package/dist/esm/client/adapter.d.ts +10 -1
- package/dist/esm/client/adapter.d.ts.map +1 -1
- package/dist/esm/client/adapter.js +183 -192
- package/dist/esm/client/adapter.js.map +1 -1
- package/dist/esm/client/index.d.ts +238 -179
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +63 -67
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/component/adapterTest.d.ts +19 -0
- package/dist/esm/component/adapterTest.d.ts.map +1 -0
- package/dist/esm/component/adapterTest.js +82 -0
- package/dist/esm/component/adapterTest.js.map +1 -0
- package/dist/esm/component/lib.d.ts +218 -548
- package/dist/esm/component/lib.d.ts.map +1 -1
- package/dist/esm/component/lib.js +315 -286
- package/dist/esm/component/lib.js.map +1 -1
- package/dist/esm/component/schema.d.ts +90 -28
- package/dist/esm/component/schema.d.ts.map +1 -1
- package/dist/esm/component/schema.js +76 -18
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/util.d.ts +148 -86
- package/dist/esm/component/util.d.ts.map +1 -1
- package/dist/esm/nextjs/index.d.ts.map +1 -1
- package/dist/esm/nextjs/index.js +12 -0
- package/dist/esm/nextjs/index.js.map +1 -1
- package/dist/esm/plugins/convex/index.d.ts +14 -11
- package/dist/esm/plugins/convex/index.d.ts.map +1 -1
- package/dist/esm/plugins/convex/index.js +10 -4
- package/dist/esm/plugins/convex/index.js.map +1 -1
- package/dist/esm/plugins/cross-domain/client.d.ts +1 -1
- package/dist/esm/plugins/cross-domain/index.d.ts +5 -3
- package/dist/esm/plugins/cross-domain/index.d.ts.map +1 -1
- package/dist/esm/plugins/cross-domain/index.js +19 -5
- package/dist/esm/plugins/cross-domain/index.js.map +1 -1
- package/dist/esm/react/client.d.ts +1 -1
- package/dist/esm/react/client.d.ts.map +1 -1
- package/dist/esm/react/client.js +3 -9
- package/dist/esm/react/client.js.map +1 -1
- package/dist/esm/react-start/index.d.ts +37 -3
- package/dist/esm/react-start/index.d.ts.map +1 -1
- package/dist/esm/react-start/index.js +20 -4
- package/dist/esm/react-start/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +8 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/package.json +20 -5
- package/src/client/adapter.test.ts +144 -0
- package/src/client/adapter.ts +191 -195
- package/src/client/index.ts +64 -80
- package/src/component/_generated/api.d.ts +605 -149
- package/src/component/adapterTest.ts +141 -0
- package/src/component/lib.ts +444 -335
- package/src/component/schema.ts +81 -19
- package/src/nextjs/index.ts +17 -0
- package/src/plugins/convex/index.ts +12 -4
- package/src/plugins/cross-domain/index.ts +19 -5
- package/src/react/client.tsx +5 -11
- package/src/react-start/index.ts +33 -6
- package/src/react-start/vite-env.d.ts +2 -0
- package/dist/commonjs/react-router/index.d.ts +0 -10
- package/dist/commonjs/react-router/index.d.ts.map +0 -1
- package/dist/commonjs/react-router/index.js +0 -24
- package/dist/commonjs/react-router/index.js.map +0 -1
- package/dist/esm/react-router/index.d.ts +0 -10
- package/dist/esm/react-router/index.d.ts.map +0 -1
- package/dist/esm/react-router/index.js +0 -24
- package/dist/esm/react-router/index.js.map +0 -1
- package/src/client/cors.ts +0 -425
- /package/src/{util.ts → utils/index.ts} +0 -0
package/src/client/adapter.ts
CHANGED
|
@@ -1,34 +1,139 @@
|
|
|
1
1
|
import { BetterAuth } from "./index";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
AdapterDebugLogs,
|
|
4
|
+
CleanedWhere,
|
|
5
|
+
createAdapter,
|
|
6
|
+
} from "better-auth/adapters";
|
|
4
7
|
import {
|
|
5
8
|
GenericActionCtx,
|
|
6
9
|
GenericMutationCtx,
|
|
7
10
|
GenericQueryCtx,
|
|
11
|
+
PaginationOptions,
|
|
12
|
+
PaginationResult,
|
|
8
13
|
} from "convex/server";
|
|
14
|
+
import { SetOptional } from "type-fest";
|
|
15
|
+
|
|
16
|
+
const paginate = async (
|
|
17
|
+
next: ({
|
|
18
|
+
paginationOpts,
|
|
19
|
+
}: {
|
|
20
|
+
paginationOpts: PaginationOptions;
|
|
21
|
+
}) => Promise<
|
|
22
|
+
SetOptional<PaginationResult<any>, "page"> & { count?: number }
|
|
23
|
+
>,
|
|
24
|
+
{ limit, numItems }: { limit?: number; numItems?: number } = {}
|
|
25
|
+
) => {
|
|
26
|
+
const state: {
|
|
27
|
+
isDone: boolean;
|
|
28
|
+
cursor: string | null;
|
|
29
|
+
docs: any[];
|
|
30
|
+
count: number;
|
|
31
|
+
} = {
|
|
32
|
+
isDone: false,
|
|
33
|
+
cursor: null,
|
|
34
|
+
docs: [],
|
|
35
|
+
count: 0,
|
|
36
|
+
};
|
|
37
|
+
const onResult = (
|
|
38
|
+
result: SetOptional<PaginationResult<any>, "page"> & { count?: number }
|
|
39
|
+
) => {
|
|
40
|
+
state.cursor =
|
|
41
|
+
result.pageStatus === "SplitRecommended" ||
|
|
42
|
+
result.pageStatus === "SplitRequired"
|
|
43
|
+
? result.splitCursor ?? result.continueCursor
|
|
44
|
+
: result.continueCursor;
|
|
45
|
+
if (result.page) {
|
|
46
|
+
state.docs.push(...result.page);
|
|
47
|
+
state.isDone = (limit && state.docs.length >= limit) || result.isDone;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (result.count) {
|
|
51
|
+
state.count += result.count;
|
|
52
|
+
state.isDone = (limit && state.count >= limit) || result.isDone;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
state.isDone = result.isDone;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
do {
|
|
59
|
+
const result = await next({
|
|
60
|
+
paginationOpts: {
|
|
61
|
+
numItems: Math.min(numItems ?? 200, limit ?? 200, 200),
|
|
62
|
+
cursor: state.cursor,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
onResult(result);
|
|
66
|
+
} while (!state.isDone);
|
|
67
|
+
return state;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
type ConvexCleanedWhere = CleanedWhere & {
|
|
71
|
+
value: string | number | boolean | string[] | number[] | null;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const parseWhere = (where?: CleanedWhere[]): ConvexCleanedWhere[] => {
|
|
75
|
+
return where?.map((where) => {
|
|
76
|
+
if (where.value instanceof Date) {
|
|
77
|
+
return {
|
|
78
|
+
...where,
|
|
79
|
+
value: where.value.getTime(),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return where;
|
|
83
|
+
}) as ConvexCleanedWhere[];
|
|
84
|
+
};
|
|
9
85
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
86
|
+
type GenericCtx =
|
|
87
|
+
| GenericQueryCtx<any>
|
|
88
|
+
| GenericMutationCtx<any>
|
|
89
|
+
| GenericActionCtx<any>;
|
|
90
|
+
|
|
91
|
+
interface ConvexAdapterConfig {
|
|
92
|
+
/**
|
|
93
|
+
* Helps you debug issues with the adapter.
|
|
94
|
+
*/
|
|
95
|
+
debugLogs?: AdapterDebugLogs;
|
|
96
|
+
}
|
|
97
|
+
export const convexAdapter = (
|
|
98
|
+
ctx: GenericCtx,
|
|
99
|
+
component: BetterAuth,
|
|
100
|
+
config: ConvexAdapterConfig = {}
|
|
101
|
+
) => {
|
|
102
|
+
const { debugLogs } = config;
|
|
103
|
+
return createAdapter({
|
|
20
104
|
config: {
|
|
21
105
|
adapterId: "convex",
|
|
22
106
|
adapterName: "Convex Adapter",
|
|
23
|
-
debugLogs: component.config.verbose ?? false,
|
|
107
|
+
debugLogs: component.config.verbose ?? debugLogs ?? false,
|
|
24
108
|
disableIdGeneration: true,
|
|
109
|
+
supportsNumericIds: false,
|
|
110
|
+
usePlural: false,
|
|
111
|
+
mapKeysTransformOutput: {
|
|
112
|
+
_id: "id",
|
|
113
|
+
},
|
|
114
|
+
customTransformInput: ({ data, fieldAttributes, field }) => {
|
|
115
|
+
if (data && fieldAttributes.type === "date") {
|
|
116
|
+
const result = data.getTime();
|
|
117
|
+
console.log("transformed input", field, result);
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
return data;
|
|
121
|
+
},
|
|
122
|
+
customTransformOutput: ({ data, fieldAttributes, field }) => {
|
|
123
|
+
if (data && fieldAttributes.type === "date") {
|
|
124
|
+
const result = new Date(data);
|
|
125
|
+
console.log("transformed output", field, result);
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
return data;
|
|
129
|
+
},
|
|
25
130
|
},
|
|
26
131
|
adapter: ({ schema }) => {
|
|
27
132
|
return {
|
|
28
133
|
id: "convex",
|
|
29
134
|
create: async ({ model, data, select }): Promise<any> => {
|
|
30
135
|
if (!("runMutation" in ctx)) {
|
|
31
|
-
throw new Error("ctx is not
|
|
136
|
+
throw new Error("ctx is not a mutation ctx");
|
|
32
137
|
}
|
|
33
138
|
if (select) {
|
|
34
139
|
throw new Error("select is not supported");
|
|
@@ -39,223 +144,114 @@ export const convexAdapter = <
|
|
|
39
144
|
: model === "session"
|
|
40
145
|
? component.config.authFunctions.createSession
|
|
41
146
|
: component.component.lib.create;
|
|
42
|
-
return ctx.runMutation(createFn, {
|
|
43
|
-
input: {
|
|
147
|
+
return await ctx.runMutation(createFn, {
|
|
148
|
+
input: { model, data },
|
|
44
149
|
});
|
|
45
150
|
},
|
|
46
|
-
findOne: async (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
field,
|
|
52
|
-
unique:
|
|
53
|
-
field === "id" ? true : schema[model].fields[field].unique,
|
|
54
|
-
value: value instanceof Date ? value.getTime() : value,
|
|
55
|
-
});
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
if (
|
|
59
|
-
model === "account" &&
|
|
60
|
-
where.length === 2 &&
|
|
61
|
-
where[0].field === "accountId" &&
|
|
62
|
-
where[1].field === "providerId" &&
|
|
63
|
-
where[0].connector === "AND"
|
|
64
|
-
) {
|
|
65
|
-
return ctx.runQuery(
|
|
66
|
-
component.component.lib.getAccountByAccountIdAndProviderId,
|
|
67
|
-
{
|
|
68
|
-
accountId: where[0].value as string,
|
|
69
|
-
providerId: where[1].value as string,
|
|
70
|
-
}
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
throw new Error("where clause not supported");
|
|
151
|
+
findOne: async (data): Promise<any> => {
|
|
152
|
+
return await ctx.runQuery(component.component.lib.findOne, {
|
|
153
|
+
...data,
|
|
154
|
+
where: parseWhere(data.where),
|
|
155
|
+
});
|
|
74
156
|
},
|
|
75
|
-
findMany: async ({
|
|
76
|
-
|
|
77
|
-
where,
|
|
78
|
-
sortBy,
|
|
79
|
-
offset,
|
|
80
|
-
limit,
|
|
81
|
-
}): Promise<any[]> => {
|
|
82
|
-
if (offset) {
|
|
157
|
+
findMany: async (data): Promise<any[]> => {
|
|
158
|
+
if (data.offset) {
|
|
83
159
|
throw new Error("offset not supported");
|
|
84
160
|
}
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
(sortBy?.field === "createdAt" && sortBy?.direction === "desc"))
|
|
90
|
-
) {
|
|
91
|
-
return ctx.runQuery(component.component.lib.getJwks, { limit });
|
|
92
|
-
}
|
|
93
|
-
if (
|
|
94
|
-
where?.length !== 1 ||
|
|
95
|
-
(where[0].operator && where[0].operator !== "eq")
|
|
96
|
-
) {
|
|
97
|
-
throw new Error("where clause not supported");
|
|
98
|
-
}
|
|
99
|
-
if (model === "verification" && where[0].field === "identifier") {
|
|
100
|
-
return ctx.runQuery(
|
|
101
|
-
component.component.lib.listVerificationsByIdentifier,
|
|
102
|
-
{
|
|
103
|
-
identifier: where[0].value as string,
|
|
104
|
-
sortBy,
|
|
105
|
-
limit,
|
|
106
|
-
}
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
if (model === "account" && where[0].field === "userId" && !sortBy) {
|
|
110
|
-
return ctx.runQuery(component.component.lib.getAccountsByUserId, {
|
|
111
|
-
userId: where[0].value as any,
|
|
112
|
-
limit,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
if (model === "session" && where[0].field === "userId" && !sortBy) {
|
|
116
|
-
return ctx.runQuery(component.component.lib.getSessionsByUserId, {
|
|
117
|
-
userId: where[0].value as any,
|
|
118
|
-
limit,
|
|
161
|
+
if (data.where?.length === 1 && data.where[0].operator === "in") {
|
|
162
|
+
return ctx.runQuery(component.component.lib.getIn, {
|
|
163
|
+
...data,
|
|
164
|
+
where: parseWhere(data.where),
|
|
119
165
|
});
|
|
120
166
|
}
|
|
121
|
-
|
|
167
|
+
const result = await paginate(
|
|
168
|
+
async ({ paginationOpts }) => {
|
|
169
|
+
return await ctx.runQuery(component.component.lib.findMany, {
|
|
170
|
+
...data,
|
|
171
|
+
where: parseWhere(data.where),
|
|
172
|
+
paginationOpts,
|
|
173
|
+
});
|
|
174
|
+
},
|
|
175
|
+
{ limit: data.limit }
|
|
176
|
+
);
|
|
177
|
+
return result.docs;
|
|
122
178
|
},
|
|
123
|
-
count: async (
|
|
179
|
+
count: async () => {
|
|
124
180
|
throw new Error("count not implemented");
|
|
125
|
-
// return 0;
|
|
126
181
|
},
|
|
127
|
-
update: async (
|
|
182
|
+
update: async (data): Promise<any> => {
|
|
128
183
|
if (!("runMutation" in ctx)) {
|
|
129
|
-
throw new Error("ctx is not
|
|
184
|
+
throw new Error("ctx is not a mutation ctx");
|
|
130
185
|
}
|
|
131
|
-
if (where?.length === 1 && where[0].operator === "eq") {
|
|
132
|
-
const { value, field } = where[0];
|
|
186
|
+
if (data.where?.length === 1 && data.where[0].operator === "eq") {
|
|
133
187
|
const updateFn =
|
|
134
|
-
model === "user"
|
|
188
|
+
data.model === "user"
|
|
135
189
|
? component.config.authFunctions.updateUser
|
|
136
|
-
: component.component.lib.
|
|
190
|
+
: component.component.lib.updateOne;
|
|
137
191
|
return ctx.runMutation(updateFn, {
|
|
138
192
|
input: {
|
|
139
|
-
|
|
140
|
-
where:
|
|
141
|
-
|
|
142
|
-
value: value instanceof Date ? value.getTime() : value,
|
|
143
|
-
},
|
|
144
|
-
value: transformInput(model, update as any),
|
|
193
|
+
model: data.model,
|
|
194
|
+
where: parseWhere(data.where),
|
|
195
|
+
update: data.update as any,
|
|
145
196
|
},
|
|
146
197
|
});
|
|
147
198
|
}
|
|
148
199
|
throw new Error("where clause not supported");
|
|
149
200
|
},
|
|
150
|
-
delete: async (
|
|
201
|
+
delete: async (data) => {
|
|
151
202
|
if (!("runMutation" in ctx)) {
|
|
152
|
-
throw new Error("ctx is not
|
|
203
|
+
throw new Error("ctx is not a mutation ctx");
|
|
153
204
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
value: value instanceof Date ? value.getTime() : value,
|
|
164
|
-
});
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
throw new Error("where clause not supported");
|
|
168
|
-
// return null
|
|
205
|
+
const deleteFn =
|
|
206
|
+
data.model === "user"
|
|
207
|
+
? component.config.authFunctions.deleteUser
|
|
208
|
+
: component.component.lib.deleteOne;
|
|
209
|
+
await ctx.runMutation(deleteFn, {
|
|
210
|
+
model: data.model,
|
|
211
|
+
where: parseWhere(data.where),
|
|
212
|
+
});
|
|
213
|
+
return;
|
|
169
214
|
},
|
|
170
|
-
deleteMany: async (
|
|
171
|
-
if (!("
|
|
172
|
-
throw new Error("ctx is not
|
|
215
|
+
deleteMany: async (data) => {
|
|
216
|
+
if (!("runMutation" in ctx)) {
|
|
217
|
+
throw new Error("ctx is not a mutation ctx");
|
|
173
218
|
}
|
|
174
219
|
if (
|
|
175
|
-
model === "
|
|
176
|
-
where?.length === 1 &&
|
|
177
|
-
where[0].operator === "
|
|
178
|
-
where[0].field === "expiresAt"
|
|
220
|
+
data.model === "session" &&
|
|
221
|
+
data.where?.length === 1 &&
|
|
222
|
+
data.where[0].operator === "in"
|
|
179
223
|
) {
|
|
180
|
-
return ctx.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
if (where?.length === 1 && where[0].field === "userId") {
|
|
188
|
-
return ctx.runAction(component.component.lib.deleteAllForUser, {
|
|
189
|
-
table: model,
|
|
190
|
-
userId: where[0].value as any,
|
|
224
|
+
return ctx.runMutation(component.component.lib.deleteIn, {
|
|
225
|
+
input: {
|
|
226
|
+
table: data.model,
|
|
227
|
+
field: data.where[0].field as any,
|
|
228
|
+
values: data.where[0].value as string[],
|
|
229
|
+
},
|
|
191
230
|
});
|
|
192
231
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
typeof where[1].value === "number"
|
|
202
|
-
) {
|
|
203
|
-
return ctx.runMutation(
|
|
204
|
-
component.component.lib.deleteExpiredSessions,
|
|
205
|
-
{
|
|
206
|
-
userId: where[0].value as string,
|
|
207
|
-
expiresAt: where[1].value as number,
|
|
208
|
-
}
|
|
209
|
-
);
|
|
210
|
-
}
|
|
211
|
-
throw new Error("where clause not supported");
|
|
212
|
-
// return count;
|
|
232
|
+
const result = await paginate(async ({ paginationOpts }) => {
|
|
233
|
+
return await ctx.runMutation(component.component.lib.deleteMany, {
|
|
234
|
+
...data,
|
|
235
|
+
where: parseWhere(data.where),
|
|
236
|
+
paginationOpts,
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
return result.count;
|
|
213
240
|
},
|
|
214
|
-
updateMany: async (
|
|
241
|
+
updateMany: async (data) => {
|
|
215
242
|
if (!("runMutation" in ctx)) {
|
|
216
243
|
throw new Error("ctx is not an action ctx");
|
|
217
244
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
) {
|
|
224
|
-
return ctx.runMutation(component.component.lib.updateTwoFactor, {
|
|
225
|
-
userId: where[0].value as string,
|
|
226
|
-
update: transformInput(model, update as any),
|
|
245
|
+
const result = await paginate(async ({ paginationOpts }) => {
|
|
246
|
+
return await ctx.runMutation(component.component.lib.updateMany, {
|
|
247
|
+
...data,
|
|
248
|
+
where: parseWhere(data.where),
|
|
249
|
+
paginationOpts,
|
|
227
250
|
});
|
|
228
|
-
}
|
|
229
|
-
if (
|
|
230
|
-
model === "account" &&
|
|
231
|
-
where?.length === 2 &&
|
|
232
|
-
where[0].operator === "eq" &&
|
|
233
|
-
where[0].connector === "AND" &&
|
|
234
|
-
where[0].field === "userId" &&
|
|
235
|
-
where[1].operator === "eq" &&
|
|
236
|
-
where[1].field === "providerId"
|
|
237
|
-
) {
|
|
238
|
-
return ctx.runMutation(
|
|
239
|
-
component.component.lib.updateUserProviderAccounts,
|
|
240
|
-
{
|
|
241
|
-
userId: where[0].value as string,
|
|
242
|
-
providerId: where[1].value as string,
|
|
243
|
-
update: transformInput(model, update as any),
|
|
244
|
-
}
|
|
245
|
-
);
|
|
246
|
-
}
|
|
247
|
-
throw new Error("updateMany not implemented");
|
|
248
|
-
//return 0;
|
|
249
|
-
/*
|
|
250
|
-
const { model, where, update } = data;
|
|
251
|
-
const table = db[model];
|
|
252
|
-
const res = convertWhereClause(where, table, model);
|
|
253
|
-
res.forEach((record) => {
|
|
254
|
-
Object.assign(record, update);
|
|
255
251
|
});
|
|
256
|
-
return
|
|
257
|
-
*/
|
|
252
|
+
return result.count;
|
|
258
253
|
},
|
|
259
254
|
};
|
|
260
255
|
},
|
|
261
256
|
});
|
|
257
|
+
};
|