eden2query 0.3.1 → 0.3.3
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 +35 -0
- package/dist/index.d.ts +27 -11
- package/dist/index.js +24 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -67,6 +67,37 @@ const queryClient = new QueryClient();
|
|
|
67
67
|
queryClient.prefetchQuery(getOptions);
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
### Hook builders: `createQueryHook` / `createMutationHook`
|
|
71
|
+
|
|
72
|
+
Create reusable, pre-configured hooks for a Treaty endpoint. Useful when you call the same endpoint in many components.
|
|
73
|
+
|
|
74
|
+
**Query hook** — pass the Treaty GET thunk and required query options (e.g. `queryKey`):
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
const useResource = createQueryHook(
|
|
78
|
+
() => client.api.resource.get({ query: { q: "hello" } }),
|
|
79
|
+
{ queryKey: ["resource"] },
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
// In a component
|
|
83
|
+
const { data } = useResource(); // or useResource({ refetchInterval: 1000 })
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Mutation hook** — pass the Treaty mutation and optional base options:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
const usePostResource = createMutationHook(
|
|
90
|
+
(vars: { body: { name: string } }) => client.api.resource.post(vars.body),
|
|
91
|
+
{ onSuccess: () => console.log("Success") },
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
// In a component
|
|
95
|
+
const postMutation = usePostResource();
|
|
96
|
+
postMutation.mutate({ body: { name: "World" } });
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Hooks accept the same options as `useQuery` / `useMutation`; call-time options are merged with the ones passed to `createQueryHook` / `createMutationHook`.
|
|
100
|
+
|
|
70
101
|
## API
|
|
71
102
|
|
|
72
103
|
**`treatyQueryOptions(fn, queryOptions)`** — wraps a Treaty GET call into `queryOptions`. `fn` is a **thunk** (zero-argument function) that calls the Treaty GET, e.g. `() => client.api.resource.get({ query: { ... } })`. The second argument accepts all `queryOptions` fields except `queryFn`. Extracts `data` from the response and throws on `error`.
|
|
@@ -78,6 +109,10 @@ queryClient.prefetchQuery(getOptions);
|
|
|
78
109
|
|
|
79
110
|
The optional second argument accepts all `mutationOptions` fields except `mutationFn` (e.g. `onSuccess`, `onSettled`, `onMutate`).
|
|
80
111
|
|
|
112
|
+
**`createQueryHook(fn, queryOptions)`** — returns a hook that wraps `useQuery` with the given Treaty GET thunk and base query options. The returned hook accepts the same options as `useQuery`; call-time options are merged with the base options. Use when you want a reusable hook for a specific endpoint.
|
|
113
|
+
|
|
114
|
+
**`createMutationHook(fn, mutationOptions?)`** — returns a hook that wraps `useMutation` with the given Treaty mutation and optional base mutation options. Same fn shapes as `treatyMutationOptions` (no-arg or with variables). The returned hook accepts the same options as `useMutation`. Use when you want a reusable hook for a specific mutation.
|
|
115
|
+
|
|
81
116
|
**`InferTreatyQueryOptions<T>`** — full `UseQueryOptions` type for a given Treaty query.
|
|
82
117
|
|
|
83
118
|
**`InferTreatyMutationOptions<TVariables, TResponse>`** — full `UseMutationOptions` type for a given Treaty mutation.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
import { Treaty } from "@elysiajs/eden";
|
|
2
|
-
import { UseMutationOptions, UseQueryOptions } from "@tanstack/react-query";
|
|
2
|
+
import { UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from "@tanstack/react-query";
|
|
3
3
|
type TreatyResponse = Record<number, unknown>;
|
|
4
4
|
type TreatyFunctionWithoutParams<TResponse extends TreatyResponse = TreatyResponse> = () => Promise<Treaty.TreatyResponse<TResponse>>;
|
|
5
5
|
type TreatyFunctionWithParams<
|
|
6
6
|
TParams,
|
|
7
7
|
TResponse extends TreatyResponse
|
|
8
8
|
> = (params: TParams) => Promise<Treaty.TreatyResponse<TResponse>>;
|
|
9
|
-
type
|
|
10
|
-
type
|
|
11
|
-
type
|
|
12
|
-
|
|
9
|
+
type TreatyData<TResponse extends TreatyResponse> = Treaty.TreatyResponse<TResponse>["data"];
|
|
10
|
+
type TreatyError<TResponse extends TreatyResponse> = Treaty.TreatyResponse<TResponse>["error"];
|
|
11
|
+
type TreatyMutationOptions<
|
|
12
|
+
TVariables,
|
|
13
|
+
TResponse extends TreatyResponse
|
|
14
|
+
> = UseMutationOptions<TreatyData<TResponse>, TreatyError<TResponse>, TVariables>;
|
|
15
|
+
type UseTreatyMutationResult<
|
|
16
|
+
TVariables,
|
|
13
17
|
TResponse extends TreatyResponse
|
|
14
|
-
> =
|
|
15
|
-
type
|
|
16
|
-
|
|
18
|
+
> = (UseMutationResult<TreatyData<TResponse>, TreatyError<TResponse>, TVariables>);
|
|
19
|
+
type UseTreatyQueryResult<TResponse extends TreatyResponse> = (UseQueryResult<TreatyData<TResponse>, TreatyError<TResponse>>);
|
|
20
|
+
type TreatyQueryOptions<TResponse extends Record<number, unknown>> = UseQueryOptions<TreatyData<TResponse>, TreatyError<TResponse>>;
|
|
21
|
+
type UseTreatyMutationHook<
|
|
22
|
+
TVariables,
|
|
23
|
+
TResponse extends TreatyResponse
|
|
24
|
+
> = ((options: Partial<Omit<TreatyMutationOptions<TVariables, TResponse>, "mutationFn">>) => UseTreatyMutationResult<TVariables, TResponse>);
|
|
25
|
+
type UseTreatyQueryHook<TResponse extends TreatyResponse> = ((options: Partial<Omit<TreatyQueryOptions<TResponse>, "queryFn">>) => UseTreatyQueryResult<TResponse>);
|
|
26
|
+
declare function treatyMutationOptions<TResponse extends TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, options?: Omit<TreatyMutationOptions<void, TResponse>, "mutationFn">): TreatyMutationOptions<void, TResponse>;
|
|
17
27
|
declare function treatyMutationOptions<
|
|
18
28
|
TVariables,
|
|
19
29
|
TResponse extends TreatyResponse
|
|
20
|
-
>(fn: TreatyFunctionWithParams<TVariables, TResponse>, options?: Omit<
|
|
21
|
-
declare function treatyQueryOptions<TResponse extends TreatyResponse = TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, options: Omit<
|
|
22
|
-
|
|
30
|
+
>(fn: TreatyFunctionWithParams<TVariables, TResponse>, options?: Omit<TreatyMutationOptions<TVariables, TResponse>, "mutationFn">): TreatyMutationOptions<TVariables, TResponse>;
|
|
31
|
+
declare function treatyQueryOptions<TResponse extends TreatyResponse = TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, options: Omit<TreatyQueryOptions<TResponse>, "queryFn">): TreatyQueryOptions<TResponse>;
|
|
32
|
+
declare function createMutationHook<TResponse extends TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, options?: Omit<TreatyMutationOptions<void, TResponse>, "mutationFn">): UseTreatyMutationHook<void, TResponse>;
|
|
33
|
+
declare function createMutationHook<
|
|
34
|
+
TVariables,
|
|
35
|
+
TResponse extends TreatyResponse
|
|
36
|
+
>(fn: TreatyFunctionWithParams<TVariables, TResponse>, options?: Omit<TreatyMutationOptions<TVariables, TResponse>, "mutationFn">): UseTreatyMutationHook<TVariables, TResponse>;
|
|
37
|
+
declare function createQueryHook<TResponse extends TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, createOptions: Omit<TreatyQueryOptions<TResponse>, "queryFn">): UseTreatyQueryHook<TResponse>;
|
|
38
|
+
export { treatyQueryOptions, treatyMutationOptions, createQueryHook, createMutationHook, UseTreatyQueryHook, UseTreatyMutationHook, TreatyQueryOptions, TreatyMutationOptions, TreatyError, TreatyData };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// src/lib.ts
|
|
2
2
|
import {
|
|
3
3
|
mutationOptions,
|
|
4
|
-
queryOptions
|
|
4
|
+
queryOptions,
|
|
5
|
+
useMutation,
|
|
6
|
+
useQuery
|
|
5
7
|
} from "@tanstack/react-query";
|
|
6
8
|
function treatyMutationOptions(fn, options) {
|
|
7
9
|
return mutationOptions({
|
|
@@ -27,10 +29,28 @@ function treatyQueryOptions(fn, options) {
|
|
|
27
29
|
}
|
|
28
30
|
});
|
|
29
31
|
}
|
|
32
|
+
function createMutationHook(fn, createOptions) {
|
|
33
|
+
return (options) => {
|
|
34
|
+
return useMutation({
|
|
35
|
+
...treatyMutationOptions(fn, createOptions),
|
|
36
|
+
...options
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function createQueryHook(fn, createOptions) {
|
|
41
|
+
return (options) => {
|
|
42
|
+
return useQuery({
|
|
43
|
+
...treatyQueryOptions(fn, createOptions),
|
|
44
|
+
...options
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
}
|
|
30
48
|
export {
|
|
31
49
|
treatyQueryOptions,
|
|
32
|
-
treatyMutationOptions
|
|
50
|
+
treatyMutationOptions,
|
|
51
|
+
createQueryHook,
|
|
52
|
+
createMutationHook
|
|
33
53
|
};
|
|
34
54
|
|
|
35
|
-
//# debugId=
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# debugId=C7B700FB8AB692F864756E2164756E21
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjXFxsaWIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHR5cGUgeyBUcmVhdHkgfSBmcm9tIFwiQGVseXNpYWpzL2VkZW5cIjtcclxuaW1wb3J0IHtcclxuICBtdXRhdGlvbk9wdGlvbnMsXHJcbiAgcXVlcnlPcHRpb25zLFxyXG4gIHVzZU11dGF0aW9uLFxyXG4gIHVzZVF1ZXJ5LFxyXG4gIHR5cGUgVXNlTXV0YXRpb25PcHRpb25zLFxyXG4gIHR5cGUgVXNlTXV0YXRpb25SZXN1bHQsXHJcbiAgdHlwZSBVc2VRdWVyeU9wdGlvbnMsXHJcbiAgdHlwZSBVc2VRdWVyeVJlc3VsdCxcclxufSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XHJcblxyXG50eXBlIFRyZWF0eVJlc3BvbnNlID0gUmVjb3JkPG51bWJlciwgdW5rbm93bj47XHJcblxyXG5leHBvcnQgdHlwZSBUcmVhdHlGdW5jdGlvbldpdGhvdXRQYXJhbXM8XHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UgPSBUcmVhdHlSZXNwb25zZSxcclxuPiA9ICgpID0+IFByb21pc2U8VHJlYXR5LlRyZWF0eVJlc3BvbnNlPFRSZXNwb25zZT4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5RnVuY3Rpb25XaXRoUGFyYW1zPFxyXG4gIFRQYXJhbXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSAocGFyYW1zOiBUUGFyYW1zKSA9PiBQcm9taXNlPFRyZWF0eS5UcmVhdHlSZXNwb25zZTxUUmVzcG9uc2U+PjtcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWF0eUZ1bmN0aW9uPFxyXG4gIFRQYXJhbXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSBUcmVhdHlGdW5jdGlvbldpdGhvdXRQYXJhbXM8VFJlc3BvbnNlPiB8IFRyZWF0eUZ1bmN0aW9uV2l0aFBhcmFtczxUUGFyYW1zLCBUUmVzcG9uc2U+O1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5RGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZT4gPVxyXG4gIFRyZWF0eS5UcmVhdHlSZXNwb25zZTxUUmVzcG9uc2U+W1wiZGF0YVwiXTtcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWF0eUVycm9yPFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlPiA9XHJcbiAgVHJlYXR5LlRyZWF0eVJlc3BvbnNlPFRSZXNwb25zZT5bXCJlcnJvclwiXTtcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWF0eU11dGF0aW9uT3B0aW9uczxcclxuICBUVmFyaWFibGVzLFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlLFxyXG4+ID0gVXNlTXV0YXRpb25PcHRpb25zPFxyXG4gIFRyZWF0eURhdGE8VFJlc3BvbnNlPixcclxuICBUcmVhdHlFcnJvcjxUUmVzcG9uc2U+LFxyXG4gIFRWYXJpYWJsZXNcclxuPjtcclxuXHJcbmV4cG9ydCB0eXBlIFVzZVRyZWF0eU11dGF0aW9uUmVzdWx0PFxyXG4gIFRWYXJpYWJsZXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSAoXHJcbiAgVXNlTXV0YXRpb25SZXN1bHQ8XHJcbiAgICBUcmVhdHlEYXRhPFRSZXNwb25zZT4sXHJcbiAgICBUcmVhdHlFcnJvcjxUUmVzcG9uc2U+LFxyXG4gICAgVFZhcmlhYmxlc1xyXG4gID5cclxuKTtcclxuXHJcbmV4cG9ydCB0eXBlIFVzZVRyZWF0eVF1ZXJ5UmVzdWx0PFxyXG4gIFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlLFxyXG4+ID0gKFxyXG4gIFVzZVF1ZXJ5UmVzdWx0PFxyXG4gICAgVHJlYXR5RGF0YTxUUmVzcG9uc2U+LFxyXG4gICAgVHJlYXR5RXJyb3I8VFJlc3BvbnNlPlxyXG4gID5cclxuKTtcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8bnVtYmVyLCB1bmtub3duPj4gPVxyXG4gIFVzZVF1ZXJ5T3B0aW9uczxUcmVhdHlEYXRhPFRSZXNwb25zZT4sIFRyZWF0eUVycm9yPFRSZXNwb25zZT4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVXNlVHJlYXR5TXV0YXRpb25Ib29rPFxyXG4gIFRWYXJpYWJsZXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSAoXHJcbiAgKG9wdGlvbnM6IFBhcnRpYWw8T21pdDxUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPiwgXCJtdXRhdGlvbkZuXCI+PikgPT4gXHJcbiAgICBVc2VUcmVhdHlNdXRhdGlvblJlc3VsdDxUVmFyaWFibGVzLCBUUmVzcG9uc2U+XHJcbik7XHJcblxyXG5leHBvcnQgdHlwZSBVc2VUcmVhdHlRdWVyeUhvb2s8XHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4gPSAoXHJcbiAgKG9wdGlvbnM6IFBhcnRpYWw8T21pdDxUcmVhdHlRdWVyeU9wdGlvbnM8VFJlc3BvbnNlPiwgXCJxdWVyeUZuXCI+PikgPT4gXHJcbiAgICBVc2VUcmVhdHlRdWVyeVJlc3VsdDxUUmVzcG9uc2U+XHJcbik7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJlYXR5TXV0YXRpb25PcHRpb25zPFRSZXNwb25zZSBleHRlbmRzIFRyZWF0eVJlc3BvbnNlPihcclxuICBmbjogVHJlYXR5RnVuY3Rpb25XaXRob3V0UGFyYW1zPFRSZXNwb25zZT4sXHJcbiAgb3B0aW9ucz86IE9taXQ8VHJlYXR5TXV0YXRpb25PcHRpb25zPHZvaWQsIFRSZXNwb25zZT4sIFwibXV0YXRpb25GblwiPixcclxuKTogVHJlYXR5TXV0YXRpb25PcHRpb25zPHZvaWQsIFRSZXNwb25zZT47XHJcbmV4cG9ydCBmdW5jdGlvbiB0cmVhdHlNdXRhdGlvbk9wdGlvbnM8XHJcbiAgVFZhcmlhYmxlcyxcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZSxcclxuPihcclxuICBmbjogVHJlYXR5RnVuY3Rpb25XaXRoUGFyYW1zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4sXHJcbiAgb3B0aW9ucz86IE9taXQ8VHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4sIFwibXV0YXRpb25GblwiPixcclxuKTogVHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT47XHJcbmV4cG9ydCBmdW5jdGlvbiB0cmVhdHlNdXRhdGlvbk9wdGlvbnM8XHJcbiAgVFZhcmlhYmxlcyxcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZSxcclxuPihcclxuICBmbjogVHJlYXR5RnVuY3Rpb248VFZhcmlhYmxlcywgVFJlc3BvbnNlPixcclxuICBvcHRpb25zPzogT21pdDxUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPiwgXCJtdXRhdGlvbkZuXCI+LFxyXG4pOiBUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VFZhcmlhYmxlcywgVFJlc3BvbnNlPiB7XHJcbiAgdHlwZSBURGF0YSA9IFRyZWF0eURhdGE8VFJlc3BvbnNlPjtcclxuICB0eXBlIFRFcnJvciA9IFRyZWF0eUVycm9yPFRSZXNwb25zZT47XHJcbiAgcmV0dXJuIG11dGF0aW9uT3B0aW9uczxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzPih7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHZhcmlhYmxlcykgPT4ge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IChcclxuICAgICAgICBmbi5sZW5ndGggPT09IDAgPyAoZm4gYXMgKCkgPT4gUHJvbWlzZTxUcmVhdHkuVHJlYXR5UmVzcG9uc2U8VFJlc3BvbnNlPj4pKCkgOiAoZm4gYXMgVHJlYXR5RnVuY3Rpb25XaXRoUGFyYW1zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4pKHZhcmlhYmxlcylcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzcG9uc2U7XHJcbiAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfSxcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRyZWF0eVF1ZXJ5T3B0aW9uczxcclxuICBUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZSA9IFRyZWF0eVJlc3BvbnNlLFxyXG4+KFxyXG4gIGZuOiBUcmVhdHlGdW5jdGlvbldpdGhvdXRQYXJhbXM8VFJlc3BvbnNlPixcclxuICBvcHRpb25zOiBPbWl0PFRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2U+LCBcInF1ZXJ5Rm5cIj4sXHJcbik6IFRyZWF0eVF1ZXJ5T3B0aW9uczxUUmVzcG9uc2U+IHtcclxuICB0eXBlIFREYXRhID0gVHJlYXR5RGF0YTxUUmVzcG9uc2U+O1xyXG4gIHR5cGUgVEVycm9yID0gVHJlYXR5RXJyb3I8VFJlc3BvbnNlPjtcclxuICByZXR1cm4gcXVlcnlPcHRpb25zPFREYXRhLCBURXJyb3I+KHtcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZm4oKTtcclxuICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzcG9uc2U7XHJcbiAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfSxcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11dGF0aW9uSG9vazxUUmVzcG9uc2UgZXh0ZW5kcyBUcmVhdHlSZXNwb25zZT4oXHJcbiAgZm46IFRyZWF0eUZ1bmN0aW9uV2l0aG91dFBhcmFtczxUUmVzcG9uc2U+LFxyXG4gIG9wdGlvbnM/OiBPbWl0PFRyZWF0eU11dGF0aW9uT3B0aW9uczx2b2lkLCBUUmVzcG9uc2U+LCBcIm11dGF0aW9uRm5cIj4sXHJcbik6IFVzZVRyZWF0eU11dGF0aW9uSG9vazx2b2lkLCBUUmVzcG9uc2U+O1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YXRpb25Ib29rPFxyXG4gIFRWYXJpYWJsZXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4oXHJcbiAgZm46IFRyZWF0eUZ1bmN0aW9uV2l0aFBhcmFtczxUVmFyaWFibGVzLCBUUmVzcG9uc2U+LFxyXG4gIG9wdGlvbnM/OiBPbWl0PFRyZWF0eU11dGF0aW9uT3B0aW9uczxUVmFyaWFibGVzLCBUUmVzcG9uc2U+LCBcIm11dGF0aW9uRm5cIj4sXHJcbik6IFVzZVRyZWF0eU11dGF0aW9uSG9vazxUVmFyaWFibGVzLCBUUmVzcG9uc2U+O1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YXRpb25Ib29rPFxyXG4gIFRWYXJpYWJsZXMsXHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4oXHJcbiAgZm46IFRyZWF0eUZ1bmN0aW9uPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4sXHJcbiAgY3JlYXRlT3B0aW9ucz86IE9taXQ8VHJlYXR5TXV0YXRpb25PcHRpb25zPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4sIFwibXV0YXRpb25GblwiPixcclxuKTogVXNlVHJlYXR5TXV0YXRpb25Ib29rPFRWYXJpYWJsZXMsIFRSZXNwb25zZT4ge1xyXG4gIHJldHVybiAob3B0aW9ucykgPT4ge1xyXG4gICAgcmV0dXJuIHVzZU11dGF0aW9uKHtcclxuICAgICAgLi4udHJlYXR5TXV0YXRpb25PcHRpb25zKGZuLCBjcmVhdGVPcHRpb25zKSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH0pO1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdWVyeUhvb2s8XHJcbiAgVFJlc3BvbnNlIGV4dGVuZHMgVHJlYXR5UmVzcG9uc2UsXHJcbj4oXHJcbiAgZm46IFRyZWF0eUZ1bmN0aW9uV2l0aG91dFBhcmFtczxUUmVzcG9uc2U+LFxyXG4gIGNyZWF0ZU9wdGlvbnM6IE9taXQ8VHJlYXR5UXVlcnlPcHRpb25zPFRSZXNwb25zZT4sIFwicXVlcnlGblwiPixcclxuKTogVXNlVHJlYXR5UXVlcnlIb29rPFRSZXNwb25zZT4ge1xyXG4gIHJldHVybiAob3B0aW9ucykgPT4ge1xyXG4gICAgcmV0dXJuIHVzZVF1ZXJ5KHtcclxuICAgICAgLi4udHJlYXR5UXVlcnlPcHRpb25zKGZuLCBjcmVhdGVPcHRpb25zKSxcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgIH0pO1xyXG4gIH07XHJcbn0iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkZPLFNBQVMscUJBR2YsQ0FDQyxJQUNBLFNBQzhDO0FBQUEsRUFHOUMsT0FBTyxnQkFBMkM7QUFBQSxPQUM3QztBQUFBLElBQ0gsWUFBWSxPQUFPLGNBQWM7QUFBQSxNQUMvQixNQUFNLFdBQVcsT0FDZixHQUFHLFdBQVcsSUFBSyxHQUF1RCxJQUFLLEdBQXVELFNBQVM7QUFBQSxNQUVqSixRQUFRLE1BQU0sVUFBVTtBQUFBLE1BQ3hCLElBQUk7QUFBQSxRQUFPLE1BQU07QUFBQSxNQUNqQixPQUFPO0FBQUE7QUFBQSxFQUVYLENBQUM7QUFBQTtBQUdJLFNBQVMsa0JBRWYsQ0FDQyxJQUNBLFNBQytCO0FBQUEsRUFHL0IsT0FBTyxhQUE0QjtBQUFBLE9BQzlCO0FBQUEsSUFDSCxTQUFTLFlBQVk7QUFBQSxNQUNuQixNQUFNLFdBQVcsTUFBTSxHQUFHO0FBQUEsTUFDMUIsUUFBUSxNQUFNLFVBQVU7QUFBQSxNQUN4QixJQUFJO0FBQUEsUUFBTyxNQUFNO0FBQUEsTUFDakIsT0FBTztBQUFBO0FBQUEsRUFFWCxDQUFDO0FBQUE7QUFjSSxTQUFTLGtCQUdmLENBQ0MsSUFDQSxlQUM4QztBQUFBLEVBQzlDLE9BQU8sQ0FBQyxZQUFZO0FBQUEsSUFDbEIsT0FBTyxZQUFZO0FBQUEsU0FDZCxzQkFBc0IsSUFBSSxhQUFhO0FBQUEsU0FDdkM7QUFBQSxJQUNMLENBQUM7QUFBQTtBQUFBO0FBSUUsU0FBUyxlQUVmLENBQ0MsSUFDQSxlQUMrQjtBQUFBLEVBQy9CLE9BQU8sQ0FBQyxZQUFZO0FBQUEsSUFDbEIsT0FBTyxTQUFTO0FBQUEsU0FDWCxtQkFBbUIsSUFBSSxhQUFhO0FBQUEsU0FDcEM7QUFBQSxJQUNMLENBQUM7QUFBQTtBQUFBOyIsCiAgImRlYnVnSWQiOiAiQzdCNzAwRkI4QUI2OTJGODY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|