@effect-app/vue 4.0.0-beta.30 → 4.0.0-beta.301

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.
Files changed (135) hide show
  1. package/CHANGELOG.md +2234 -0
  2. package/dist/atomQuery.d.ts +111 -0
  3. package/dist/atomQuery.d.ts.map +1 -0
  4. package/dist/atomQuery.js +386 -0
  5. package/dist/commander.d.ts +634 -0
  6. package/dist/commander.d.ts.map +1 -0
  7. package/dist/commander.js +1070 -0
  8. package/dist/{experimental/confirm.d.ts → confirm.d.ts} +6 -4
  9. package/dist/confirm.d.ts.map +1 -0
  10. package/dist/confirm.js +26 -0
  11. package/dist/dependencyMetadata.d.ts +10 -0
  12. package/dist/dependencyMetadata.d.ts.map +1 -0
  13. package/dist/dependencyMetadata.js +29 -0
  14. package/dist/errorReporter.d.ts +6 -4
  15. package/dist/errorReporter.d.ts.map +1 -1
  16. package/dist/errorReporter.js +14 -19
  17. package/dist/form.d.ts +14 -5
  18. package/dist/form.d.ts.map +1 -1
  19. package/dist/form.js +46 -13
  20. package/dist/internal/tanstackQuery.d.ts +9 -0
  21. package/dist/internal/tanstackQuery.d.ts.map +1 -0
  22. package/dist/internal/tanstackQuery.js +194 -0
  23. package/dist/intl.d.ts +15 -0
  24. package/dist/intl.d.ts.map +1 -0
  25. package/dist/intl.js +9 -0
  26. package/dist/lib.d.ts +7 -9
  27. package/dist/lib.d.ts.map +1 -1
  28. package/dist/lib.js +35 -10
  29. package/dist/makeClient.d.ts +236 -336
  30. package/dist/makeClient.d.ts.map +1 -1
  31. package/dist/makeClient.js +416 -408
  32. package/dist/makeContext.d.ts.map +1 -1
  33. package/dist/makeIntl.d.ts.map +1 -1
  34. package/dist/{experimental/makeUseCommand.d.ts → makeUseCommand.d.ts} +4 -3
  35. package/dist/makeUseCommand.d.ts.map +1 -0
  36. package/dist/makeUseCommand.js +13 -0
  37. package/dist/mutate.d.ts +108 -40
  38. package/dist/mutate.d.ts.map +1 -1
  39. package/dist/mutate.js +211 -58
  40. package/dist/query.d.ts +150 -46
  41. package/dist/query.d.ts.map +1 -1
  42. package/dist/query.js +370 -122
  43. package/dist/routeParams.d.ts +4 -4
  44. package/dist/routeParams.d.ts.map +1 -1
  45. package/dist/routeParams.js +4 -3
  46. package/dist/runtime.d.ts +1 -14
  47. package/dist/runtime.d.ts.map +1 -1
  48. package/dist/runtime.js +2 -26
  49. package/dist/suspense.d.ts +19 -0
  50. package/dist/suspense.d.ts.map +1 -0
  51. package/dist/suspense.js +38 -0
  52. package/dist/toast.d.ts +2 -0
  53. package/dist/toast.d.ts.map +1 -0
  54. package/dist/toast.js +2 -0
  55. package/dist/withToast.d.ts +2 -0
  56. package/dist/withToast.d.ts.map +1 -0
  57. package/dist/withToast.js +2 -0
  58. package/docs/atom-query-api-redesign.md +207 -0
  59. package/docs/query-key-invalidation.md +106 -0
  60. package/examples/streamMutation.ts +72 -0
  61. package/package.json +36 -95
  62. package/src/atomQuery.ts +540 -0
  63. package/src/commander.ts +3413 -0
  64. package/src/{experimental/confirm.ts → confirm.ts} +13 -15
  65. package/src/dependencyMetadata.ts +38 -0
  66. package/src/errorReporter.ts +65 -75
  67. package/src/form.ts +61 -18
  68. package/src/index.ts +7 -7
  69. package/src/internal/tanstackQuery.ts +289 -0
  70. package/src/intl.ts +12 -0
  71. package/src/lib.ts +49 -21
  72. package/src/makeClient.ts +967 -1159
  73. package/src/makeIntl.ts +2 -2
  74. package/src/{experimental/makeUseCommand.ts → makeUseCommand.ts} +9 -6
  75. package/src/mutate.ts +370 -152
  76. package/src/query.ts +742 -260
  77. package/src/routeParams.ts +7 -7
  78. package/src/runtime.ts +1 -31
  79. package/src/suspense.ts +43 -0
  80. package/src/toast.ts +1 -0
  81. package/src/withToast.ts +1 -0
  82. package/test/Mutation.test.ts +181 -24
  83. package/test/dependencyInvalidation.test.ts +373 -0
  84. package/test/dist/dependencyInvalidation.test.d.ts.map +1 -0
  85. package/test/dist/form.test.d.ts.map +1 -1
  86. package/test/dist/interrupt-refetch-repro.test.d.ts.map +1 -0
  87. package/test/dist/lib.test.d.ts.map +1 -0
  88. package/test/dist/query-span.test.d.ts.map +1 -0
  89. package/test/dist/queryOptions.test.d.ts.map +1 -0
  90. package/test/dist/streamFinal.test.d.ts.map +1 -0
  91. package/test/dist/streamFn.test.d.ts.map +1 -0
  92. package/test/dist/stubs.d.ts +3756 -122
  93. package/test/dist/stubs.d.ts.map +1 -1
  94. package/test/dist/stubs.js +192 -32
  95. package/test/dist/suspense-regression.test.d.ts.map +1 -0
  96. package/test/dist/suspense.test.d.ts.map +1 -0
  97. package/test/form-validation-errors.test.ts +25 -20
  98. package/test/form.test.ts +22 -3
  99. package/test/interrupt-refetch-repro.test.ts +623 -0
  100. package/test/lib.test.ts +240 -0
  101. package/test/makeClient.test.ts +437 -38
  102. package/test/query-span.test.ts +92 -0
  103. package/test/queryOptions.test.ts +88 -0
  104. package/test/streamFinal.test.ts +64 -0
  105. package/test/streamFn.test.ts +457 -0
  106. package/test/stubs.ts +228 -43
  107. package/test/suspense-regression.test.ts +168 -0
  108. package/test/suspense.test.ts +160 -0
  109. package/tsconfig.examples.json +20 -0
  110. package/tsconfig.json +3 -1
  111. package/tsconfig.src.json +34 -34
  112. package/tsconfig.test.json +2 -2
  113. package/vitest.config.ts +5 -5
  114. package/dist/experimental/commander.d.ts +0 -359
  115. package/dist/experimental/commander.d.ts.map +0 -1
  116. package/dist/experimental/commander.js +0 -557
  117. package/dist/experimental/confirm.d.ts.map +0 -1
  118. package/dist/experimental/confirm.js +0 -28
  119. package/dist/experimental/intl.d.ts +0 -16
  120. package/dist/experimental/intl.d.ts.map +0 -1
  121. package/dist/experimental/intl.js +0 -5
  122. package/dist/experimental/makeUseCommand.d.ts.map +0 -1
  123. package/dist/experimental/makeUseCommand.js +0 -13
  124. package/dist/experimental/toast.d.ts +0 -47
  125. package/dist/experimental/toast.d.ts.map +0 -1
  126. package/dist/experimental/toast.js +0 -41
  127. package/dist/experimental/withToast.d.ts +0 -25
  128. package/dist/experimental/withToast.d.ts.map +0 -1
  129. package/dist/experimental/withToast.js +0 -45
  130. package/eslint.config.mjs +0 -24
  131. package/src/experimental/commander.ts +0 -1835
  132. package/src/experimental/intl.ts +0 -9
  133. package/src/experimental/toast.ts +0 -66
  134. package/src/experimental/withToast.ts +0 -99
  135. package/tsconfig.json.bak +0 -12
