eden2query 0.3.5 → 0.3.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/README.md +360 -86
- package/dist/index.d.ts +66 -39
- package/dist/index.js +64 -40
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# eden2query
|
|
2
2
|
|
|
3
|
-
Type-safe [Eden Treaty](https://elysiajs.com/eden/overview) to [React Query](https://tanstack.com/query) helpers.
|
|
3
|
+
Type-safe [Eden Treaty](https://elysiajs.com/eden/overview) to [React Query](https://tanstack.com/query) helpers. Create fully type-safe React Query hooks from your Elysia API with zero runtime overhead.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -8,136 +8,410 @@ Type-safe [Eden Treaty](https://elysiajs.com/eden/overview) to [React Query](htt
|
|
|
8
8
|
bun add eden2query @elysiajs/eden @tanstack/react-query
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Quick Start
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
### 1. Define your Elysia API
|
|
14
14
|
|
|
15
15
|
```ts
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
)
|
|
16
|
+
import Elysia, { t } from "elysia";
|
|
17
|
+
|
|
18
|
+
const app = new Elysia({ prefix: "/api" })
|
|
19
|
+
.get("/users/:id", ({ params, query }) => {
|
|
20
|
+
return { user: { id: params.id, name: query.name } };
|
|
21
|
+
}, {
|
|
22
|
+
params: t.Object({ id: t.String() }),
|
|
23
|
+
query: t.Object({ name: t.String() }),
|
|
24
|
+
response: { 200: t.Object({ user: t.Object({ id: t.String(), name: t.String() }) }) },
|
|
25
|
+
})
|
|
26
|
+
.post("/users", ({ body }) => {
|
|
27
|
+
return { id: "123", ...body };
|
|
28
|
+
}, {
|
|
29
|
+
body: t.Object({ name: t.String(), email: t.String() }),
|
|
30
|
+
response: { 200: t.Object({ id: t.String(), name: t.String(), email: t.String() }) },
|
|
31
|
+
})
|
|
32
|
+
.put("/users/:id", ({ params, body }) => {
|
|
33
|
+
return { id: params.id, ...body };
|
|
34
|
+
}, {
|
|
35
|
+
params: t.Object({ id: t.String() }),
|
|
36
|
+
body: t.Object({ name: t.String() }),
|
|
37
|
+
response: { 200: t.Object({ id: t.String(), name: t.String() }) },
|
|
38
|
+
})
|
|
39
|
+
.delete("/users/:id", ({ params }) => {
|
|
40
|
+
return { deleted: params.id };
|
|
41
|
+
}, {
|
|
42
|
+
params: t.Object({ id: t.String() }),
|
|
43
|
+
response: { 200: t.Object({ deleted: t.String() }) },
|
|
44
|
+
});
|
|
20
45
|
```
|
|
21
46
|
|
|
22
|
-
|
|
47
|
+
### 2. Create Treaty Client
|
|
23
48
|
|
|
24
49
|
```ts
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
client.api.resource.post(vars.body, { query: vars.query }),
|
|
29
|
-
{ onSuccess: () => console.log("Success") },
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
// Parameterised routes — bind params first
|
|
33
|
-
const putOptions = treatyMutationOptions(
|
|
34
|
-
client.api.resource({ id: "dummy" }).put,
|
|
35
|
-
{ onSettled: () => console.log("Settled") },
|
|
36
|
-
);
|
|
50
|
+
import { treaty } from "@elysiajs/eden";
|
|
51
|
+
|
|
52
|
+
const client = treaty<typeof app>("http://localhost:3000");
|
|
37
53
|
```
|
|
38
54
|
|
|
39
|
-
|
|
55
|
+
### 3. Create Type-Safe Hooks
|
|
40
56
|
|
|
41
57
|
```ts
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
)
|
|
58
|
+
import { treatyQueryHook, treatyMutationHook } from "eden2query";
|
|
59
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
60
|
+
|
|
61
|
+
// GET - Query Hook (with params)
|
|
62
|
+
function getUser(params: { id: string }) {
|
|
63
|
+
return client.api.users({ id: params.id }).get;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const useGetUser = treatyQueryHook(getUser, (request) => {
|
|
67
|
+
return {
|
|
68
|
+
queryKey: ["users", request.params.id],
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// POST - Mutation Hook
|
|
73
|
+
function createUser() {
|
|
74
|
+
return client.api.users.post;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const useCreateUser = treatyMutationHook(createUser, () => {
|
|
78
|
+
const queryClient = useQueryClient();
|
|
79
|
+
return {
|
|
80
|
+
onSuccess: () => {
|
|
81
|
+
queryClient.invalidateQueries({ queryKey: ["users"] });
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// PUT - Mutation Hook with Params
|
|
87
|
+
function updateUser(params: { id: string }) {
|
|
88
|
+
return client.api.users({ id: params.id }).put;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const useUpdateUser = treatyMutationHook(updateUser, () => {
|
|
92
|
+
const queryClient = useQueryClient();
|
|
93
|
+
return {
|
|
94
|
+
onSuccess: () => {
|
|
95
|
+
queryClient.invalidateQueries({ queryKey: ["users"] });
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// DELETE - Mutation Hook with Params (no body)
|
|
101
|
+
function deleteUser(params: { id: string }) {
|
|
102
|
+
return client.api.users({ id: params.id }).delete;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const useDeleteUser = treatyMutationHook(deleteUser, () => {
|
|
106
|
+
const queryClient = useQueryClient();
|
|
107
|
+
return {
|
|
108
|
+
onSuccess: () => {
|
|
109
|
+
queryClient.invalidateQueries({ queryKey: ["users"] });
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
});
|
|
46
113
|
```
|
|
47
114
|
|
|
48
|
-
|
|
115
|
+
### 4. Use in Components
|
|
49
116
|
|
|
50
117
|
```tsx
|
|
51
|
-
|
|
118
|
+
function UserProfile({ userId }: { userId: string }) {
|
|
119
|
+
// Query - automatically typed
|
|
120
|
+
const { data, isLoading } = useGetUser({
|
|
121
|
+
params: { id: userId },
|
|
122
|
+
query: { name: "John" },
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// Mutations - fully typed
|
|
126
|
+
const createMutation = useCreateUser({
|
|
127
|
+
onSuccess: (data) => {
|
|
128
|
+
console.log("Created:", data);
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const updateMutation = useUpdateUser({
|
|
133
|
+
onSuccess: (data) => {
|
|
134
|
+
console.log("Updated:", data);
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
const deleteMutation = useDeleteUser({
|
|
139
|
+
onSuccess: (data) => {
|
|
140
|
+
console.log("Deleted:", data);
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
return (
|
|
145
|
+
<div>
|
|
146
|
+
{isLoading ? "Loading..." : <div>{data?.user.name}</div>}
|
|
147
|
+
|
|
148
|
+
<button onClick={() => createMutation.mutate({
|
|
149
|
+
body: { name: "New User", email: "user@example.com" },
|
|
150
|
+
})}>
|
|
151
|
+
Create User
|
|
152
|
+
</button>
|
|
153
|
+
|
|
154
|
+
<button onClick={() => updateMutation.mutate({
|
|
155
|
+
params: { id: userId },
|
|
156
|
+
body: { name: "Updated Name" },
|
|
157
|
+
})}>
|
|
158
|
+
Update User
|
|
159
|
+
</button>
|
|
160
|
+
|
|
161
|
+
<button onClick={() => deleteMutation.mutate({
|
|
162
|
+
params: { id: userId },
|
|
163
|
+
// body is not required for DELETE mutations
|
|
164
|
+
})}>
|
|
165
|
+
Delete User
|
|
166
|
+
</button>
|
|
167
|
+
</div>
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## API Reference
|
|
52
173
|
|
|
53
|
-
|
|
54
|
-
postMutation.mutate({ body: { name: "World" }, query: { q: "hello" } });
|
|
174
|
+
### `treatyQueryHook`
|
|
55
175
|
|
|
56
|
-
|
|
57
|
-
putMutation.mutate({ name: "World" });
|
|
176
|
+
Creates a type-safe React Query hook for GET requests.
|
|
58
177
|
|
|
59
|
-
|
|
60
|
-
|
|
178
|
+
**Signature:**
|
|
179
|
+
```ts
|
|
180
|
+
function treatyQueryHook<TParams, TOption extends object, TResponse extends Record<number, unknown>>(
|
|
181
|
+
fn: TreatyQueryFunctionFactory<TParams, TOption, TResponse>,
|
|
182
|
+
useOptions: (request: TreatyQueryRequest<TParams, TOption>) => Omit<UseQueryOptions<TResponse>, "queryFn">
|
|
183
|
+
): (request: TreatyQueryRequest<TParams, TOption>, options?: UseQueryOptions) => UseQueryResult
|
|
61
184
|
```
|
|
62
185
|
|
|
63
|
-
|
|
186
|
+
**Parameters:**
|
|
187
|
+
- `fn`: A factory function that accepts params (if route has params) or no params (if route doesn't have params), and returns a Treaty query function
|
|
188
|
+
- `useOptions`: A function that receives the request and returns query options (including `queryKey`)
|
|
189
|
+
|
|
190
|
+
**Returns:** A hook function that accepts a request object and optional query options
|
|
64
191
|
|
|
192
|
+
**Example:**
|
|
65
193
|
```ts
|
|
66
|
-
|
|
67
|
-
|
|
194
|
+
// With params
|
|
195
|
+
function getUser(params: { id: string }) {
|
|
196
|
+
return client.api.users({ id: params.id }).get;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const useGetUser = treatyQueryHook(getUser, (request) => ({
|
|
200
|
+
queryKey: ["users", request.params.id], // params is required when route has params
|
|
201
|
+
staleTime: 5000,
|
|
202
|
+
}));
|
|
203
|
+
|
|
204
|
+
// Usage
|
|
205
|
+
const { data } = useGetUser({
|
|
206
|
+
params: { id: "123" }, // Required when route has params
|
|
207
|
+
query: { name: "John" },
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
// Without params
|
|
211
|
+
function getUsers() {
|
|
212
|
+
return client.api.users.get;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const useGetUsers = treatyQueryHook(getUsers, (request) => ({
|
|
216
|
+
queryKey: ["users"],
|
|
217
|
+
}));
|
|
218
|
+
|
|
219
|
+
// Usage - params are absent from the type
|
|
220
|
+
const { data } = useGetUsers({
|
|
221
|
+
query: { page: "1" },
|
|
222
|
+
// params is not part of the request type
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### `treatyMutationHook`
|
|
227
|
+
|
|
228
|
+
Creates a type-safe React Query hook for mutations (POST, PUT, DELETE, etc.).
|
|
229
|
+
|
|
230
|
+
**Signature:**
|
|
231
|
+
```ts
|
|
232
|
+
function treatyMutationHook<TParams, TBody, TOption, TResponse extends Record<number, unknown>>(
|
|
233
|
+
fn: TreatyMutationFunctionFactory<TParams, TBody, TOption, TResponse>,
|
|
234
|
+
useOptions: () => Omit<UseMutationOptions<TParams, TBody, TOption, TResponse>, "mutationFn">
|
|
235
|
+
): (options?: UseMutationOptions) => UseMutationResult
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Parameters:**
|
|
239
|
+
- `fn`: A factory function that accepts params (if route has params) or no params (if route doesn't have params), and returns a Treaty mutation function
|
|
240
|
+
- `useOptions`: A hook function that returns default mutation options (can use React hooks like `useQueryClient`)
|
|
241
|
+
|
|
242
|
+
**Returns:** A hook function that accepts optional mutation options
|
|
243
|
+
|
|
244
|
+
**Example:**
|
|
245
|
+
```ts
|
|
246
|
+
// Without params, with body
|
|
247
|
+
function createUser() {
|
|
248
|
+
return client.api.users.post;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const useCreateUser = treatyMutationHook(createUser, () => {
|
|
252
|
+
const queryClient = useQueryClient();
|
|
253
|
+
return {
|
|
254
|
+
onSuccess: () => {
|
|
255
|
+
queryClient.invalidateQueries({ queryKey: ["users"] });
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
// Usage
|
|
261
|
+
const mutation = useCreateUser({
|
|
262
|
+
onSuccess: (data) => console.log(data),
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
mutation.mutate({
|
|
266
|
+
body: { name: "John", email: "john@example.com" },
|
|
267
|
+
// params is not part of the request type
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// With params and body
|
|
271
|
+
function updateUser(params: { id: string }) {
|
|
272
|
+
return client.api.users({ id: params.id }).put;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const useUpdateUser = treatyMutationHook(updateUser, () => ({
|
|
276
|
+
onSuccess: () => console.log("Updated"),
|
|
277
|
+
}));
|
|
278
|
+
|
|
279
|
+
useUpdateUser().mutate({
|
|
280
|
+
params: { id: "123" },
|
|
281
|
+
body: { name: "Updated Name" },
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
// With params, without body
|
|
285
|
+
function deleteUser(params: { id: string }) {
|
|
286
|
+
return client.api.users({ id: params.id }).delete;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const useDeleteUser = treatyMutationHook(deleteUser, () => ({
|
|
290
|
+
onSuccess: () => console.log("Deleted"),
|
|
291
|
+
}));
|
|
292
|
+
|
|
293
|
+
useDeleteUser().mutate({
|
|
294
|
+
params: { id: "123" },
|
|
295
|
+
// body is not part of the request type
|
|
296
|
+
});
|
|
68
297
|
```
|
|
69
298
|
|
|
70
|
-
|
|
299
|
+
## Type Safety
|
|
300
|
+
|
|
301
|
+
All types are inferred end-to-end from your Elysia route definitions:
|
|
302
|
+
|
|
303
|
+
- **Request types**: Automatically inferred from route params, query, and body schemas
|
|
304
|
+
- `params` and `body` are **conditionally included** in request types - they're absent (not optional) when the route doesn't require them
|
|
305
|
+
- This means you don't need to pass `undefined` or `unknown` values - the fields simply don't exist in the type
|
|
306
|
+
- **Response types**: Extracted from your response schema definitions
|
|
307
|
+
- **Error types**: Typed based on your error response schemas
|
|
308
|
+
- **Query keys**: Type-safe based on your request structure
|
|
309
|
+
|
|
310
|
+
## Patterns
|
|
71
311
|
|
|
72
|
-
|
|
312
|
+
### Routes with Params
|
|
73
313
|
|
|
74
|
-
|
|
314
|
+
For routes like `/users/:id`, params are **required** and included in the request type:
|
|
75
315
|
|
|
76
316
|
```ts
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
317
|
+
function getUser(params: { id: string }) {
|
|
318
|
+
return client.api.users({ id: params.id }).get;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const useGetUser = treatyQueryHook(getUser, (request) => ({
|
|
322
|
+
queryKey: ["users", request.params.id], // params is required here
|
|
323
|
+
}));
|
|
324
|
+
|
|
325
|
+
// Must provide params
|
|
326
|
+
useGetUser({
|
|
327
|
+
params: { id: "123" }, // ✅ Required - params is part of the request type
|
|
328
|
+
query: { name: "John" },
|
|
329
|
+
});
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Routes without Params
|
|
333
|
+
|
|
334
|
+
For routes without params, params are **absent** from the request type (not optional):
|
|
81
335
|
|
|
82
|
-
|
|
83
|
-
|
|
336
|
+
```ts
|
|
337
|
+
function getUsers() {
|
|
338
|
+
return client.api.users.get;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const useGetUsers = treatyQueryHook(getUsers, (request) => ({
|
|
342
|
+
queryKey: ["users"],
|
|
343
|
+
}));
|
|
344
|
+
|
|
345
|
+
// Params are absent from the type - you cannot include them
|
|
346
|
+
useGetUsers({
|
|
347
|
+
query: { page: "1" },
|
|
348
|
+
// params is not part of the request type at all
|
|
349
|
+
});
|
|
84
350
|
```
|
|
85
351
|
|
|
86
|
-
|
|
352
|
+
### Mutations with Body (no params)
|
|
353
|
+
|
|
354
|
+
POST mutations without route params include a `body` field:
|
|
87
355
|
|
|
88
356
|
```ts
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return {
|
|
101
|
-
onSettled(...args) {
|
|
102
|
-
queryClient.invalidateQueries({ queryKey: ["resource"] });
|
|
103
|
-
options.onSettled?.(...args);
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
},
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
// In a component
|
|
110
|
-
const postMutation = usePostResource();
|
|
111
|
-
postMutation.mutate({ body: { name: "World" } });
|
|
112
|
-
|
|
113
|
-
const postWithInvalidation = usePostResourceWithInvalidation({
|
|
114
|
-
onSuccess: () => console.log("Success"),
|
|
115
|
-
});
|
|
116
|
-
postWithInvalidation.mutate({ body: { name: "World" } });
|
|
357
|
+
function createUser() {
|
|
358
|
+
return client.api.users.post;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
const useCreateUser = treatyMutationHook(createUser, () => ({}));
|
|
362
|
+
|
|
363
|
+
const mutation = useCreateUser();
|
|
364
|
+
mutation.mutate({
|
|
365
|
+
body: { name: "John", email: "john@example.com" },
|
|
366
|
+
// params is not part of the request type
|
|
367
|
+
});
|
|
117
368
|
```
|
|
118
369
|
|
|
119
|
-
|
|
370
|
+
### Mutations with Params and Body
|
|
120
371
|
|
|
121
|
-
|
|
372
|
+
PUT mutations can have both params and body:
|
|
122
373
|
|
|
123
|
-
|
|
374
|
+
```ts
|
|
375
|
+
function updateUser(params: { id: string }) {
|
|
376
|
+
return client.api.users({ id: params.id }).put;
|
|
377
|
+
}
|
|
124
378
|
|
|
125
|
-
|
|
379
|
+
const useUpdateUser = treatyMutationHook(updateUser, () => ({}));
|
|
126
380
|
|
|
127
|
-
|
|
128
|
-
|
|
381
|
+
const mutation = useUpdateUser();
|
|
382
|
+
mutation.mutate({
|
|
383
|
+
params: { id: "123" }, // Required - params is part of the request type
|
|
384
|
+
body: { name: "Updated Name" }, // Required - body is part of the request type
|
|
385
|
+
});
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Mutations with Only Params (no body)
|
|
129
389
|
|
|
130
|
-
|
|
390
|
+
DELETE mutations typically only have params, and body is **absent** from the request type:
|
|
391
|
+
|
|
392
|
+
```ts
|
|
393
|
+
function deleteUser(params: { id: string }) {
|
|
394
|
+
return client.api.users({ id: params.id }).delete;
|
|
395
|
+
}
|
|
131
396
|
|
|
132
|
-
|
|
397
|
+
const useDeleteUser = treatyMutationHook(deleteUser, () => ({}));
|
|
398
|
+
|
|
399
|
+
const mutation = useDeleteUser();
|
|
400
|
+
mutation.mutate({
|
|
401
|
+
params: { id: "123" }, // Required - params is part of the request type
|
|
402
|
+
// body is not part of the request type at all
|
|
403
|
+
});
|
|
404
|
+
```
|
|
133
405
|
|
|
134
|
-
|
|
406
|
+
## Options Merging
|
|
135
407
|
|
|
136
|
-
|
|
408
|
+
Options are merged in this order (later options override earlier ones):
|
|
137
409
|
|
|
138
|
-
|
|
410
|
+
1. Base options from `useOptions` hook
|
|
411
|
+
2. Options passed to the hook factory
|
|
412
|
+
3. Options passed when calling the hook
|
|
139
413
|
|
|
140
|
-
|
|
414
|
+
Callbacks (`onSuccess`, `onError`, etc.) are **chained** - all callbacks run in order.
|
|
141
415
|
|
|
142
416
|
## License
|
|
143
417
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,43 +1,70 @@
|
|
|
1
1
|
import { Treaty } from "@elysiajs/eden";
|
|
2
2
|
import { UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from "@tanstack/react-query";
|
|
3
|
-
type
|
|
4
|
-
type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
type
|
|
3
|
+
type IsEmpty<T> = [T] extends [never | undefined | void] ? true : [unknown] extends [T] ? [T] extends [unknown] ? true : false : false;
|
|
4
|
+
type TreatyMutationFunctionFactory<
|
|
5
|
+
TParams,
|
|
6
|
+
TBody,
|
|
7
|
+
TOption,
|
|
8
|
+
TResponse extends Record<number, unknown>
|
|
9
|
+
> = IsEmpty<TParams> extends true ? () => TreatyMutationFunction<TBody, TOption, TResponse> : (params: TParams) => TreatyMutationFunction<TBody, TOption, TResponse>;
|
|
10
|
+
type TreatyMutationFunction<
|
|
11
|
+
TBody,
|
|
12
|
+
TOption,
|
|
13
|
+
TResponse extends Record<number, unknown>
|
|
14
|
+
> = (body: TBody, options: TOption) => Promise<Treaty.TreatyResponse<TResponse>>;
|
|
15
|
+
type TreatyMutationRequest<
|
|
16
|
+
TParams,
|
|
17
|
+
TBody,
|
|
18
|
+
TOption
|
|
19
|
+
> = TOption & (IsEmpty<TParams> extends true ? {} : {
|
|
20
|
+
params: TParams;
|
|
21
|
+
}) & (IsEmpty<TBody> extends true ? {} : {
|
|
22
|
+
body: TBody;
|
|
23
|
+
});
|
|
24
|
+
type TreatyData<TResponse extends Record<number, unknown>> = Treaty.TreatyResponse<TResponse>["data"];
|
|
25
|
+
type TreatyError<TResponse extends Record<number, unknown>> = Treaty.TreatyResponse<TResponse>["error"];
|
|
11
26
|
type TreatyMutationOptions<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
TParams,
|
|
28
|
+
TBody,
|
|
29
|
+
TOption,
|
|
30
|
+
TResponse extends Record<number, unknown>
|
|
31
|
+
> = UseMutationOptions<TreatyData<TResponse>, TreatyError<TResponse>, TreatyMutationRequest<TParams, TBody, TOption>>;
|
|
32
|
+
type TreatyMutationHook<
|
|
33
|
+
TParams,
|
|
34
|
+
TBody,
|
|
35
|
+
TOption,
|
|
36
|
+
TResponse extends Record<number, unknown>
|
|
37
|
+
> = (options?: Omit<TreatyMutationOptions<TParams, TBody, TOption, TResponse>, "mutationFn">) => UseMutationResult<TreatyData<TResponse>, TreatyError<TResponse>, TreatyMutationRequest<TParams, TBody, TOption>>;
|
|
38
|
+
declare function treatyMutationHook<
|
|
39
|
+
TParams,
|
|
40
|
+
TBody,
|
|
41
|
+
TOption,
|
|
42
|
+
TResponse extends Record<number, unknown>
|
|
43
|
+
>(fn: TreatyMutationFunctionFactory<TParams, TBody, TOption, TResponse>, useOptions: () => Omit<TreatyMutationOptions<TParams, TBody, TOption, TResponse>, "mutationFn">): TreatyMutationHook<TParams, TBody, TOption, TResponse>;
|
|
44
|
+
type TreatyQueryFunction<
|
|
45
|
+
TOption extends object,
|
|
46
|
+
TResponse extends Record<number, unknown>
|
|
47
|
+
> = (options: TOption) => Promise<Treaty.TreatyResponse<TResponse>>;
|
|
48
|
+
type TreatyQueryFunctionFactory<
|
|
49
|
+
TParams,
|
|
50
|
+
TOption extends object,
|
|
51
|
+
TResponse extends Record<number, unknown>
|
|
52
|
+
> = IsEmpty<TParams> extends true ? () => TreatyQueryFunction<TOption, TResponse> : (params: TParams) => TreatyQueryFunction<TOption, TResponse>;
|
|
53
|
+
type TreatyQueryRequest<
|
|
54
|
+
TParams,
|
|
55
|
+
TOption extends object
|
|
56
|
+
> = TOption & (IsEmpty<TParams> extends true ? {} : {
|
|
57
|
+
params: TParams;
|
|
58
|
+
});
|
|
20
59
|
type TreatyQueryOptions<TResponse extends Record<number, unknown>> = UseQueryOptions<TreatyData<TResponse>, TreatyError<TResponse>>;
|
|
21
|
-
type
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
TResponse extends
|
|
25
|
-
> = Omit<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
declare function treatyMutationOptions<
|
|
33
|
-
TVariables,
|
|
34
|
-
TResponse extends TreatyResponse
|
|
35
|
-
>(fn: TreatyFunctionWithParams<TVariables, TResponse>, options?: UseTreatyMutationOptions<TVariables, TResponse>): TreatyMutationOptions<TVariables, TResponse>;
|
|
36
|
-
declare function treatyQueryOptions<TResponse extends TreatyResponse = TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, options: UseTreatyQueryOptions<TResponse>): TreatyQueryOptions<TResponse>;
|
|
37
|
-
declare function createTreatyMutationHook<TResponse extends TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, useOptions?: UseTreatyMutationOptions<void, TResponse> | ((options: Partial<UseTreatyMutationOptions<void, TResponse>>) => UseTreatyMutationOptions<void, TResponse>)): UseTreatyMutationHook<void, TResponse>;
|
|
38
|
-
declare function createTreatyMutationHook<
|
|
39
|
-
TVariables,
|
|
40
|
-
TResponse extends TreatyResponse
|
|
41
|
-
>(fn: TreatyFunctionWithParams<TVariables, TResponse>, useOptions?: UseTreatyMutationOptions<TVariables, TResponse> | ((options: Partial<UseTreatyMutationOptions<TVariables, TResponse>>) => UseTreatyMutationOptions<TVariables, TResponse>)): UseTreatyMutationHook<TVariables, TResponse>;
|
|
42
|
-
declare function createTreatyQueryHook<TResponse extends TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, useOptions: UseTreatyQueryOptions<TResponse> | ((options: Partial<UseTreatyQueryOptions<TResponse>>) => UseTreatyQueryOptions<TResponse>)): UseTreatyQueryHook<TResponse>;
|
|
43
|
-
export { treatyQueryOptions, treatyMutationOptions, createTreatyQueryHook, createTreatyMutationHook, UseTreatyQueryOptions, UseTreatyQueryHook, UseTreatyMutationOptions, UseTreatyMutationHook, TreatyQueryOptions, TreatyMutationOptions, TreatyError, TreatyData };
|
|
60
|
+
type TreatyQueryHook<
|
|
61
|
+
TParams,
|
|
62
|
+
TOption extends object,
|
|
63
|
+
TResponse extends Record<number, unknown>
|
|
64
|
+
> = (request: TreatyQueryRequest<TParams, TOption>, options?: Omit<TreatyQueryOptions<TResponse>, "queryKey" | "queryFn">) => UseQueryResult<TreatyData<TResponse>, TreatyError<TResponse>>;
|
|
65
|
+
declare function treatyQueryHook<
|
|
66
|
+
TParams,
|
|
67
|
+
TOption extends object,
|
|
68
|
+
TResponse extends Record<number, unknown>
|
|
69
|
+
>(fn: TreatyQueryFunctionFactory<TParams, TOption, TResponse>, useOptions: (request: TreatyQueryRequest<TParams, TOption>) => Omit<TreatyQueryOptions<TResponse>, "queryFn">): TreatyQueryHook<TParams, TOption, TResponse>;
|
|
70
|
+
export { treatyQueryHook, treatyMutationHook };
|
package/dist/index.js
CHANGED
|
@@ -1,58 +1,82 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/treaty.ts
|
|
2
2
|
import {
|
|
3
|
-
mutationOptions,
|
|
4
|
-
queryOptions,
|
|
5
3
|
useMutation,
|
|
6
4
|
useQuery
|
|
7
5
|
} from "@tanstack/react-query";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
6
|
+
|
|
7
|
+
// src/utils.ts
|
|
8
|
+
function mergeMutationOptions(base, options) {
|
|
9
|
+
if (!options)
|
|
10
|
+
return base;
|
|
11
|
+
const { onSuccess, onError, onSettled, onMutate, ...rest } = options;
|
|
12
|
+
return {
|
|
13
|
+
...base,
|
|
14
|
+
...rest,
|
|
15
|
+
...onMutate !== undefined && {
|
|
16
|
+
onMutate: async (variables, context) => {
|
|
17
|
+
const prev = await base.onMutate?.(variables, context);
|
|
18
|
+
const next = await options.onMutate?.(variables, context);
|
|
19
|
+
return next !== undefined ? next : prev;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
...onSuccess !== undefined && {
|
|
23
|
+
onSuccess: async (data, variables, onMutateResult, context) => {
|
|
24
|
+
await base.onSuccess?.(data, variables, onMutateResult, context);
|
|
25
|
+
await options.onSuccess?.(data, variables, onMutateResult, context);
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
...onError !== undefined && {
|
|
29
|
+
onError: async (error, variables, onMutateResult, context) => {
|
|
30
|
+
await base.onError?.(error, variables, onMutateResult, context);
|
|
31
|
+
await options.onError?.(error, variables, onMutateResult, context);
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
...onSettled !== undefined && {
|
|
35
|
+
onSettled: async (data, error, variables, onMutateResult, context) => {
|
|
36
|
+
await base.onSettled?.(data, error, variables, onMutateResult, context);
|
|
37
|
+
await options.onSettled?.(data, error, variables, onMutateResult, context);
|
|
38
|
+
}
|
|
29
39
|
}
|
|
30
|
-
}
|
|
40
|
+
};
|
|
31
41
|
}
|
|
32
|
-
|
|
42
|
+
|
|
43
|
+
// src/treaty.ts
|
|
44
|
+
function treatyMutationHook(fn, useOptions) {
|
|
33
45
|
return (options) => {
|
|
34
|
-
const
|
|
46
|
+
const baseOptions = useOptions();
|
|
35
47
|
return useMutation({
|
|
36
|
-
...
|
|
37
|
-
|
|
48
|
+
...mergeMutationOptions(baseOptions, options),
|
|
49
|
+
mutationFn: async (request) => {
|
|
50
|
+
const mutationFn = "params" in request && request.params !== undefined ? fn(request.params) : fn();
|
|
51
|
+
const body = "body" in request && request.body !== undefined ? request.body : undefined;
|
|
52
|
+
const { data, error } = await mutationFn(body, request);
|
|
53
|
+
if (error)
|
|
54
|
+
throw error;
|
|
55
|
+
return data;
|
|
56
|
+
}
|
|
38
57
|
});
|
|
39
58
|
};
|
|
40
59
|
}
|
|
41
|
-
function
|
|
42
|
-
return (options) => {
|
|
43
|
-
const
|
|
60
|
+
function treatyQueryHook(fn, useOptions) {
|
|
61
|
+
return (request, options) => {
|
|
62
|
+
const queryFn = "params" in request && request.params !== undefined ? fn(request.params) : fn();
|
|
63
|
+
const baseOptions = useOptions(request);
|
|
44
64
|
return useQuery({
|
|
45
|
-
...
|
|
46
|
-
...
|
|
65
|
+
...options,
|
|
66
|
+
...baseOptions,
|
|
67
|
+
queryFn: async () => {
|
|
68
|
+
const { data, error } = await queryFn(request);
|
|
69
|
+
if (error)
|
|
70
|
+
throw error;
|
|
71
|
+
return data;
|
|
72
|
+
}
|
|
47
73
|
});
|
|
48
74
|
};
|
|
49
75
|
}
|
|
50
76
|
export {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
createTreatyQueryHook,
|
|
54
|
-
createTreatyMutationHook
|
|
77
|
+
treatyQueryHook,
|
|
78
|
+
treatyMutationHook
|
|
55
79
|
};
|
|
56
80
|
|
|
57
|
-
//# debugId=
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjXFxsaWIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHR5cGUgeyBUcmVhdHkgfSBmcm9tIFwiQGVseXNpYWpzL2VkZW5cIjtcclxuaW1wb3J0IHtcclxuICBtdXRhdGlvbk9wdGlvbnMsXHJcbiAgcXVlcnlPcHRpb25zLFxyXG4gIHVzZU11dGF0aW9uLFxyXG4gIHVzZVF1ZXJ5LFxyXG4gIHR5cGUgVXNlTXV0YXRpb25PcHRpb25zLFxyXG4gIHR5cGUgVXNlTXV0YXRpb25SZXN1bHQsXHJcbiAgdHlwZSBVc2VRdWVyeU9wdGlvbnMsXHJcbiAgdHlwZSBVc2VRdWVyeVJlc3VsdCxcclxufSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XHJcblxyXG50eXBlIFRyZWF0eVJlc3BvbnNlID0gUmVjb3JkPG51bWJlciwgdW5rbm93bj47XHJcblxyXG5leHBvcnQgdHlwZSBUcmVhdHlGdW5jdGlvbldpdGhvdXRQYXJhbXM8XHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UgPSBUcmVhdHlSZXNwb25zZSxcclxuPiA9ICgpID0+IFByb21pc2U8VHJlYXR5LlRyZWF0eVJlc3BvbnNlPFRSZXNwb25zZT4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5RnVuY3Rpb25XaXRoUGFyYW1zPFxyXG4gIFRQYXJhbXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSAocGFyYW1zOiBUUGFyYW1zKSA9PiBQcm9taXNlPFRyZWF0eS5UcmVhdHlSZXNwb25zZTxUUmVzcG9uc2U+PjtcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWF0eUZ1bmN0aW9uPFRQYXJhbXMsIFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlPiA9XHJcbiAgfCBUcmVhdHlGdW5jdGlvbldpdGhvdXRQYXJhbXM8VFJlc3BvbnNlPlxyXG4gIHwgVHJlYXR5RnVuY3Rpb25XaXRoUGFyYW1zPFRQYXJhbXMsIFRSZXNwb25zZT47XHJcblxyXG5leHBvcnQgdHlwZSBUcmVhdHlEYXRhPFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlPiA9XHJcbiAgVHJlYXR5LlRyZWF0eVJlc3BvbnNlPFRSZXNwb25zZT5bXCJkYXRhXCJdO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5RXJyb3I8VFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2U+ID1cclxuICBUcmVhdHkuVHJlYXR5UmVzcG9uc2U8VFJlc3BvbnNlPltcImVycm9yXCJdO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5TXV0YXRpb25PcHRpb25zPFxyXG4gIFRWYXJpYWJsZXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSBVc2VNdXRhdGlvbk9wdGlvbnM8XHJcbiAgVHJlYXR5RGF0YTxUUmVzcG9uc2U+LFxyXG4gIFRyZWF0eUVycm9yPFRSZXNwb25zZT4sXHJcbiAgVFZhcmlhYmxlc1xyXG4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVXNlVHJlYXR5TXV0YXRpb25SZXN1bHQ8XHJcbiAgVFZhcmlhYmxlcyxcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZSxcclxuPiA9IFVzZU11dGF0aW9uUmVzdWx0PFxyXG4gIFRyZWF0eURhdGE8VFJlc3BvbnNlPixcclxuICBUcmVhdHlFcnJvcjxUUmVzcG9uc2U+LFxyXG4gIFRWYXJpYWJsZXNcclxuPjtcclxuXHJcbmV4cG9ydCB0eXBlIFVzZVRyZWF0eVF1ZXJ5UmVzdWx0PFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlPiA9XHJcbiAgVXNlUXVlcnlSZXN1bHQ8VHJlYXR5RGF0YTxUUmVzcG9uc2U+LCBUcmVhdHlFcnJvcjxUUmVzcG9uc2U+PjtcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPj4gPVxyXG4gIFVzZVF1ZXJ5T3B0aW9uczxUcmVhdHlEYXRhPFRSZXNwb25zZT4sIFRyZWF0eUVycm9yPFRSZXNwb25zZT4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVXNlVHJlYXR5UXVlcnlPcHRpb25zPFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlPiA9IE9taXQ8XHJcbiAgVHJlYXR5UXVlcnlPcHRpb25zPFRSZXNwb25zZT4sXHJcbiAgXCJxdWVyeUZuXCJcclxuPjtcclxuXHJcbmV4cG9ydCB0eXBlIFVzZVRyZWF0eU11dGF0aW9uT3B0aW9uczxcclxuICBUVmFyaWFibGVzLFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlLFxyXG4+ID0gT21pdDxUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPiwgXCJtdXRhdGlvbkZuXCI+O1xyXG5cclxuZXhwb3J0IHR5cGUgVXNlVHJlYXR5TXV0YXRpb25Ib29rPFxyXG4gIFRWYXJpYWJsZXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSAoXHJcbiAgb3B0aW9uczogUGFydGlhbDxVc2VUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPj4sXHJcbikgPT4gVXNlVHJlYXR5TXV0YXRpb25SZXN1bHQ8VFZhcmlhYmxlcywgVFJlc3BvbnNlPjtcclxuXHJcbmV4cG9ydCB0eXBlIFVzZVRyZWF0eVF1ZXJ5SG9vazxUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZT4gPSAoXHJcbiAgb3B0aW9uczogUGFydGlhbDxVc2VUcmVhdHlRdWVyeU9wdGlvbnM8VFJlc3BvbnNlPj4sXHJcbikgPT4gVXNlVHJlYXR5UXVlcnlSZXN1bHQ8VFJlc3BvbnNlPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmVhdHlNdXRhdGlvbk9wdGlvbnM8VFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2U+KFxyXG4gIGZuOiBUcmVhdHlGdW5jdGlvbldpdGhvdXRQYXJhbXM8VFJlc3BvbnNlPixcclxuICBvcHRpb25zPzogVXNlVHJlYXR5TXV0YXRpb25PcHRpb25zPHZvaWQsIFRSZXNwb25zZT4sXHJcbik6IFRyZWF0eU11dGF0aW9uT3B0aW9uczx2b2lkLCBUUmVzcG9uc2U+O1xyXG5leHBvcnQgZnVuY3Rpb24gdHJlYXR5TXV0YXRpb25PcHRpb25zPFxyXG4gIFRWYXJpYWJsZXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4oXHJcbiAgZm46IFRyZWF0eUZ1bmN0aW9uV2l0aFBhcmFtczxUVmFyaWFibGVzLCBUUmVzcG9uc2U+LFxyXG4gIG9wdGlvbnM/OiBVc2VUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPixcclxuKTogVHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT47XHJcbmV4cG9ydCBmdW5jdGlvbiB0cmVhdHlNdXRhdGlvbk9wdGlvbnM8XHJcbiAgVFZhcmlhYmxlcyxcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZSxcclxuPihcclxuICBmbjogVHJlYXR5RnVuY3Rpb248VFZhcmlhYmxlcywgVFJlc3BvbnNlPixcclxuICBvcHRpb25zPzogVXNlVHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4sXHJcbik6IFRyZWF0eU11dGF0aW9uT3B0aW9uczxUVmFyaWFibGVzLCBUUmVzcG9uc2U+IHtcclxuICB0eXBlIFREYXRhID0gVHJlYXR5RGF0YTxUUmVzcG9uc2U+O1xyXG4gIHR5cGUgVEVycm9yID0gVHJlYXR5RXJyb3I8VFJlc3BvbnNlPjtcclxuICByZXR1cm4gbXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXM+KHtcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAodmFyaWFibGVzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKGZuLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gKGZuIGFzICgpID0+IFByb21pc2U8VHJlYXR5LlRyZWF0eVJlc3BvbnNlPFRSZXNwb25zZT4+KSgpXHJcbiAgICAgICAgOiAoZm4gYXMgVHJlYXR5RnVuY3Rpb25XaXRoUGFyYW1zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4pKHZhcmlhYmxlcykpO1xyXG4gICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSByZXNwb25zZTtcclxuICAgICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9LFxyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJlYXR5UXVlcnlPcHRpb25zPFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlID0gVHJlYXR5UmVzcG9uc2UsXHJcbj4oXHJcbiAgZm46IFRyZWF0eUZ1bmN0aW9uV2l0aG91dFBhcmFtczxUUmVzcG9uc2U+LFxyXG4gIG9wdGlvbnM6IFVzZVRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2U+LFxyXG4pOiBUcmVhdHlRdWVyeU9wdGlvbnM8VFJlc3BvbnNlPiB7XHJcbiAgdHlwZSBURGF0YSA9IFRyZWF0eURhdGE8VFJlc3BvbnNlPjtcclxuICB0eXBlIFRFcnJvciA9IFRyZWF0eUVycm9yPFRSZXNwb25zZT47XHJcbiAgcmV0dXJuIHF1ZXJ5T3B0aW9uczxURGF0YSwgVEVycm9yPih7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZuKCk7XHJcbiAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3BvbnNlO1xyXG4gICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0sXHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmVhdHlNdXRhdGlvbkhvb2s8VFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2U+KFxyXG4gIGZuOiBUcmVhdHlGdW5jdGlvbldpdGhvdXRQYXJhbXM8VFJlc3BvbnNlPixcclxuICB1c2VPcHRpb25zPzpcclxuICAgIHwgVXNlVHJlYXR5TXV0YXRpb25PcHRpb25zPHZvaWQsIFRSZXNwb25zZT5cclxuICAgIHwgKChvcHRpb25zOiBQYXJ0aWFsPFVzZVRyZWF0eU11dGF0aW9uT3B0aW9uczx2b2lkLCBUUmVzcG9uc2U+PikgPT4gVXNlVHJlYXR5TXV0YXRpb25PcHRpb25zPHZvaWQsIFRSZXNwb25zZT4pLFxyXG4pOiBVc2VUcmVhdHlNdXRhdGlvbkhvb2s8dm9pZCwgVFJlc3BvbnNlPjtcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyZWF0eU11dGF0aW9uSG9vazxcclxuICBUVmFyaWFibGVzLFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlLFxyXG4+KFxyXG4gIGZuOiBUcmVhdHlGdW5jdGlvbldpdGhQYXJhbXM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPixcclxuICB1c2VPcHRpb25zPzpcclxuICAgIHwgVXNlVHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT5cclxuICAgIHwgKChvcHRpb25zOiBQYXJ0aWFsPFVzZVRyZWF0eU11dGF0aW9uT3B0aW9uczxUVmFyaWFibGVzLCBUUmVzcG9uc2U+PikgPT4gVXNlVHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4pLFxyXG4pOiBVc2VUcmVhdHlNdXRhdGlvbkhvb2s8VFZhcmlhYmxlcywgVFJlc3BvbnNlPjtcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyZWF0eU11dGF0aW9uSG9vazxcclxuICBUVmFyaWFibGVzLFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlLFxyXG4+KFxyXG4gIGZuOiBUcmVhdHlGdW5jdGlvbjxUVmFyaWFibGVzLCBUUmVzcG9uc2U+LFxyXG4gIHVzZU9wdGlvbnM/OlxyXG4gICAgfCBVc2VUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPlxyXG4gICAgfCAoKG9wdGlvbnM6IFBhcnRpYWw8VXNlVHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4+KSA9PiBVc2VUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPiksXHJcbik6IFVzZVRyZWF0eU11dGF0aW9uSG9vazxUVmFyaWFibGVzLCBUUmVzcG9uc2U+IHtcclxuICByZXR1cm4gKG9wdGlvbnMpID0+IHtcclxuICAgIGNvbnN0IGluaXRPcHRpb25zID1cclxuICAgICAgdHlwZW9mIHVzZU9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiA/IHVzZU9wdGlvbnMob3B0aW9ucykgOiB1c2VPcHRpb25zO1xyXG4gICAgcmV0dXJuIHVzZU11dGF0aW9uKHtcclxuICAgICAgLi4udHJlYXR5TXV0YXRpb25PcHRpb25zKGZuLCBpbml0T3B0aW9ucyksXHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICB9KTtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJlYXR5UXVlcnlIb29rPFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlPihcclxuICBmbjogVHJlYXR5RnVuY3Rpb25XaXRob3V0UGFyYW1zPFRSZXNwb25zZT4sXHJcbiAgdXNlT3B0aW9uczpcclxuICAgIHwgVXNlVHJlYXR5UXVlcnlPcHRpb25zPFRSZXNwb25zZT5cclxuICAgIHwgKChvcHRpb25zOiBQYXJ0aWFsPFVzZVRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2U+PikgPT4gVXNlVHJlYXR5UXVlcnlPcHRpb25zPFRSZXNwb25zZT4pLFxyXG4pOiBVc2VUcmVhdHlRdWVyeUhvb2s8VFJlc3BvbnNlPiB7XHJcbiAgcmV0dXJuIChvcHRpb25zKSA9PiB7XHJcbiAgICBjb25zdCBpbml0T3B0aW9ucyA9XHJcbiAgICAgIHR5cGVvZiB1c2VPcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyB1c2VPcHRpb25zKG9wdGlvbnMpIDogdXNlT3B0aW9ucztcclxuICAgIHJldHVybiB1c2VRdWVyeSh7XHJcbiAgICAgIC4uLnRyZWF0eVF1ZXJ5T3B0aW9ucyhmbiwgaW5pdE9wdGlvbnMpLFxyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgfSk7XHJcbiAgfTtcclxufVxyXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0ZPLFNBQVMscUJBR2YsQ0FDQyxJQUNBLFNBQzhDO0FBQUEsRUFHOUMsT0FBTyxnQkFBMkM7QUFBQSxPQUM3QztBQUFBLElBQ0gsWUFBWSxPQUFPLGNBQWM7QUFBQSxNQUMvQixNQUFNLFdBQVcsT0FBTyxHQUFHLFdBQVcsSUFDakMsR0FBdUQsSUFDdkQsR0FBdUQsU0FBUztBQUFBLE1BQ3JFLFFBQVEsTUFBTSxVQUFVO0FBQUEsTUFDeEIsSUFBSTtBQUFBLFFBQU8sTUFBTTtBQUFBLE1BQ2pCLE9BQU87QUFBQTtBQUFBLEVBRVgsQ0FBQztBQUFBO0FBR0ksU0FBUyxrQkFFZixDQUNDLElBQ0EsU0FDK0I7QUFBQSxFQUcvQixPQUFPLGFBQTRCO0FBQUEsT0FDOUI7QUFBQSxJQUNILFNBQVMsWUFBWTtBQUFBLE1BQ25CLE1BQU0sV0FBVyxNQUFNLEdBQUc7QUFBQSxNQUMxQixRQUFRLE1BQU0sVUFBVTtBQUFBLE1BQ3hCLElBQUk7QUFBQSxRQUFPLE1BQU07QUFBQSxNQUNqQixPQUFPO0FBQUE7QUFBQSxFQUVYLENBQUM7QUFBQTtBQWtCSSxTQUFTLHdCQUdmLENBQ0MsSUFDQSxZQUc4QztBQUFBLEVBQzlDLE9BQU8sQ0FBQyxZQUFZO0FBQUEsSUFDbEIsTUFBTSxjQUNKLE9BQU8sZUFBZSxhQUFhLFdBQVcsT0FBTyxJQUFJO0FBQUEsSUFDM0QsT0FBTyxZQUFZO0FBQUEsU0FDZCxzQkFBc0IsSUFBSSxXQUFXO0FBQUEsU0FDckM7QUFBQSxJQUNMLENBQUM7QUFBQTtBQUFBO0FBSUUsU0FBUyxxQkFBdUQsQ0FDckUsSUFDQSxZQUcrQjtBQUFBLEVBQy9CLE9BQU8sQ0FBQyxZQUFZO0FBQUEsSUFDbEIsTUFBTSxjQUNKLE9BQU8sZUFBZSxhQUFhLFdBQVcsT0FBTyxJQUFJO0FBQUEsSUFDM0QsT0FBTyxTQUFTO0FBQUEsU0FDWCxtQkFBbUIsSUFBSSxXQUFXO0FBQUEsU0FDbEM7QUFBQSxJQUNMLENBQUM7QUFBQTtBQUFBOyIsCiAgImRlYnVnSWQiOiAiREIyMDY2OUFFRjJDOTU0RTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
81
|
+
//# debugId=F9298CEC88E7A7AB64756E2164756E21
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjXFx0cmVhdHkudHMiLCAic3JjXFx1dGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSB7IFRyZWF0eSB9IGZyb20gXCJAZWx5c2lhanMvZWRlblwiO1xyXG5pbXBvcnQge1xyXG4gIHVzZU11dGF0aW9uLFxyXG4gIHVzZVF1ZXJ5LFxyXG4gIHR5cGUgUXVlcnlLZXksXHJcbiAgdHlwZSBVc2VNdXRhdGlvbk9wdGlvbnMsXHJcbiAgdHlwZSBVc2VNdXRhdGlvblJlc3VsdCxcclxuICB0eXBlIFVzZVF1ZXJ5T3B0aW9ucyxcclxuICB0eXBlIFVzZVF1ZXJ5UmVzdWx0LFxyXG59IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcclxuaW1wb3J0IHsgbWVyZ2VNdXRhdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuLy8gSGVscGVyIHR5cGUgdG8gY2hlY2sgaWYgYSB0eXBlIHJlcHJlc2VudHMgXCJubyBwYXJhbXNcIiAoYWJzZW50L2VtcHR5KVxyXG4vLyBDaGVja3MgZm9yIG5ldmVyLCB1bmRlZmluZWQsIHZvaWQsIGFuZCBhbHNvIGhhbmRsZXMgdW5rbm93biB3aGVuIGl0IHJlcHJlc2VudHMgYW4gdW5jb25zdHJhaW5lZCB0eXBlXHJcbnR5cGUgSXNFbXB0eTxUPiA9IFxyXG4gIC8vIENoZWNrIGZvciBuZXZlciwgdW5kZWZpbmVkLCB2b2lkXHJcbiAgW1RdIGV4dGVuZHMgW25ldmVyIHwgdW5kZWZpbmVkIHwgdm9pZF0gXHJcbiAgICA/IHRydWVcclxuICAgIC8vIENoZWNrIGlmIFQgaXMgdW5rbm93biAodW5jb25zdHJhaW5lZCB0eXBlIHBhcmFtZXRlcilcclxuICAgIDogW3Vua25vd25dIGV4dGVuZHMgW1RdXHJcbiAgICAgID8gW1RdIGV4dGVuZHMgW3Vua25vd25dXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZVxyXG4gICAgICA6IGZhbHNlO1xyXG5cclxudHlwZSBUcmVhdHlNdXRhdGlvbkZ1bmN0aW9uRmFjdG9yeTxcclxuICBUUGFyYW1zLFxyXG4gIFRCb2R5LFxyXG4gIFRPcHRpb24sXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgUmVjb3JkPG51bWJlciwgdW5rbm93bj4sXHJcbj4gPSBJc0VtcHR5PFRQYXJhbXM+IGV4dGVuZHMgdHJ1ZVxyXG4gID8gKCkgPT4gVHJlYXR5TXV0YXRpb25GdW5jdGlvbjxUQm9keSwgVE9wdGlvbiwgVFJlc3BvbnNlPiBcclxuICA6IChwYXJhbXM6IFRQYXJhbXMpID0+IFRyZWF0eU11dGF0aW9uRnVuY3Rpb248VEJvZHksIFRPcHRpb24sIFRSZXNwb25zZT47XHJcblxyXG50eXBlIFRyZWF0eU11dGF0aW9uRnVuY3Rpb248XHJcbiAgVEJvZHksXHJcbiAgVE9wdGlvbixcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPixcclxuPiA9IChcclxuICBib2R5OiBUQm9keSxcclxuICBvcHRpb25zOiBUT3B0aW9uLFxyXG4pID0+IFByb21pc2U8VHJlYXR5LlRyZWF0eVJlc3BvbnNlPFRSZXNwb25zZT4+O1xyXG5cclxudHlwZSBUcmVhdHlNdXRhdGlvblJlcXVlc3Q8XHJcbiAgVFBhcmFtcyxcclxuICBUQm9keSxcclxuICBUT3B0aW9uLFxyXG4+ID0gVE9wdGlvbiAmXHJcbiAgKElzRW1wdHk8VFBhcmFtcz4gZXh0ZW5kcyB0cnVlID8ge30gOiB7IHBhcmFtczogVFBhcmFtcyB9KSAmXHJcbiAgKElzRW1wdHk8VEJvZHk+IGV4dGVuZHMgdHJ1ZSA/IHt9IDogeyBib2R5OiBUQm9keSB9KTtcclxuXHJcbnR5cGUgVHJlYXR5RGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPj4gPVxyXG4gIFRyZWF0eS5UcmVhdHlSZXNwb25zZTxUUmVzcG9uc2U+W1wiZGF0YVwiXTtcclxuXHJcbnR5cGUgVHJlYXR5RXJyb3I8VFJlc3BvbnNlIGV4dGVuZHMgUmVjb3JkPG51bWJlciwgdW5rbm93bj4+ID1cclxuICBUcmVhdHkuVHJlYXR5UmVzcG9uc2U8VFJlc3BvbnNlPltcImVycm9yXCJdO1xyXG5cclxudHlwZSBUcmVhdHlNdXRhdGlvbk9wdGlvbnM8XHJcbiAgVFBhcmFtcyxcclxuICBUQm9keSxcclxuICBUT3B0aW9uLFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFJlY29yZDxudW1iZXIsIHVua25vd24+LFxyXG4+ID0gVXNlTXV0YXRpb25PcHRpb25zPFxyXG4gIFRyZWF0eURhdGE8VFJlc3BvbnNlPixcclxuICBUcmVhdHlFcnJvcjxUUmVzcG9uc2U+LFxyXG4gIFRyZWF0eU11dGF0aW9uUmVxdWVzdDxUUGFyYW1zLCBUQm9keSwgVE9wdGlvbj5cclxuPjtcclxuXHJcbnR5cGUgVHJlYXR5TXV0YXRpb25Ib29rPFxyXG4gIFRQYXJhbXMsXHJcbiAgVEJvZHksXHJcbiAgVE9wdGlvbixcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPixcclxuPiA9IChcclxuICBvcHRpb25zPzogT21pdDxcclxuICAgIFRyZWF0eU11dGF0aW9uT3B0aW9uczxUUGFyYW1zLCBUQm9keSwgVE9wdGlvbiwgVFJlc3BvbnNlPixcclxuICAgIFwibXV0YXRpb25GblwiXHJcbiAgPixcclxuKSA9PiBVc2VNdXRhdGlvblJlc3VsdDxcclxuICBUcmVhdHlEYXRhPFRSZXNwb25zZT4sXHJcbiAgVHJlYXR5RXJyb3I8VFJlc3BvbnNlPixcclxuICBUcmVhdHlNdXRhdGlvblJlcXVlc3Q8VFBhcmFtcywgVEJvZHksIFRPcHRpb24+XHJcbj47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJlYXR5TXV0YXRpb25Ib29rPFxyXG4gIFRQYXJhbXMsXHJcbiAgVEJvZHksXHJcbiAgVE9wdGlvbixcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPixcclxuPihcclxuICBmbjogVHJlYXR5TXV0YXRpb25GdW5jdGlvbkZhY3Rvcnk8VFBhcmFtcywgVEJvZHksIFRPcHRpb24sIFRSZXNwb25zZT4sXHJcbiAgdXNlT3B0aW9uczogKCkgPT4gT21pdDxcclxuICAgIFRyZWF0eU11dGF0aW9uT3B0aW9uczxUUGFyYW1zLCBUQm9keSwgVE9wdGlvbiwgVFJlc3BvbnNlPixcclxuICAgIFwibXV0YXRpb25GblwiXHJcbiAgPixcclxuKTogVHJlYXR5TXV0YXRpb25Ib29rPFRQYXJhbXMsIFRCb2R5LCBUT3B0aW9uLCBUUmVzcG9uc2U+IHtcclxuICByZXR1cm4gKG9wdGlvbnMpID0+IHtcclxuICAgIGNvbnN0IGJhc2VPcHRpb25zID0gdXNlT3B0aW9ucygpO1xyXG4gICAgcmV0dXJuIHVzZU11dGF0aW9uKHtcclxuICAgICAgLi4ubWVyZ2VNdXRhdGlvbk9wdGlvbnMoYmFzZU9wdGlvbnMsIG9wdGlvbnMpLFxyXG4gICAgICBtdXRhdGlvbkZuOiBhc3luYyAocmVxdWVzdCkgPT4ge1xyXG4gICAgICAgIC8vIEhhbmRsZSBvcHRpb25hbCBwYXJhbXM6IGlmIHBhcmFtcyBleGlzdHMsIHBhc3MgaXQ7IG90aGVyd2lzZSBjYWxsIGZuKCkgd2l0aG91dCBhcmdzXHJcbiAgICAgICAgY29uc3QgbXV0YXRpb25GbiA9XHJcbiAgICAgICAgICBcInBhcmFtc1wiIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5wYXJhbXMgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IChmbiBhcyAocGFyYW1zOiBUUGFyYW1zKSA9PiBUcmVhdHlNdXRhdGlvbkZ1bmN0aW9uPFRCb2R5LCBUT3B0aW9uLCBUUmVzcG9uc2U+KShyZXF1ZXN0LnBhcmFtcylcclxuICAgICAgICAgICAgOiAoZm4gYXMgKCkgPT4gVHJlYXR5TXV0YXRpb25GdW5jdGlvbjxUQm9keSwgVE9wdGlvbiwgVFJlc3BvbnNlPikoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBIYW5kbGUgb3B0aW9uYWwgYm9keTogaWYgYm9keSBleGlzdHMsIHBhc3MgaXQ7IG90aGVyd2lzZSBwYXNzIHVuZGVmaW5lZFxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBcImJvZHlcIiBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuYm9keSAhPT0gdW5kZWZpbmVkID8gcmVxdWVzdC5ib2R5IDogKHVuZGVmaW5lZCBhcyBUQm9keSk7XHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgbXV0YXRpb25Gbihib2R5LCByZXF1ZXN0KTtcclxuICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfTtcclxufVxyXG5cclxudHlwZSBUcmVhdHlRdWVyeUZ1bmN0aW9uPFxyXG4gIFRPcHRpb24gZXh0ZW5kcyBvYmplY3QsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgUmVjb3JkPG51bWJlciwgdW5rbm93bj4sXHJcbj4gPSAob3B0aW9uczogVE9wdGlvbikgPT4gUHJvbWlzZTxUcmVhdHkuVHJlYXR5UmVzcG9uc2U8VFJlc3BvbnNlPj47XHJcblxyXG50eXBlIFRyZWF0eVF1ZXJ5RnVuY3Rpb25GYWN0b3J5PFxyXG4gIFRQYXJhbXMsXHJcbiAgVE9wdGlvbiBleHRlbmRzIG9iamVjdCxcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPixcclxuPiA9IElzRW1wdHk8VFBhcmFtcz4gZXh0ZW5kcyB0cnVlXHJcbiAgPyAoKSA9PiBUcmVhdHlRdWVyeUZ1bmN0aW9uPFRPcHRpb24sIFRSZXNwb25zZT5cclxuICA6IChwYXJhbXM6IFRQYXJhbXMpID0+IFRyZWF0eVF1ZXJ5RnVuY3Rpb248VE9wdGlvbiwgVFJlc3BvbnNlPjtcclxuXHJcbnR5cGUgVHJlYXR5UXVlcnlSZXF1ZXN0PFxyXG4gIFRQYXJhbXMsXHJcbiAgVE9wdGlvbiBleHRlbmRzIG9iamVjdCxcclxuPiA9IFRPcHRpb24gJlxyXG4gIChJc0VtcHR5PFRQYXJhbXM+IGV4dGVuZHMgdHJ1ZSA/IHt9IDogeyBwYXJhbXM6IFRQYXJhbXMgfSk7XHJcblxyXG50eXBlIFRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPj4gPVxyXG4gIFVzZVF1ZXJ5T3B0aW9uczxUcmVhdHlEYXRhPFRSZXNwb25zZT4sIFRyZWF0eUVycm9yPFRSZXNwb25zZT4+O1xyXG5cclxudHlwZSBUcmVhdHlRdWVyeUhvb2s8XHJcbiAgVFBhcmFtcyxcclxuICBUT3B0aW9uIGV4dGVuZHMgb2JqZWN0LFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFJlY29yZDxudW1iZXIsIHVua25vd24+LFxyXG4+ID0gKFxyXG4gIHJlcXVlc3Q6IFRyZWF0eVF1ZXJ5UmVxdWVzdDxUUGFyYW1zLCBUT3B0aW9uPixcclxuICBvcHRpb25zPzogT21pdDxUcmVhdHlRdWVyeU9wdGlvbnM8VFJlc3BvbnNlPiwgXCJxdWVyeUtleVwiIHwgXCJxdWVyeUZuXCI+LFxyXG4pID0+IFVzZVF1ZXJ5UmVzdWx0PFRyZWF0eURhdGE8VFJlc3BvbnNlPiwgVHJlYXR5RXJyb3I8VFJlc3BvbnNlPj47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJlYXR5UXVlcnlIb29rPFxyXG4gIFRQYXJhbXMsXHJcbiAgVE9wdGlvbiBleHRlbmRzIG9iamVjdCxcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPixcclxuPihcclxuICBmbjogVHJlYXR5UXVlcnlGdW5jdGlvbkZhY3Rvcnk8VFBhcmFtcywgVE9wdGlvbiwgVFJlc3BvbnNlPixcclxuICB1c2VPcHRpb25zOiAoXHJcbiAgICByZXF1ZXN0OiBUcmVhdHlRdWVyeVJlcXVlc3Q8VFBhcmFtcywgVE9wdGlvbj4sXHJcbiAgKSA9PiBPbWl0PFRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2U+LCBcInF1ZXJ5Rm5cIj4sXHJcbik6IFRyZWF0eVF1ZXJ5SG9vazxUUGFyYW1zLCBUT3B0aW9uLCBUUmVzcG9uc2U+IHtcclxuICByZXR1cm4gKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcclxuICAgIC8vIEhhbmRsZSBvcHRpb25hbCBwYXJhbXM6IGlmIHBhcmFtcyBleGlzdHMsIHBhc3MgaXQ7IG90aGVyd2lzZSBjYWxsIGZuKCkgd2l0aG91dCBhcmdzXHJcbiAgICBjb25zdCBxdWVyeUZuID1cclxuICAgICAgXCJwYXJhbXNcIiBpbiByZXF1ZXN0ICYmIHJlcXVlc3QucGFyYW1zICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IChmbiBhcyAocGFyYW1zOiBUUGFyYW1zKSA9PiBUcmVhdHlRdWVyeUZ1bmN0aW9uPFRPcHRpb24sIFRSZXNwb25zZT4pKHJlcXVlc3QucGFyYW1zKVxyXG4gICAgICAgIDogKGZuIGFzICgpID0+IFRyZWF0eVF1ZXJ5RnVuY3Rpb248VE9wdGlvbiwgVFJlc3BvbnNlPikoKTtcclxuICAgIGNvbnN0IGJhc2VPcHRpb25zID0gdXNlT3B0aW9ucyhyZXF1ZXN0KTtcclxuICAgIHJldHVybiB1c2VRdWVyeSh7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIC4uLmJhc2VPcHRpb25zLFxyXG4gICAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgcXVlcnlGbihyZXF1ZXN0KTtcclxuICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfTtcclxufVxyXG4iLAogICAgImltcG9ydCB0eXBlIHtcclxuICBRdWVyeUtleSxcclxuICBVc2VNdXRhdGlvbk9wdGlvbnMsXHJcbiAgVXNlUXVlcnlPcHRpb25zLFxyXG59IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU11dGF0aW9uT3B0aW9uczxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD4oXHJcbiAgYmFzZTogVXNlTXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PixcclxuICBvcHRpb25zPzogUGFydGlhbDxVc2VNdXRhdGlvbk9wdGlvbnM8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+PixcclxuKTogVXNlTXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiB7XHJcbiAgaWYgKCFvcHRpb25zKSByZXR1cm4gYmFzZTtcclxuICBjb25zdCB7IG9uU3VjY2Vzcywgb25FcnJvciwgb25TZXR0bGVkLCBvbk11dGF0ZSwgLi4ucmVzdCB9ID0gb3B0aW9ucztcclxuICByZXR1cm4ge1xyXG4gICAgLi4uYmFzZSxcclxuICAgIC4uLnJlc3QsXHJcbiAgICAuLi4ob25NdXRhdGUgIT09IHVuZGVmaW5lZCAmJiB7XHJcbiAgICAgIG9uTXV0YXRlOiBhc3luYyAodmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJldiA9IGF3YWl0IGJhc2Uub25NdXRhdGU/Lih2YXJpYWJsZXMsIGNvbnRleHQpO1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBhd2FpdCBvcHRpb25zLm9uTXV0YXRlPy4odmFyaWFibGVzLCBjb250ZXh0KTtcclxuICAgICAgICByZXR1cm4gKG5leHQgIT09IHVuZGVmaW5lZCA/IG5leHQgOiBwcmV2KSBhcyBUQ29udGV4dDtcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgLi4uKG9uU3VjY2VzcyAhPT0gdW5kZWZpbmVkICYmIHtcclxuICAgICAgb25TdWNjZXNzOiBhc3luYyAoZGF0YSwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IGJhc2Uub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCk7XHJcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIG9uTXV0YXRlUmVzdWx0LCBjb250ZXh0KTtcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgLi4uKG9uRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7XHJcbiAgICAgIG9uRXJyb3I6IGFzeW5jIChlcnJvciwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IGJhc2Uub25FcnJvcj8uKGVycm9yLCB2YXJpYWJsZXMsIG9uTXV0YXRlUmVzdWx0LCBjb250ZXh0KTtcclxuICAgICAgICBhd2FpdCBvcHRpb25zLm9uRXJyb3I/LihlcnJvciwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KSxcclxuICAgIC4uLihvblNldHRsZWQgIT09IHVuZGVmaW5lZCAmJiB7XHJcbiAgICAgIG9uU2V0dGxlZDogYXN5bmMgKGRhdGEsIGVycm9yLCB2YXJpYWJsZXMsIG9uTXV0YXRlUmVzdWx0LCBjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgYXdhaXQgYmFzZS5vblNldHRsZWQ/LihkYXRhLCBlcnJvciwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCk7XHJcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5vblNldHRsZWQ/LihcclxuICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgIHZhcmlhYmxlcyxcclxuICAgICAgICAgIG9uTXV0YXRlUmVzdWx0LFxyXG4gICAgICAgICAgY29udGV4dCxcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgfSksXHJcbiAgfTtcclxufVxyXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0E7QUFBQTtBQUFBO0FBQUE7OztBQ0tPLFNBQVMsb0JBQXlELENBQ3ZFLE1BQ0EsU0FDeUQ7QUFBQSxFQUN6RCxJQUFJLENBQUM7QUFBQSxJQUFTLE9BQU87QUFBQSxFQUNyQixRQUFRLFdBQVcsU0FBUyxXQUFXLGFBQWEsU0FBUztBQUFBLEVBQzdELE9BQU87QUFBQSxPQUNGO0FBQUEsT0FDQTtBQUFBLE9BQ0MsYUFBYSxhQUFhO0FBQUEsTUFDNUIsVUFBVSxPQUFPLFdBQVcsWUFBWTtBQUFBLFFBQ3RDLE1BQU0sT0FBTyxNQUFNLEtBQUssV0FBVyxXQUFXLE9BQU87QUFBQSxRQUNyRCxNQUFNLE9BQU8sTUFBTSxRQUFRLFdBQVcsV0FBVyxPQUFPO0FBQUEsUUFDeEQsT0FBUSxTQUFTLFlBQVksT0FBTztBQUFBO0FBQUEsSUFFeEM7QUFBQSxPQUNJLGNBQWMsYUFBYTtBQUFBLE1BQzdCLFdBQVcsT0FBTyxNQUFNLFdBQVcsZ0JBQWdCLFlBQVk7QUFBQSxRQUM3RCxNQUFNLEtBQUssWUFBWSxNQUFNLFdBQVcsZ0JBQWdCLE9BQU87QUFBQSxRQUMvRCxNQUFNLFFBQVEsWUFBWSxNQUFNLFdBQVcsZ0JBQWdCLE9BQU87QUFBQTtBQUFBLElBRXRFO0FBQUEsT0FDSSxZQUFZLGFBQWE7QUFBQSxNQUMzQixTQUFTLE9BQU8sT0FBTyxXQUFXLGdCQUFnQixZQUFZO0FBQUEsUUFDNUQsTUFBTSxLQUFLLFVBQVUsT0FBTyxXQUFXLGdCQUFnQixPQUFPO0FBQUEsUUFDOUQsTUFBTSxRQUFRLFVBQVUsT0FBTyxXQUFXLGdCQUFnQixPQUFPO0FBQUE7QUFBQSxJQUVyRTtBQUFBLE9BQ0ksY0FBYyxhQUFhO0FBQUEsTUFDN0IsV0FBVyxPQUFPLE1BQU0sT0FBTyxXQUFXLGdCQUFnQixZQUFZO0FBQUEsUUFDcEUsTUFBTSxLQUFLLFlBQVksTUFBTSxPQUFPLFdBQVcsZ0JBQWdCLE9BQU87QUFBQSxRQUN0RSxNQUFNLFFBQVEsWUFDWixNQUNBLE9BQ0EsV0FDQSxnQkFDQSxPQUNGO0FBQUE7QUFBQSxJQUVKO0FBQUEsRUFDRjtBQUFBOzs7QURzQ0ssU0FBUyxrQkFLZixDQUNDLElBQ0EsWUFJd0Q7QUFBQSxFQUN4RCxPQUFPLENBQUMsWUFBWTtBQUFBLElBQ2xCLE1BQU0sY0FBYyxXQUFXO0FBQUEsSUFDL0IsT0FBTyxZQUFZO0FBQUEsU0FDZCxxQkFBcUIsYUFBYSxPQUFPO0FBQUEsTUFDNUMsWUFBWSxPQUFPLFlBQVk7QUFBQSxRQUU3QixNQUFNLGFBQ0osWUFBWSxXQUFXLFFBQVEsV0FBVyxZQUNyQyxHQUE4RSxRQUFRLE1BQU0sSUFDNUYsR0FBK0Q7QUFBQSxRQUd0RSxNQUFNLE9BQU8sVUFBVSxXQUFXLFFBQVEsU0FBUyxZQUFZLFFBQVEsT0FBUTtBQUFBLFFBQy9FLFFBQVEsTUFBTSxVQUFVLE1BQU0sV0FBVyxNQUFNLE9BQU87QUFBQSxRQUN0RCxJQUFJO0FBQUEsVUFBTyxNQUFNO0FBQUEsUUFDakIsT0FBTztBQUFBO0FBQUEsSUFFWCxDQUFDO0FBQUE7QUFBQTtBQW1DRSxTQUFTLGVBSWYsQ0FDQyxJQUNBLFlBRzhDO0FBQUEsRUFDOUMsT0FBTyxDQUFDLFNBQVMsWUFBWTtBQUFBLElBRTNCLE1BQU0sVUFDSixZQUFZLFdBQVcsUUFBUSxXQUFXLFlBQ3JDLEdBQW9FLFFBQVEsTUFBTSxJQUNsRixHQUFxRDtBQUFBLElBQzVELE1BQU0sY0FBYyxXQUFXLE9BQU87QUFBQSxJQUN0QyxPQUFPLFNBQVM7QUFBQSxTQUNYO0FBQUEsU0FDQTtBQUFBLE1BQ0gsU0FBUyxZQUFZO0FBQUEsUUFDbkIsUUFBUSxNQUFNLFVBQVUsTUFBTSxRQUFRLE9BQU87QUFBQSxRQUM3QyxJQUFJO0FBQUEsVUFBTyxNQUFNO0FBQUEsUUFDakIsT0FBTztBQUFBO0FBQUEsSUFFWCxDQUFDO0FBQUE7QUFBQTsiLAogICJkZWJ1Z0lkIjogIkY5Mjk4Q0VDODhFN0E3QUI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eden2query",
|
|
3
3
|
"description": "Type-safe Eden Treaty to React Query helpers",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.7",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist"
|
|
@@ -41,10 +41,12 @@
|
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@elysiajs/eden": "^1.4.6",
|
|
43
43
|
"@tanstack/react-query": "^5.90.20",
|
|
44
|
+
"react": "^19.2.4",
|
|
44
45
|
"typescript": "^5"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"@types/bun": "latest",
|
|
49
|
+
"@types/react": "^19.2.14",
|
|
48
50
|
"bunup": "^0.16.22",
|
|
49
51
|
"elysia": "^1.4.22",
|
|
50
52
|
"prettier": "^3.4.2"
|