eden2query 0.3.5 → 0.3.6

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 CHANGED
@@ -67,56 +67,58 @@ const queryClient = new QueryClient();
67
67
  queryClient.prefetchQuery(getOptions);
68
68
  ```
69
69
 
70
- ### Hook builders: `createTreatyQueryHook` / `createTreatyMutationHook`
70
+ ### Hook builders: `treatyQueryHook` / `treatyMutationHook`
71
71
 
72
- Create reusable, pre-configured hooks for a Treaty endpoint. The second parameter is **`useOptions`**: either a static options object or a **function** that receives the hook’s call-time options and returns options (so you can use React hooks like `useQueryClient()` and forward or merge callbacks).
72
+ Create reusable, pre-configured hooks for a Treaty endpoint. The first parameter is the **Treaty function**, and the second optional parameter is **`useOptions`** a hook that returns default options (so you can use React hooks like `useQueryClient()`).
73
73
 
74
- **Query hook** — pass the Treaty GET thunk and `useOptions` (object or function):
74
+ **Mutation hook** — pass the mutation function and optional `useOptions`:
75
75
 
76
76
  ```ts
77
- const useResource = createTreatyQueryHook(
78
- () => client.api.resource.get({ query: { q: "hello" } }),
79
- { queryKey: ["resource"] },
80
- );
77
+ function myMutationFn(variables: { name: string; q: string }) {
78
+ return client.api.resource.post(
79
+ { name: variables.name },
80
+ { query: { q: variables.q } }
81
+ );
82
+ }
83
+
84
+ const useMutationHook = treatyMutationHook(myMutationFn, () => {
85
+ const queryClient = useQueryClient();
86
+ return {
87
+ onSuccess: () => {
88
+ queryClient.invalidateQueries({ queryKey: ["resource"] });
89
+ },
90
+ };
91
+ });
81
92
 
82
93
  // In a component
83
- const { data } = useResource(); // or useResource({ refetchInterval: 1000 })
94
+ const mutationResult = useMutationHook({
95
+ onSuccess: (data, variables) => {
96
+ console.log(data, variables);
97
+ },
98
+ });
99
+ mutationResult.mutate({
100
+ name: "World",
101
+ q: "hello",
102
+ });
84
103
  ```
85
104
 
86
- **Mutation hook** — pass the Treaty mutation and optional `useOptions`. Use a function when you need React hooks (e.g. for invalidation) or need to forward call-site callbacks:
105
+ **Query hook** — pass the query function and optional `useOptions` that receives the `request` and returns options including `queryKey`:
87
106
 
88
107
  ```ts
89
- // Static useOptions
90
- const usePostResource = createTreatyMutationHook(
91
- (vars: { body: { name: string } }) => client.api.resource.post(vars.body),
92
- { onSuccess: () => console.log("Success") },
93
- );
108
+ function myQueryFn(request: { q: string }) {
109
+ return client.api.resource.get({ query: { q: request.q } });
110
+ }
94
111
 
95
- // useOptions as function — receives hook options, can use React hooks and forward callbacks
96
- const usePostResourceWithInvalidation = createTreatyMutationHook(
97
- (vars: { body: { name: string } }) => client.api.resource.post(vars.body),
98
- (options) => {
99
- const queryClient = useQueryClient();
100
- return {
101
- onSettled(...args) {
102
- queryClient.invalidateQueries({ queryKey: ["resource"] });
103
- options.onSettled?.(...args);
104
- },
105
- };
106
- },
107
- );
112
+ const useQueryHook = treatyQueryHook(myQueryFn, (request) => ({
113
+ queryKey: ["resource", request] as const,
114
+ enabled: true,
115
+ }));
108
116
 
109
117
  // 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" } });