package/dist/query.js CHANGED
@@ -2,123 +2,383 @@
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-call */
3
3
  /* eslint-disable @typescript-eslint/no-unsafe-return */
4
4
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
5
- import { useQuery as useTanstackQuery, useQueryClient } from "@tanstack/vue-query";
6
- import { Array, Cause, Effect, Exit, flow, Option, S } from "effect-app";
7
- import { ServiceUnavailableError } from "effect-app/client/errors";
8
- import { isHttpClientError } from "effect/unstable/http/HttpClientError";
5
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
6
+ import { injectRegistry, useAtomValue } from "@effect/atom-vue";
7
+ import * as Array from "effect-app/Array";
8
+ import { makeQueryKey } from "effect-app/client";
9
+ import * as Effect from "effect-app/Effect";
10
+ import * as Option from "effect-app/Option";
11
+ import * as Exit from "effect/Exit";
12
+ import * as Stream from "effect/Stream";
9
13
  import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
10
- import { computed, ref, shallowRef, watch } from "vue";
11
- import { makeQueryKey, reportRuntimeError } from "./lib.js";
12
- export class KnownFiberFailure extends Error {
13
- effectCause;
14
- error;
15
- constructor(effectCause) {
16
- super("Query failed with cause: " + Cause.squash(effectCause));
17
- this.effectCause = effectCause;
18
- this.error = Cause.squash(effectCause);
14
+ import * as Atom from "effect/unstable/reactivity/Atom";
15
+ import { computed, effectScope, onBeforeUnmount, onMounted, onScopeDispose, ref, toValue } from "vue";
16
+ import { awaitAtomResult, buildQueryFamily, buildStreamQueryFamily, disabledQueryAtom, isStaleResult, refreshAtomWithCurrentSpan, staleTimeMsOf, withQueryOptions } from "./atomQuery.js";
17
+ import { latestDefined } from "./suspense.js";
18
+ const useScopedSuspenseSetup = (setup) => {
19
+ const scope = effectScope();
20
+ const controller = new AbortController();
21
+ const value = scope.run(setup);
22
+ if (value === undefined) {
23
+ throw new Error("Internal Error: atom suspense setup scope did not initialize");
19
24
  }
20
- }
21
- export const makeQuery = (getRuntime) => {
22
- const useQuery_ = (q) => (arg,
23
- // todo QueryKey type would be [string, ...string[]], but with I it would be [string, ...string[], I]
24
- options
25
- // TODO
26
- ) => {
27
- // we wrap into KnownFiberFailure because we want to keep the full cause of the failure.
28
- const runPromise = flow(Effect.runPromiseExitWith(getRuntime()), (_) => _.then(Exit.match({
29
- onFailure: (cause) => Promise.reject(new KnownFiberFailure(cause)),
30
- onSuccess: (value) => Promise.resolve(value)
31
- })));
32
- const arr = arg;
33
- const req = !arg
34
- ? undefined
35
- : typeof arr === "function"
36
- ? {
37
- get value() {
38
- return arr();
39
- }
40
- }
41
- : ref(arg);
42
- const queryKey = makeQueryKey(q);
43
- const handler = q.handler;
44
- const defaultOptions = {
45
- // we do not want to throw errors, because we turn the success and error responses into a Result type
46
- // why don't we turn the error/success response into a Result type before returning to tanstack query? because we want to leverage tanstack query's retry and caching mechanism, which relies on throwing errors to trigger retries, and we don't want to interfere with that by catching the errors too early.
47
- // but if we allow tanstack query to throw, it will trigger the error boundary in Vue - via a "watcher callback" error - which we currently report and log, which is not what we want.
48
- // TODO: we might want to rethink the strategy of how to handle errors that happen after the initial load.
49
- // For suspense, the initial load is captured by the suspense boundary.
50
- // For subsequent loads (or non suspense use) we currently are required to use the QueryResult component to conditionally render error/loading/etc.
51
- throwOnError: false
52
- };
53
- const r = useTanstackQuery(Effect.isEffect(handler)
54
- ? {
55
- ...defaultOptions,
56
- ...options,
57
- retry: (retryCount, error) => {
58
- if (error instanceof KnownFiberFailure) {
59
- if (!isHttpClientError(error.error) && !S.is(ServiceUnavailableError)(error.error)) {
60
- return false;
61
- }
62
- }
63
- return retryCount < 5;
64
- },
65
- queryKey,
66
- queryFn: ({ meta, signal }) => runPromise(handler
67
- .pipe(Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause)), Effect.withSpan(`query ${q.id}`, {}, { captureStackTrace: false }), meta?.["span"] ? Effect.withParentSpan(meta["span"]) : (_) => _), { signal })
25
+ const isMounted = ref(true);
26
+ let stopped = false;
27
+ const stop = () => {
28
+ if (stopped)
29
+ return;
30
+ stopped = true;
31
+ isMounted.value = false;
32
+ controller.abort();
33
+ scope.stop();
34
+ };
35
+ onBeforeUnmount(stop);
36
+ onScopeDispose(stop);
37
+ return [value, isMounted, controller.signal];
38
+ };
39
+ const queryFamilyCacheKey = (q) => `${makeQueryKey(q).join("/")}:${q.queryKeyProjectionHash ?? ""}`;
40
+ // One atom family per request shape, keyed by the stable query key + projection hash (not the
41
+ // handler object — `clientFor` returns a fresh proxy per call, so the object isn't shareable).
42
+ // Module-level + key-indexed => the family is process-global, so the same request+input read
43
+ // the same atom across components/pages => cross-page caching via the global registry.
44
+ const queryFamilyByKey = new Map();
45
+ const getQueryFamily = (rt, q) => {
46
+ const key = queryFamilyCacheKey(q);
47
+ let f = queryFamilyByKey.get(key);
48
+ if (!f) {
49
+ f = buildQueryFamily(rt, q);
50
+ queryFamilyByKey.set(key, f);
51
+ }
52
+ return f;
53
+ };
54
+ const streamQueryFamilyByKey = new Map();
55
+ const getStreamQueryFamily = (rt, q) => {
56
+ const key = queryFamilyCacheKey(q);
57
+ let f = streamQueryFamilyByKey.get(key);
58
+ if (!f) {
59
+ f = buildStreamQueryFamily(rt, q);
60
+ streamQueryFamilyByKey.set(key, f);
61
+ }
62
+ return f;
63
+ };
64
+ const makeAtomQueryCacheUpdater = (warnIfMissing) => ({
65
+ update: (registry, query, input, updater) => {
66
+ const family = queryFamilyByKey.get(queryFamilyCacheKey(query));
67
+ if (!family) {
68
+ if (warnIfMissing) {
69
+ console.warn(`Query ${query.id} has not been used yet; nothing to update`);
68
70
  }
69
- : {
70
- ...defaultOptions,
71
- ...options,
72
- retry: (retryCount, error) => {
73
- if (error instanceof KnownFiberFailure) {
74
- if (!isHttpClientError(error.error) && !S.is(ServiceUnavailableError)(error.error)) {
75
- return false;
76
- }
77
- }
78
- return retryCount < 5;
79
- },
80
- queryKey: [...queryKey, req],
81
- queryFn: ({ meta, signal }) => runPromise(handler(req.value)
82
- .pipe(Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause)), Effect.withSpan(`query ${q.id}`, {}, { captureStackTrace: false }), meta?.["span"] ? Effect.withParentSpan(meta["span"]) : (_) => _), { signal })
83
- });
84
- const latestSuccess = shallowRef();
85
- const result = computed(() => swrToQuery({
86
- error: r.error.value ?? undefined,
87
- data: r.data.value === undefined ? latestSuccess.value : r.data.value, // we fall back to existing data, as tanstack query might loose it when the key changes
88
- isValidating: r.isFetching.value
89
- }));
90
- // not using `computed` here as we have a circular dependency
91
- watch(result, (value) => latestSuccess.value = Option.getOrUndefined(AsyncResult.value(value)), { immediate: true });
92
- return [
93
- result,
94
- computed(() => latestSuccess.value),
95
- // one thing to keep in mind is that span will be disconnected as Context does not pass from outside.
96
- // TODO: consider how we should handle the Result here which is `QueryObserverResult<A, E>`
97
- // and always ends up in the success channel, even when error..
98
- (options) => Effect.currentSpan.pipe(Effect.orElseSucceed(() => null), Effect.flatMap((span) => Effect.promise(() => r.refetch({ ...options, updateMeta: { span } })))),
99
- r
100
- ];
71
+ return;
72
+ }
73
+ const atom = family(input);
74
+ const current = registry.get(atom);
75
+ const next = AsyncResult.map(current, updater);
76
+ registry.set(atom, next);
77
+ }
78
+ });
79
+ export const atomQueryCacheUpdater = makeAtomQueryCacheUpdater(true);
80
+ export const optionalAtomQueryCacheUpdater = makeAtomQueryCacheUpdater(false);
81
+ export const combineQueryCacheUpdaters = (first, second) => ({
82
+ update: (registry, query, input, updater) => {
83
+ first.update(registry, query, input, updater);
84
+ second.update(registry, query, input, updater);
85
+ }
86
+ });
87
+ let activeQueryCacheUpdater = atomQueryCacheUpdater;
88
+ export const setQueryCacheUpdater = (updater) => {
89
+ activeQueryCacheUpdater = updater;
90
+ };
91
+ /**
92
+ * Layer TanStack `initialData` / `placeholderData` over a raw query result as a DISPLAY fallback.
93
+ * Only while the result is still `Initial` (pending, never settled): show `initialData` as resolved
94
+ * data, or `placeholderData` as provisional (`waiting: true`). Once real data exists the seed is
95
+ * dropped. Failures are never masked — including failures without `previousSuccess` (where
96
+ * `AsyncResult.value` is empty). `placeholderData` in function form receives the last seen concrete
97
+ * value for basic keep-previous across input changes. Returns the raw ref untouched when neither
98
+ * option is set. Neither value is written to the atom cache.
99
+ */
100
+ export const withDataFallback = (rawResult, options) => {
101
+ const opts = options;
102
+ const initialData = opts?.initialData;
103
+ const placeholderData = opts?.placeholderData;
104
+ if (initialData === undefined && placeholderData === undefined) {
105
+ return rawResult;
106
+ }
107
+ let lastData;
108
+ return computed(() => {
109
+ const r = rawResult.value;
110
+ const concrete = AsyncResult.value(r);
111
+ if (Option.isSome(concrete)) {
112
+ lastData = concrete.value;
113
+ }
114
+ // Fallback is pending-only. Failure (even without previousSuccess) and Success pass through.
115
+ if (!AsyncResult.isInitial(r)) {
116
+ return r;
117
+ }
118
+ if (initialData !== undefined) {
119
+ const v = typeof initialData === "function" ? initialData() : initialData;
120
+ return AsyncResult.success(v, { waiting: r.waiting });
121
+ }
122
+ const v = typeof placeholderData === "function"
123
+ ? placeholderData(lastData)
124
+ : placeholderData;
125
+ return v === undefined ? r : AsyncResult.success(v, { waiting: true });
126
+ });
127
+ };
128
+ const normalizeQueryOptions = (options) => {
129
+ const out = {};
130
+ if (options?.staleTime !== undefined)
131
+ out.staleTime = options.staleTime;
132
+ const gcTime = options?.idleTTL ?? options?.gcTime;
133
+ if (gcTime !== undefined)
134
+ out.gcTime = gcTime;
135
+ const revalidateOnFocus = options?.revalidateOnFocus ?? options?.refetchOnWindowFocus;
136
+ if (revalidateOnFocus !== undefined)
137
+ out.revalidateOnFocus = revalidateOnFocus;
138
+ if (options?.structuralSharing !== undefined)
139
+ out.structuralSharing = options.structuralSharing;
140
+ const refetchInterval = options?.refreshEvery ?? options?.refetchInterval;
141
+ if (refetchInterval !== undefined)
142
+ out.refetchInterval = refetchInterval;
143
+ return out;
144
+ };
145
+ export const useAtomQuery = (atom) => {
146
+ const registry = injectRegistry();
147
+ const atomRef = computed(atom);
148
+ const atomResult = useAtomValue(() => atomRef.value);
149
+ const result = computed(() => atomResult.value);
150
+ const refresh = () => registry.refresh(atomRef.value);
151
+ const awaitResult = () => awaitAtomResult(registry, atomRef.value);
152
+ const refetch = () => Effect.gen(function* () {
153
+ yield* refreshAtomWithCurrentSpan(registry, atomRef.value);
154
+ return yield* awaitResult();
155
+ });
156
+ const data = computed(() => Option.getOrUndefined(AsyncResult.value(result.value)));
157
+ return {
158
+ result,
159
+ data,
160
+ awaitResult,
161
+ refetch,
162
+ refresh,
163
+ registry,
164
+ atom: atomRef
101
165
  };
102
- function swrToQuery(r) {
103
- if (r.error !== undefined) {
104
- return AsyncResult.failureWithPrevious(r.error.effectCause, {
105
- previous: r.data === undefined ? Option.none() : Option.some(AsyncResult.success(r.data)),
106
- waiting: r.isValidating
107
- });
166
+ };
167
+ export const useAtomSuspense = (atom) => {
168
+ const [{ view, data }, isMounted, signal] = useScopedSuspenseSetup(() => {
169
+ const view = useAtomQuery(atom);
170
+ const data = latestDefined(() => view.data.value, "atom suspense");
171
+ return { view, data };
172
+ });
173
+ const eff = Effect.gen(function* () {
174
+ const exit = yield* view.awaitResult().pipe(Effect.exit);
175
+ if (!isMounted.value) {
176
+ return yield* Effect.interrupt;
108
177
  }
109
- if (r.data !== undefined) {
110
- return AsyncResult.success(r.data, { waiting: r.isValidating });
178
+ if (Exit.isFailure(exit)) {
179
+ return yield* Exit.failCause(exit.cause);
111
180
  }
112
- return AsyncResult.initial(r.isValidating);
181
+ const fetch = (_options) => view.refetch();
182
+ const handle = {
183
+ awaitResult: view.awaitResult,
184
+ refetch: view.refetch,
185
+ refresh: view.refresh,
186
+ registry: view.registry,
187
+ atom: view.atom
188
+ };
189
+ return Object.assign([
190
+ view.result,
191
+ data,
192
+ fetch,
193
+ handle
194
+ ], {
195
+ ...view,
196
+ data
197
+ });
198
+ });
199
+ return Effect.runPromise(eff, { signal });
200
+ };
201
+ export const useAtomStreamQuery = (atom) => {
202
+ const registry = injectRegistry();
203
+ const atomRef = computed(atom);
204
+ const atomResult = useAtomValue(() => atomRef.value);
205
+ const result = computed(() => atomResult.value);
206
+ const pull = () => registry.set(atomRef.value, void 0);
207
+ const refresh = () => registry.refresh(atomRef.value);
208
+ const awaitResult = () => awaitAtomResult(registry, atomRef.value);
209
+ const pullAndAwait = () => Effect.gen(function* () {
210
+ pull();
211
+ return yield* awaitResult();
212
+ });
213
+ const items = computed(() => Option.getOrElse(Option.map(AsyncResult.value(result.value), (_) => _.items), () => []));
214
+ const latest = computed(() => items.value.at(-1));
215
+ const done = computed(() => Option.getOrElse(Option.map(AsyncResult.value(result.value), (_) => _.done), () => false));
216
+ return {
217
+ result,
218
+ items,
219
+ latest,
220
+ done,
221
+ awaitResult,
222
+ pull,
223
+ pullAndAwait,
224
+ refresh,
225
+ registry,
226
+ atom: atomRef
227
+ };
228
+ };
229
+ const optionValue = (arr, options) => {
230
+ if (options?.mode === "optional") {
231
+ const getOption = typeof arr === "function"
232
+ ? arr
233
+ : () => arr.value;
234
+ return [
235
+ {
236
+ get value() {
237
+ return Option.getOrUndefined(getOption());
238
+ }
239
+ },
240
+ computed(() => Option.isSome(getOption()))
241
+ ];
113
242
  }
114
- const useQuery = (self) => {
115
- const q = useQuery_(self);
116
- return (argOrOptions, options) => Effect.isEffect(self.handler)
117
- ? q(undefined, argOrOptions)
118
- : q(argOrOptions, options);
243
+ const req = !arr
244
+ ? ({ value: undefined })
245
+ : typeof arr === "function"
246
+ ? ({
247
+ get value() {
248
+ return arr();
249
+ }
250
+ })
251
+ : ref(arr);
252
+ const enabled = options?.enabled;
253
+ return [req, computed(() => enabled === undefined ? true : !!toValue(enabled))];
254
+ };
255
+ const observedAtom = (atom, options) => withQueryOptions(atom, normalizeQueryOptions(options));
256
+ const observedStreamAtom = (atom, options) => {
257
+ let next = atom;
258
+ const refetchInterval = options?.refreshEvery ?? options?.refetchInterval;
259
+ if (refetchInterval !== undefined)
260
+ next = Atom.withRefresh(refetchInterval)(next);
261
+ const gcTime = options?.idleTTL ?? options?.gcTime;
262
+ if (gcTime === "infinity")
263
+ return Atom.keepAlive(next);
264
+ if (gcTime !== undefined)
265
+ return Atom.setIdleTTL(next, gcTime);
266
+ return next;
267
+ };
268
+ const queryAtomFor = (rt, q, arg, options) => {
269
+ const family = getQueryFamily(rt, q);
270
+ return observedAtom(family(arg), options);
271
+ };
272
+ const makeQueryView = (getAtomRt, q, arg, options) => {
273
+ const atomRt = getAtomRt();
274
+ const registry = injectRegistry();
275
+ const [req, enabledRef] = optionValue(arg, options);
276
+ const family = getQueryFamily(atomRt, q);
277
+ const atomRef = computed(() => enabledRef.value ? observedAtom(family(req.value), options) : disabledQueryAtom);
278
+ const rawResult = useAtomValue(() => atomRef.value);
279
+ // `initialData` / `placeholderData` display fallback (old `.query()` API). Applied only while the
280
+ // result is still Initial; Failures/Success pass through unmasked. Neither is written to cache
281
+ // (the base atom stays Initial, so the mount-staleness check still triggers the real fetch). The
282
+ // fallback runs PRE-select, matching TanStack (`initialData`/`placeholderData` are TQueryData).
283
+ const fallbackResult = withDataFallback(rawResult, options);
284
+ const select = options?.select;
285
+ const result = (select
286
+ ? computed(() => AsyncResult.map(fallbackResult.value, select))
287
+ : fallbackResult);
288
+ const refresh = () => registry.refresh(atomRef.value);
289
+ const awaitResult = () => select
290
+ ? awaitAtomResult(registry, atomRef.value).pipe(Effect.map(select))
291
+ : awaitAtomResult(registry, atomRef.value);
292
+ const refetch = () => Effect.gen(function* () {
293
+ yield* refreshAtomWithCurrentSpan(registry, atomRef.value);
294
+ return yield* awaitResult();
295
+ });
296
+ const staleMs = staleTimeMsOf(normalizeQueryOptions(options));
297
+ onMounted(() => {
298
+ if (!enabledRef.value)
299
+ return;
300
+ if (isStaleResult(registry.get(atomRef.value), staleMs))
301
+ refresh();
302
+ });
303
+ const data = computed(() => Option.getOrUndefined(AsyncResult.value(result.value)));
304
+ return {
305
+ result,
306
+ data,
307
+ awaitResult,
308
+ refetch,
309
+ refresh,
310
+ registry,
311
+ atom: atomRef
119
312
  };
313
+ };
314
+ export const makeQueryFamily = (_getRuntime, getAtomRt) => {
315
+ const useQueryFamily = (q) => getQueryFamily(getAtomRt(), q);
316
+ return useQueryFamily;
317
+ };
318
+ export const makeQueryAtom = (_getRuntime, getAtomRt) => {
319
+ const useQueryAtom = (q) => (arg, options) => queryAtomFor(getAtomRt(), q, arg, options);
320
+ return useQueryAtom;
321
+ };
322
+ export const makeQueryNew = (_getRuntime, getAtomRt) => {
323
+ const useQueryNew = (q) => (arg, options) => makeQueryView(getAtomRt, q, arg, options);
324
+ return useQueryNew;
325
+ };
326
+ export const makeQuery = (_getRuntime, getAtomRt) => {
327
+ const useQuery_ = (q) => (arg, options) => {
328
+ const view = makeQueryView(getAtomRt, q, arg, options);
329
+ // 4th element is internal-only; the public `.suspense()` Promise boundary lives in makeClient.
330
+ const handle = {
331
+ awaitResult: view.awaitResult,
332
+ refetch: view.refetch,
333
+ refresh: view.refresh,
334
+ registry: view.registry,
335
+ atom: view.atom
336
+ };
337
+ return [
338
+ view.result,
339
+ view.data,
340
+ (_options) => view.refetch(),
341
+ handle
342
+ ];
343
+ };
344
+ const useQuery = ((self) => {
345
+ const q = useQuery_(self);
346
+ return (arg, options) => q(arg, options);
347
+ });
120
348
  return useQuery;
121
349
  };
350
+ const streamQueryAtomFor = (rt, q, arg, options) => {
351
+ const family = getStreamQueryFamily(rt, q);
352
+ return observedStreamAtom(family(arg), options);
353
+ };
354
+ export const makeStreamQueryFamily = (_getRuntime, getAtomRt) => {
355
+ const useStreamQueryFamily = (q) => getStreamQueryFamily(getAtomRt(), q);
356
+ return useStreamQueryFamily;
357
+ };
358
+ export const makeStreamQueryAtom = (_getRuntime, getAtomRt) => {
359
+ const useStreamQueryAtom = (q) => (arg, options) => streamQueryAtomFor(getAtomRt(), q, arg, options);
360
+ return useStreamQueryAtom;
361
+ };
362
+ export const makeStreamQueryNew = (_getRuntime, getAtomRt) => {
363
+ const useStreamQueryNew = (q) => (arg, options) => useAtomStreamQuery(() => streamQueryAtomFor(getAtomRt(), q, toValue(arg), options));
364
+ return useStreamQueryNew;
365
+ };
366
+ export const makeStreamQuery = (getRuntime, getAtomRt) => {
367
+ const query = makeQuery(getRuntime, getAtomRt);
368
+ // A stream query is an ordinary atom query over an effect that collects the whole stream
369
+ // into an array (`Stream.runCollect`). It reuses all the atom machinery (family cache, swr,
370
+ // invalidation, structural sharing). Note: unlike the old tanstack `streamedQuery`, the result
371
+ // appears once the stream completes, not incrementally (stream queries are not used today).
372
+ const streamQuery_ = (q) => {
373
+ const hook = query({
374
+ id: q.id,
375
+ options: q.options,
376
+ handler: (i) => Stream.runCollect(q.handler(i)).pipe(Effect.map((chunk) => [...chunk]))
377
+ });
378
+ return (arg) => hook(arg);
379
+ };
380
+ return streamQuery_;
381
+ };
122
382
  function orPrevious(result) {
123
383
  return AsyncResult.isFailure(result) && Option.isSome(result.previousSuccess)
124
384
  ? AsyncResult.success(result.previousSuccess.value, { waiting: result.waiting })
@@ -148,20 +408,8 @@ export function composeQueries(results, renderPreviousOnFailure) {
148
408
  return AsyncResult.success(r, { waiting: isRefreshing });
149
409
  }
150
410
  export const useUpdateQuery = () => {
151
- const queryClient = useQueryClient();
152
- const f = (query, updateOrInput, updaterMaybe) => {
153
- const updater = updaterMaybe !== undefined ? updaterMaybe : updateOrInput;
154
- const key = updaterMaybe !== undefined
155
- ? [...makeQueryKey(query), updateOrInput]
156
- : makeQueryKey(query);
157
- const data = queryClient.getQueryData(key);
158
- if (data) {
159
- queryClient.setQueryData(key, updater);
160
- }
161
- else {
162
- console.warn(`Query data for key ${key} not found`, key);
163
- }
164
- };
411
+ const registry = injectRegistry();
412
+ const f = (query, input, updater) => activeQueryCacheUpdater.update(registry, query, input, updater);
165
413
  return f;
166
414
  };
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCx3REFBd0Q7QUFDeEQsNERBQTREO0FBQzVELE9BQU8sRUFBNE0sUUFBUSxJQUFJLGdCQUFnQixFQUFFLGNBQWMsRUFBMkQsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyVixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFtQixNQUFNLFlBQVksQ0FBQTtBQUd6RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUVsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUN4RSxPQUFPLEtBQUssV0FBVyxNQUFNLHdDQUF3QyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQTJDLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFvQixNQUFNLEtBQUssQ0FBQTtBQUNqSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBK0QzRCxNQUFNLE9BQU8saUJBQXFCLFNBQVEsS0FBSztJQUUxQjtJQURWLEtBQUssQ0FBUztJQUN2QixZQUFtQixXQUEyQjtRQUM1QyxLQUFLLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBRDdDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUU1QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUksVUFBMEMsRUFBRSxFQUFFO0lBQ3pFLE1BQU0sU0FBUyxHQW9DWCxDQUNGLENB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
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCx3REFBd0Q7QUFDeEQsNERBQTREO0FBQzVELCtEQUErRDtBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQy9ELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLG1CQUFtQixDQUFBO0FBSTFELE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUUzQyxPQUFPLEtBQUssSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUNuQyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssV0FBVyxNQUFNLHdDQUF3QyxDQUFBO0FBQ3JFLE9BQU8sS0FBSyxJQUFJLE1BQU0saUNBQWlDLENBQUE7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBb0IsV0FBVyxFQUF5QixlQUFlLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBWSxHQUFHLEVBQUUsT0FBTyxFQUFvQixNQUFNLEtBQUssQ0FBQTtBQUMxSyxPQUFPLEVBQWlELGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDeE8sT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQXVCN0MsTUFBTSxzQkFBc0IsR0FBRyxDQUFJLEtBQWMsRUFBRSxFQUFFO0lBQ25ELE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFBO0lBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksZUFB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
@@ -1,12 +1,12 @@
1
- import { Option, S } from "effect-app";
2
- import type { Schema } from "effect-app/Schema";
1
+ import * as Option from "effect-app/Option";
2
+ import * as S from "effect-app/Schema";
3
3
  import type { ParsedQuery } from "query-string";
4
4
  export declare function getQueryParam(search: ParsedQuery, param: string): string | null | undefined;
5
5
  export declare const getQueryParamO: (search: ParsedQuery, param: string) => Option.Option<string>;
6
6
  export declare function parseRouteParamsOption<NER extends Record<string, S.Codec<any, any>>>(query: Record<string, any>, t: NER): {
7
- [K in keyof NER]: Option.Option<Schema.Type<NER[K]>>;
7
+ [K in keyof NER]: Option.Option<NER[K]["Type"]>;
8
8
  };
9
9
  export declare function parseRouteParams<NER extends Record<string, S.Codec<any, any>>>(query: Record<string, any>, t: NER): {
10
- [K in keyof NER]: Schema.Type<NER[K]>;
10
+ [K in keyof NER]: NER[K]["Type"];
11
11
  };
12
12
  //# sourceMappingURL=routeParams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routeParams.d.ts","sourceRoot":"","sources":["../src/routeParams.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,6BAM/D;AAED,eAAO,MAAM,cAAc,+DAA4C,CAAA;AAEvE,wBAAgB,sBAAsB,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,GACrH;KACA,CAAC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CACrD,CAcA;AAED,wBAAgB,gBAAgB,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAC5E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,CAAC,EAAE,GAAG,GACL;KACA,CAAC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACtC,CAcA"}
1
+ {"version":3,"file":"routeParams.d.ts","sourceRoot":"","sources":["../src/routeParams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,6BAM/D;AAED,eAAO,MAAM,cAAc,+DAA4C,CAAA;AAEvE,wBAAgB,sBAAsB,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,GACrH;KACA,CAAC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAChD,CAcA;AAED,wBAAgB,gBAAgB,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAC5E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,CAAC,EAAE,GAAG,GACL;KACA,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;CACjC,CAcA"}
@@ -1,6 +1,7 @@
1
- import { flow } from "effect";
2
- import { Option, S } from "effect-app";
1
+ import * as Option from "effect-app/Option";
2
+ import * as S from "effect-app/Schema";
3
3
  import { typedKeysOf } from "effect-app/utils";
4
+ import { flow } from "effect/Function";
4
5
  export function getQueryParam(search, param) {
5
6
  const v = search[param];
6
7
  if (Array.isArray(v)) {
@@ -25,4 +26,4 @@ export function parseRouteParams(query, t // enforce non empty
25
26
  return prev;
26
27
  }, {});
27
28
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVQYXJhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGVQYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFHOUMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFtQixFQUFFLEtBQWE7SUFDOUQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2IsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQTtBQUNsQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBRXZFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBZ0QsS0FBMEIsRUFBRSxDQUFNLENBQUMsb0JBQW9COztJQUkzSSxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzFCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ1osb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQWEsQ0FBQyxDQUFDLElBQUksQ0FDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBRSxDQUFDLENBQUMsQ0FDL0MsQ0FBQTtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxFQUNELEVBRUMsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBMEIsRUFDMUIsQ0FBTSxDQUFDLG9CQUFvQjs7SUFJM0IsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMxQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNaLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUUsQ0FBQyxDQUNyQyxLQUFhLENBQUMsR0FBRyxDQUFDLENBQ3BCLENBQUE7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUMsRUFDRCxFQUVDLENBQ0YsQ0FBQTtBQUNILENBQUMifQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVQYXJhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGVQYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFHdEMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFtQixFQUFFLEtBQWE7SUFDOUQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2IsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQTtBQUNsQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBRXZFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBZ0QsS0FBMEIsRUFBRSxDQUFNLENBQUMsb0JBQW9COztJQUkzSSxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzFCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ1osb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQWEsQ0FBQyxDQUFDLElBQUksQ0FDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBRSxDQUFDLENBQUMsQ0FDL0MsQ0FBQTtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxFQUNELEVBRUMsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBMEIsRUFDMUIsQ0FBTSxDQUFDLG9CQUFvQjs7SUFJM0IsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMxQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNaLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUUsQ0FBQyxDQUNyQyxLQUFhLENBQUMsR0FBRyxDQUFDLENBQ3BCLENBQUE7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUMsRUFDRCxFQUVDLENBQ0YsQ0FBQTtBQUNILENBQUMifQ==