118
+ const queryResult = useQueryHook({ q: "hello" });
117
119
  ```
118
120
 
119
- Hooks accept the same options as `useQuery` / `useMutation`; call-time options are merged with the base options from `useOptions`. When `useOptions` is a function, it receives those call-time options so you can forward callbacks (e.g. `options.onSettled?.(...args)`).
121
+ Hooks accept the same options as `useQuery` / `useMutation`; call-time options are merged with the base options from `useOptions`. Callbacks are chained: base options run first, then `useOptions` callbacks, then call-site callbacks.
120
122
 
121
123
  ## API
122
124
 
@@ -125,13 +127,13 @@ Hooks accept the same options as `useQuery` / `useMutation`; call-time options a
125
127
  **`treatyMutationOptions(fn, mutationOptions?)`** — wraps a Treaty mutation into `mutationOptions`. Two shapes:
126
128
 
127
129
  - **No-arg:** `fn` is `() => Promise<...>`. Use when the mutation has no call-time input (e.g. DELETE with fixed path params). `mutate()` is called with no arguments.
128
- - **With variables:** `fn` is `(vars) => Promise<...>`. Use for POST/PUT etc. `mutate(vars)` receives a single object (e.g. `{ body, query }` or the Treaty methods first argument). You can pass the Treaty method directly when its signature matches (e.g. `client.api.resource({ id }).put`).
130
+ - **With variables:** `fn` is `(vars) => Promise<...>`. Use for POST/PUT etc. `mutate(vars)` receives a single object (e.g. `{ body, query }` or the Treaty method's first argument). You can pass the Treaty method directly when its signature matches (e.g. `client.api.resource({ id }).put`).
129
131
 
130
132
  The optional second argument accepts all `mutationOptions` fields except `mutationFn` (e.g. `onSuccess`, `onSettled`, `onMutate`).
131
133
 
132
- **`createTreatyQueryHook(fn, useOptions)`** — returns a hook that wraps `useQuery` with the given Treaty GET thunk. **`useOptions`** is either a query options object (e.g. `{ queryKey: [...] }`) or a function `(options) => ...` that receives the hook’s call-time options and returns options; the function runs when the hook runs, so you can use React hooks inside it. Call-time options are merged with the returned options.
134
+ **`treatyMutationHook(mutationFn, useOptions?)`** — returns a hook that wraps `useMutation` with the given Treaty mutation function. **`mutationFn`** is the Treaty mutation function (e.g. `myMutationFn`). **`useOptions`** is optional; it's a hook that returns default mutation options (so you can use `useQueryClient()` for invalidation). The returned hook accepts the same options as `useMutation`; callbacks are chained (base `useOptions` call-site).
133
135
 
134
- **`createTreatyMutationHook(fn, useOptions?)`** — returns a hook that wraps `useMutation` with the given Treaty mutation. Same fn shapes as `treatyMutationOptions` (no-arg or with variables). **`useOptions`** is optional; it can be a mutation options object or a function `(options) => ...` that receives the hook’s call-time options and returns options (so you can use `useQueryClient()` for invalidation and forward callbacks like `options.onSettled?.(...args)`). The returned hook accepts the same options as `useMutation`.
136
+ **`treatyQueryHook(queryFn, useOptions?)`** — returns a hook that wraps `useQuery` with the given Treaty query function. **`queryFn`** is the Treaty query function (e.g. `myQueryFn`). **`useOptions`** is optional; it's a function `(request) => ...` that receives the query request and returns default query options including `queryKey` (so you can use React hooks like `useQueryClient()`). The returned hook is called with `(request, options?)`; callbacks are chained (base → `useOptions` → call-site).
135
137
 
136
138
  **`InferTreatyQueryOptions<T>`** — full `UseQueryOptions` type for a given Treaty query.
137
139
 
package/dist/index.d.ts CHANGED
@@ -1,43 +1,48 @@
1
1
  import { Treaty } from "@elysiajs/eden";
2
- import { UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from "@tanstack/react-query";
3
- type TreatyResponse = Record<number, unknown>;
4
- type TreatyFunctionWithoutParams<TResponse extends TreatyResponse = TreatyResponse> = () => Promise<Treaty.TreatyResponse<TResponse>>;
5
- type TreatyFunctionWithParams<
6
- TParams,
7
- TResponse extends TreatyResponse
8
- > = (params: TParams) => Promise<Treaty.TreatyResponse<TResponse>>;
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,
17
- TResponse extends TreatyResponse
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 UseTreatyQueryOptions<TResponse extends TreatyResponse> = Omit<TreatyQueryOptions<TResponse>, "queryFn">;
22
- type UseTreatyMutationOptions<
23
- TVariables,
24
- TResponse extends TreatyResponse
25
- > = Omit<TreatyMutationOptions<TVariables, TResponse>, "mutationFn">;
26
- type UseTreatyMutationHook<
27
- TVariables,
28
- TResponse extends TreatyResponse
29
- > = (options: Partial<UseTreatyMutationOptions<TVariables, TResponse>>) => UseTreatyMutationResult<TVariables, TResponse>;
30
- type UseTreatyQueryHook<TResponse extends TreatyResponse> = (options: Partial<UseTreatyQueryOptions<TResponse>>) => UseTreatyQueryResult<TResponse>;
31
- declare function treatyMutationOptions<TResponse extends TreatyResponse>(fn: TreatyFunctionWithoutParams<TResponse>, options?: UseTreatyMutationOptions<void, TResponse>): TreatyMutationOptions<void, TResponse>;
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 };
2
+ import { QueryKey, UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult } from "@tanstack/react-query";
3
+ type TreatyFunction = (...request: any[]) => Promise<Treaty.TreatyResponse<Record<number, unknown>>>;
4
+ type InferTreatyData<TFn extends TreatyFunction> = Awaited<ReturnType<TFn>>["data"];
5
+ type InferTreatyError<TFn extends TreatyFunction> = Awaited<ReturnType<TFn>>["error"];
6
+ type InferTreatyRequest<TFn extends TreatyFunction> = Parameters<TFn>[0];
7
+ type InferTreatyMutationOptions<TFn extends TreatyFunction> = UseMutationOptions<InferTreatyData<TFn>, InferTreatyError<TFn>, InferTreatyRequest<TFn>>;
8
+ type InferTreatyQueryOptions<
9
+ TFn extends TreatyFunction,
10
+ TQueryKey extends QueryKey = unknown[]
11
+ > = UseQueryOptions<InferTreatyData<TFn>, InferTreatyError<TFn>, InferTreatyData<TFn>, TQueryKey>;
12
+ declare function treatyMutationOptions<TFn extends TreatyFunction>(options: {
13
+ mutationFn: TFn;
14
+ } & Omit<InferTreatyMutationOptions<TFn>, "mutationFn">): InferTreatyMutationOptions<TFn>;
15
+ declare function treatyQueryOptions<
16
+ TFn extends TreatyFunction,
17
+ const TQueryKey extends QueryKey
18
+ >(options: {
19
+ queryKey: TQueryKey;
20
+ queryFn: TFn;
21
+ } & Omit<InferTreatyQueryOptions<TFn, TQueryKey>, "queryKey" | "queryFn">): InferTreatyQueryOptions<TFn, TQueryKey>;
22
+ type UseTreatyMutationResult<TFn extends TreatyFunction> = UseMutationResult<InferTreatyData<TFn>, InferTreatyError<TFn>, InferTreatyRequest<TFn>>;
23
+ type UseTreatyQueryResult<
24
+ TFn extends TreatyFunction,
25
+ TQueryKey extends QueryKey = unknown[]
26
+ > = UseQueryResult<InferTreatyData<TFn>, InferTreatyError<TFn>>;
27
+ type TreatyMutationHookOptions<TFn extends TreatyFunction> = Omit<InferTreatyMutationOptions<TFn>, "mutationFn">;
28
+ type TreatyQueryHookOptions<
29
+ TFn extends TreatyFunction,
30
+ TQueryKey extends QueryKey = unknown[]
31
+ > = Omit<InferTreatyQueryOptions<TFn, TQueryKey>, "queryKey" | "queryFn">;
32
+ type TreatyQueryHookUseOptions<
33
+ TFn extends TreatyFunction,
34
+ TQueryKey extends QueryKey = unknown[]
35
+ > = {
36
+ queryKey: TQueryKey;
37
+ } & TreatyQueryHookOptions<TFn, TQueryKey>;
38
+ type TreatyMutationHook<TFn extends TreatyFunction> = (options?: TreatyMutationHookOptions<TFn>) => UseTreatyMutationResult<TFn>;
39
+ type TreatyQueryHook<
40
+ TFn extends TreatyFunction,
41
+ TQueryKey extends QueryKey = unknown[]
42
+ > = (request: InferTreatyRequest<TFn>, options?: TreatyQueryHookOptions<TFn, TQueryKey>) => UseTreatyQueryResult<TFn, TQueryKey>;
43
+ declare function treatyMutationHook<TFn extends TreatyFunction>(mutationFn: TFn, useOptions?: () => TreatyMutationHookOptions<TFn>): TreatyMutationHook<TFn>;
44
+ declare function treatyQueryHook<
45
+ TFn extends TreatyFunction,
46
+ TQueryKey extends QueryKey = QueryKey
47
+ >(queryFn: TFn, useOptions?: (request: InferTreatyRequest<TFn>) => TreatyQueryHookUseOptions<TFn, TQueryKey>): TreatyQueryHook<TFn, TQueryKey>;
48
+ export { treatyQueryOptions, treatyQueryHook, treatyMutationOptions, treatyMutationHook, InferTreatyQueryOptions, InferTreatyMutationOptions };
package/dist/index.js CHANGED
@@ -1,15 +1,57 @@
1
- // src/lib.ts
2
- import {
3
- mutationOptions,
4
- queryOptions,
5
- useMutation,
6
- useQuery
7
- } from "@tanstack/react-query";
8
- function treatyMutationOptions(fn, options) {
1
+ // src/treaty.ts
2
+ import { mutationOptions, queryOptions, useMutation, useQuery } from "@tanstack/react-query";
3
+
4
+ // src/utils.ts
5
+ function mergeMutationOptions(base, options) {
6
+ if (!options)
7
+ return base;
8
+ const { onSuccess, onError, onSettled, onMutate, ...rest } = options;
9
+ return {
10
+ ...base,
11
+ ...rest,
12
+ ...onMutate !== undefined && {
13
+ onMutate: async (variables, context) => {
14
+ const prev = await base.onMutate?.(variables, context);
15
+ const next = await options.onMutate?.(variables, context);
16
+ return next !== undefined ? next : prev;
17
+ }
18
+ },
19
+ ...onSuccess !== undefined && {
20
+ onSuccess: async (data, variables, onMutateResult, context) => {
21
+ await base.onSuccess?.(data, variables, onMutateResult, context);
22
+ await options.onSuccess?.(data, variables, onMutateResult, context);
23
+ }
24
+ },
25
+ ...onError !== undefined && {
26
+ onError: async (error, variables, onMutateResult, context) => {
27
+ await base.onError?.(error, variables, onMutateResult, context);
28
+ await options.onError?.(error, variables, onMutateResult, context);
29
+ }
30
+ },
31
+ ...onSettled !== undefined && {
32
+ onSettled: async (data, error, variables, onMutateResult, context) => {
33
+ await base.onSettled?.(data, error, variables, onMutateResult, context);
34
+ await options.onSettled?.(data, error, variables, onMutateResult, context);
35
+ }
36
+ }
37
+ };
38
+ }
39
+ function mergeQueryOptions(base, options) {
40
+ if (!options)
41
+ return base;
42
+ return {
43
+ ...base,
44
+ ...options
45
+ };
46
+ }
47
+
48
+ // src/treaty.ts
49
+ function treatyMutationOptions(options) {
50
+ const { mutationFn, ...rest } = options;
9
51
  return mutationOptions({
10
- ...options,
52
+ ...rest,
11
53
  mutationFn: async (variables) => {
12
- const response = await (fn.length === 0 ? fn() : fn(variables));
54
+ const response = await mutationFn(variables);
13
55
  const { data, error } = response;
14
56
  if (error)
15
57
  throw error;
@@ -17,11 +59,13 @@ function treatyMutationOptions(fn, options) {
17
59
  }
18
60
  });
19
61
  }
20
- function treatyQueryOptions(fn, options) {
62
+ function treatyQueryOptions(options) {
63
+ const { queryFn, queryKey, ...rest } = options;
21
64
  return queryOptions({
22
- ...options,
65
+ ...rest,
66
+ queryKey,
23
67
  queryFn: async () => {
24
- const response = await fn();
68
+ const response = await queryFn();
25
69
  const { data, error } = response;
26
70
  if (error)
27
71
  throw error;
@@ -29,30 +73,32 @@ function treatyQueryOptions(fn, options) {
29
73
  }
30
74
  });
31
75
  }
32
- function createTreatyMutationHook(fn, useOptions) {
76
+ function treatyMutationHook(mutationFn, useOptions) {
33
77
  return (options) => {
34
- const initOptions = typeof useOptions === "function" ? useOptions(options) : useOptions;
35
- return useMutation({
36
- ...treatyMutationOptions(fn, initOptions),
37
- ...options
38
- });
78
+ const baseOptions = treatyMutationOptions({ mutationFn });
79
+ const defaultOptions = useOptions?.();
80
+ const merged = mergeMutationOptions(mergeMutationOptions(baseOptions, defaultOptions), options);
81
+ return useMutation(merged);
39
82
  };
40
83
  }
41
- function createTreatyQueryHook(fn, useOptions) {
42
- return (options) => {
43
- const initOptions = typeof useOptions === "function" ? useOptions(options) : useOptions;
44
- return useQuery({
45
- ...treatyQueryOptions(fn, initOptions),
46
- ...options
84
+ function treatyQueryHook(queryFn, useOptions) {
85
+ return (request, options) => {
86
+ const defaultOptions = useOptions?.(request);
87
+ const baseOptions = treatyQueryOptions({
88
+ queryKey: defaultOptions?.queryKey ?? ["resource", request],
89
+ queryFn: () => queryFn(request),
90
+ ...defaultOptions
47
91
  });
92
+ const merged = mergeQueryOptions(baseOptions, options);
93
+ return useQuery(merged);
48
94
  };
49
95
  }
50
96
  export {
51
97
  treatyQueryOptions,
98
+ treatyQueryHook,
52
99
  treatyMutationOptions,
53
- createTreatyQueryHook,
54
- createTreatyMutationHook
100
+ treatyMutationHook
55
101
  };
56
102
 
57
- //# debugId=DB20669AEF2C954E64756E2164756E21
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=
103
+ //# debugId=3974E80E199B9F8064756E2164756E21
104
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjXFx0cmVhdHkudHMiLCAic3JjXFx1dGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSB7IFRyZWF0eSB9IGZyb20gXCJAZWx5c2lhanMvZWRlblwiO1xyXG5pbXBvcnQgeyBtdXRhdGlvbk9wdGlvbnMsIHF1ZXJ5T3B0aW9ucywgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB0eXBlIFF1ZXJ5S2V5LCB0eXBlIFVzZU11dGF0aW9uT3B0aW9ucywgdHlwZSBVc2VNdXRhdGlvblJlc3VsdCwgdHlwZSBVc2VRdWVyeU9wdGlvbnMsIHR5cGUgVXNlUXVlcnlSZXN1bHQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XHJcbmltcG9ydCB7IG1lcmdlTXV0YXRpb25PcHRpb25zLCBtZXJnZVF1ZXJ5T3B0aW9ucyB9IGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG50eXBlIFRyZWF0eUZ1bmN0aW9uID0gKC4uLnJlcXVlc3Q6IGFueVtdKSA9PiBcclxuICBQcm9taXNlPFRyZWF0eS5UcmVhdHlSZXNwb25zZTxSZWNvcmQ8bnVtYmVyLCB1bmtub3duPj4+O1xyXG5cclxuZXhwb3J0IHR5cGUgSW5mZXJUcmVhdHlEYXRhPFxyXG4gIFRGbiBleHRlbmRzIFRyZWF0eUZ1bmN0aW9uLFxyXG4+ID0gQXdhaXRlZDxSZXR1cm5UeXBlPFRGbj4+W1wiZGF0YVwiXTtcclxuXHJcbmV4cG9ydCB0eXBlIEluZmVyVHJlYXR5RXJyb3I8XHJcbiAgVEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24sXHJcbj4gPSBBd2FpdGVkPFJldHVyblR5cGU8VEZuPj5bXCJlcnJvclwiXTtcclxuXHJcbmV4cG9ydCB0eXBlIEluZmVyVHJlYXR5UmVxdWVzdDxcclxuICBURm4gZXh0ZW5kcyBUcmVhdHlGdW5jdGlvbixcclxuPiA9IFBhcmFtZXRlcnM8VEZuPlswXTtcclxuXHJcbmV4cG9ydCB0eXBlIEluZmVyVHJlYXR5TXV0YXRpb25PcHRpb25zPFxyXG4gIFRGbiBleHRlbmRzIFRyZWF0eUZ1bmN0aW9uLFxyXG4+ID0gVXNlTXV0YXRpb25PcHRpb25zPFxyXG4gIEluZmVyVHJlYXR5RGF0YTxURm4+LFxyXG4gIEluZmVyVHJlYXR5RXJyb3I8VEZuPixcclxuICBJbmZlclRyZWF0eVJlcXVlc3Q8VEZuPlxyXG4+O1xyXG5cclxuZXhwb3J0IHR5cGUgSW5mZXJUcmVhdHlRdWVyeU9wdGlvbnM8XHJcbiAgVEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24sXHJcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSB1bmtub3duW10sXHJcbj4gPSBVc2VRdWVyeU9wdGlvbnM8XHJcbiAgSW5mZXJUcmVhdHlEYXRhPFRGbj4sXHJcbiAgSW5mZXJUcmVhdHlFcnJvcjxURm4+LFxyXG4gIEluZmVyVHJlYXR5RGF0YTxURm4+LFxyXG4gIFRRdWVyeUtleVxyXG4+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRyZWF0eU11dGF0aW9uT3B0aW9uczxURm4gZXh0ZW5kcyBUcmVhdHlGdW5jdGlvbj4oXHJcbiAgb3B0aW9uczoge1xyXG4gICAgbXV0YXRpb25GbjogVEZuO1xyXG4gIH0gJiBPbWl0PFxyXG4gICAgSW5mZXJUcmVhdHlNdXRhdGlvbk9wdGlvbnM8VEZuPixcclxuICAgIFwibXV0YXRpb25GblwiXHJcbiAgPlxyXG4pOiBJbmZlclRyZWF0eU11dGF0aW9uT3B0aW9uczxURm4+IHtcclxuICB0eXBlIFREYXRhID0gSW5mZXJUcmVhdHlEYXRhPFRGbj47XHJcbiAgdHlwZSBURXJyb3IgPSBJbmZlclRyZWF0eUVycm9yPFRGbj47XHJcbiAgdHlwZSBUVmFyaWFibGVzID0gSW5mZXJUcmVhdHlSZXF1ZXN0PFRGbj47XHJcbiAgY29uc3QgeyBtdXRhdGlvbkZuLCAuLi5yZXN0IH0gPSBvcHRpb25zO1xyXG4gIHJldHVybiBtdXRhdGlvbk9wdGlvbnM8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcz4oe1xyXG4gICAgLi4ucmVzdCxcclxuICAgIG11dGF0aW9uRm46IGFzeW5jICh2YXJpYWJsZXMpID0+IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtdXRhdGlvbkZuKHZhcmlhYmxlcyk7XHJcbiAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3BvbnNlO1xyXG4gICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0sXHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmVhdHlRdWVyeU9wdGlvbnM8XHJcbiAgVEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24sXHJcbiAgY29uc3QgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXksXHJcbj4oXHJcbiAgb3B0aW9uczoge1xyXG4gICAgcXVlcnlLZXk6IFRRdWVyeUtleTtcclxuICAgIHF1ZXJ5Rm46IFRGbjtcclxuICB9ICYgT21pdDxcclxuICAgIEluZmVyVHJlYXR5UXVlcnlPcHRpb25zPFRGbiwgVFF1ZXJ5S2V5PixcclxuICAgIFwicXVlcnlLZXlcIiB8IFwicXVlcnlGblwiXHJcbiAgPlxyXG4pOiBJbmZlclRyZWF0eVF1ZXJ5T3B0aW9uczxURm4sIFRRdWVyeUtleT4ge1xyXG4gIHR5cGUgVERhdGEgPSBJbmZlclRyZWF0eURhdGE8VEZuPjtcclxuICB0eXBlIFRFcnJvciA9IEluZmVyVHJlYXR5RXJyb3I8VEZuPjtcclxuICBjb25zdCB7IHF1ZXJ5Rm4sIHF1ZXJ5S2V5LCAuLi5yZXN0IH0gPSBvcHRpb25zO1xyXG4gIHJldHVybiBxdWVyeU9wdGlvbnM8VERhdGEsIFRFcnJvciwgVERhdGEsIFRRdWVyeUtleT4oe1xyXG4gICAgLi4ucmVzdCxcclxuICAgIHF1ZXJ5S2V5LFxyXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHF1ZXJ5Rm4oKTtcclxuICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzcG9uc2U7XHJcbiAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfSxcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVXNlVHJlYXR5TXV0YXRpb25SZXN1bHQ8VEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24+ID0gVXNlTXV0YXRpb25SZXN1bHQ8XHJcbiAgSW5mZXJUcmVhdHlEYXRhPFRGbj4sXHJcbiAgSW5mZXJUcmVhdHlFcnJvcjxURm4+LFxyXG4gIEluZmVyVHJlYXR5UmVxdWVzdDxURm4+XHJcbj47XHJcblxyXG5leHBvcnQgdHlwZSBVc2VUcmVhdHlRdWVyeVJlc3VsdDxcclxuICBURm4gZXh0ZW5kcyBUcmVhdHlGdW5jdGlvbixcclxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSA9IHVua25vd25bXSxcclxuPiA9IFVzZVF1ZXJ5UmVzdWx0PFxyXG4gIEluZmVyVHJlYXR5RGF0YTxURm4+LFxyXG4gIEluZmVyVHJlYXR5RXJyb3I8VEZuPlxyXG4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5TXV0YXRpb25Ib29rT3B0aW9uczxURm4gZXh0ZW5kcyBUcmVhdHlGdW5jdGlvbj4gPSBPbWl0PFxyXG4gIEluZmVyVHJlYXR5TXV0YXRpb25PcHRpb25zPFRGbj4sXHJcbiAgXCJtdXRhdGlvbkZuXCJcclxuPjtcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWF0eVF1ZXJ5SG9va09wdGlvbnM8XHJcbiAgVEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24sXHJcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSB1bmtub3duW10sXHJcbj4gPSBPbWl0PFxyXG4gIEluZmVyVHJlYXR5UXVlcnlPcHRpb25zPFRGbiwgVFF1ZXJ5S2V5PixcclxuICBcInF1ZXJ5S2V5XCIgfCBcInF1ZXJ5Rm5cIlxyXG4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5UXVlcnlIb29rVXNlT3B0aW9uczxcclxuICBURm4gZXh0ZW5kcyBUcmVhdHlGdW5jdGlvbixcclxuICBUUXVlcnlLZXkgZXh0ZW5kcyBRdWVyeUtleSA9IHVua25vd25bXSxcclxuPiA9IHtcclxuICBxdWVyeUtleTogVFF1ZXJ5S2V5O1xyXG59ICYgVHJlYXR5UXVlcnlIb29rT3B0aW9uczxURm4sIFRRdWVyeUtleT47XHJcblxyXG5leHBvcnQgdHlwZSBUcmVhdHlNdXRhdGlvbkhvb2s8VEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24+ID0gKFxyXG4gIG9wdGlvbnM/OiBUcmVhdHlNdXRhdGlvbkhvb2tPcHRpb25zPFRGbj5cclxuKSA9PiBVc2VUcmVhdHlNdXRhdGlvblJlc3VsdDxURm4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlYXR5UXVlcnlIb29rPFxyXG4gIFRGbiBleHRlbmRzIFRyZWF0eUZ1bmN0aW9uLFxyXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5ID0gdW5rbm93bltdLFxyXG4+ID0gKFxyXG4gIHJlcXVlc3Q6IEluZmVyVHJlYXR5UmVxdWVzdDxURm4+LFxyXG4gIG9wdGlvbnM/OiBUcmVhdHlRdWVyeUhvb2tPcHRpb25zPFRGbiwgVFF1ZXJ5S2V5PlxyXG4pID0+IFVzZVRyZWF0eVF1ZXJ5UmVzdWx0PFRGbiwgVFF1ZXJ5S2V5PjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmVhdHlNdXRhdGlvbkhvb2s8VEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24+KFxyXG4gIG11dGF0aW9uRm46IFRGbixcclxuICB1c2VPcHRpb25zPzogKCkgPT4gVHJlYXR5TXV0YXRpb25Ib29rT3B0aW9uczxURm4+XHJcbik6IFRyZWF0eU11dGF0aW9uSG9vazxURm4+IHtcclxuICByZXR1cm4gKG9wdGlvbnMpID0+IHtcclxuICAgIGNvbnN0IGJhc2VPcHRpb25zID0gdHJlYXR5TXV0YXRpb25PcHRpb25zKHsgbXV0YXRpb25GbiB9KTtcclxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gdXNlT3B0aW9ucz8uKCk7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBtZXJnZU11dGF0aW9uT3B0aW9ucyhcclxuICAgICAgbWVyZ2VNdXRhdGlvbk9wdGlvbnMoYmFzZU9wdGlvbnMsIGRlZmF1bHRPcHRpb25zKSxcclxuICAgICAgb3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHJldHVybiB1c2VNdXRhdGlvbihtZXJnZWQpO1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmVhdHlRdWVyeUhvb2s8XHJcbiAgVEZuIGV4dGVuZHMgVHJlYXR5RnVuY3Rpb24sXHJcbiAgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXkgPSBRdWVyeUtleSxcclxuPihcclxuICBxdWVyeUZuOiBURm4sXHJcbiAgdXNlT3B0aW9ucz86IChcclxuICAgIHJlcXVlc3Q6IEluZmVyVHJlYXR5UmVxdWVzdDxURm4+XHJcbiAgKSA9PiBUcmVhdHlRdWVyeUhvb2tVc2VPcHRpb25zPFRGbiwgVFF1ZXJ5S2V5PlxyXG4pOiBUcmVhdHlRdWVyeUhvb2s8VEZuLCBUUXVlcnlLZXk+IHtcclxuICByZXR1cm4gKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcclxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gdXNlT3B0aW9ucz8uKHJlcXVlc3QpO1xyXG4gICAgY29uc3QgYmFzZU9wdGlvbnMgPSB0cmVhdHlRdWVyeU9wdGlvbnMoe1xyXG4gICAgICBxdWVyeUtleTogKGRlZmF1bHRPcHRpb25zPy5xdWVyeUtleSA/PyAoW1wicmVzb3VyY2VcIiwgcmVxdWVzdF0gYXMgdW5rbm93bikpIGFzIFRRdWVyeUtleSxcclxuICAgICAgcXVlcnlGbjogKCgpID0+IHF1ZXJ5Rm4ocmVxdWVzdCkpIGFzIFRGbixcclxuICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlUXVlcnlPcHRpb25zKFxyXG4gICAgICBiYXNlT3B0aW9ucyxcclxuICAgICAgb3B0aW9ucyBhcyBVc2VRdWVyeU9wdGlvbnM8XHJcbiAgICAgICAgSW5mZXJUcmVhdHlEYXRhPFRGbj4sXHJcbiAgICAgICAgSW5mZXJUcmVhdHlFcnJvcjxURm4+LFxyXG4gICAgICAgIEluZmVyVHJlYXR5RGF0YTxURm4+LFxyXG4gICAgICAgIFRRdWVyeUtleVxyXG4gICAgICA+IHwgdW5kZWZpbmVkXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHVzZVF1ZXJ5KG1lcmdlZCk7XHJcbiAgfTtcclxufSIsCiAgICAiaW1wb3J0IHR5cGUgeyBRdWVyeUtleSwgVXNlTXV0YXRpb25PcHRpb25zLCBVc2VRdWVyeU9wdGlvbnMgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VNdXRhdGlvbk9wdGlvbnM8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+KFxyXG4gIGJhc2U6IFVzZU11dGF0aW9uT3B0aW9uczxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD4sXHJcbiAgb3B0aW9ucz86IFBhcnRpYWw8VXNlTXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0Pj5cclxuKTogVXNlTXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiB7XHJcbiAgaWYgKCFvcHRpb25zKSByZXR1cm4gYmFzZTtcclxuICBjb25zdCB7IG9uU3VjY2Vzcywgb25FcnJvciwgb25TZXR0bGVkLCBvbk11dGF0ZSwgLi4ucmVzdCB9ID0gb3B0aW9ucztcclxuICByZXR1cm4ge1xyXG4gICAgLi4uYmFzZSxcclxuICAgIC4uLnJlc3QsXHJcbiAgICAuLi4ob25NdXRhdGUgIT09IHVuZGVmaW5lZCAmJiB7XHJcbiAgICAgIG9uTXV0YXRlOiBhc3luYyAodmFyaWFibGVzLCBjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJldiA9IGF3YWl0IGJhc2Uub25NdXRhdGU/Lih2YXJpYWJsZXMsIGNvbnRleHQpO1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBhd2FpdCBvcHRpb25zLm9uTXV0YXRlPy4odmFyaWFibGVzLCBjb250ZXh0KTtcclxuICAgICAgICByZXR1cm4gKG5leHQgIT09IHVuZGVmaW5lZCA/IG5leHQgOiBwcmV2KSBhcyBUQ29udGV4dDtcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgLi4uKG9uU3VjY2VzcyAhPT0gdW5kZWZpbmVkICYmIHtcclxuICAgICAgb25TdWNjZXNzOiBhc3luYyAoZGF0YSwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IGJhc2Uub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCk7XHJcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIG9uTXV0YXRlUmVzdWx0LCBjb250ZXh0KTtcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgLi4uKG9uRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7XHJcbiAgICAgIG9uRXJyb3I6IGFzeW5jIChlcnJvciwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IGJhc2Uub25FcnJvcj8uKGVycm9yLCB2YXJpYWJsZXMsIG9uTXV0YXRlUmVzdWx0LCBjb250ZXh0KTtcclxuICAgICAgICBhd2FpdCBvcHRpb25zLm9uRXJyb3I/LihlcnJvciwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KSxcclxuICAgIC4uLihvblNldHRsZWQgIT09IHVuZGVmaW5lZCAmJiB7XHJcbiAgICAgIG9uU2V0dGxlZDogYXN5bmMgKGRhdGEsIGVycm9yLCB2YXJpYWJsZXMsIG9uTXV0YXRlUmVzdWx0LCBjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgYXdhaXQgYmFzZS5vblNldHRsZWQ/LihkYXRhLCBlcnJvciwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCk7XHJcbiAgICAgICAgYXdhaXQgb3B0aW9ucy5vblNldHRsZWQ/LihkYXRhLCBlcnJvciwgdmFyaWFibGVzLCBvbk11dGF0ZVJlc3VsdCwgY29udGV4dCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KSxcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VRdWVyeU9wdGlvbnM8VERhdGEsIFRFcnJvciwgVFF1ZXJ5S2V5IGV4dGVuZHMgUXVlcnlLZXk+KFxyXG4gIGJhc2U6IFVzZVF1ZXJ5T3B0aW9uczxURGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PixcclxuICBvcHRpb25zPzogUGFydGlhbDxVc2VRdWVyeU9wdGlvbnM8VERhdGEsIFRFcnJvciwgVERhdGEsIFRRdWVyeUtleT4+XHJcbik6IFVzZVF1ZXJ5T3B0aW9uczxURGF0YSwgVEVycm9yLCBURGF0YSwgVFF1ZXJ5S2V5PiB7XHJcbiAgaWYgKCFvcHRpb25zKSByZXR1cm4gYmFzZTtcclxuICByZXR1cm4ge1xyXG4gICAgLi4uYmFzZSxcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgfTtcclxufVxyXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0E7OztBQ0NPLFNBQVMsb0JBQXlELENBQ3ZFLE1BQ0EsU0FDeUQ7QUFBQSxFQUN6RCxJQUFJLENBQUM7QUFBQSxJQUFTLE9BQU87QUFBQSxFQUNyQixRQUFRLFdBQVcsU0FBUyxXQUFXLGFBQWEsU0FBUztBQUFBLEVBQzdELE9BQU87QUFBQSxPQUNGO0FBQUEsT0FDQTtBQUFBLE9BQ0MsYUFBYSxhQUFhO0FBQUEsTUFDNUIsVUFBVSxPQUFPLFdBQVcsWUFBWTtBQUFBLFFBQ3RDLE1BQU0sT0FBTyxNQUFNLEtBQUssV0FBVyxXQUFXLE9BQU87QUFBQSxRQUNyRCxNQUFNLE9BQU8sTUFBTSxRQUFRLFdBQVcsV0FBVyxPQUFPO0FBQUEsUUFDeEQsT0FBUSxTQUFTLFlBQVksT0FBTztBQUFBO0FBQUEsSUFFeEM7QUFBQSxPQUNJLGNBQWMsYUFBYTtBQUFB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
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.5",
4
+ "version": "0.3.6",
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"