@effect-app/vue 4.0.0-beta.98 → 4.0.0

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 (128) hide show
  1. package/CHANGELOG.md +2707 -0
  2. package/dist/atomQuery.d.ts +120 -0
  3. package/dist/atomQuery.d.ts.map +1 -0
  4. package/dist/atomQuery.js +434 -0
  5. package/dist/commander.d.ts +318 -43
  6. package/dist/commander.d.ts.map +1 -1
  7. package/dist/commander.js +593 -81
  8. package/dist/confirm.d.ts +5 -3
  9. package/dist/confirm.d.ts.map +1 -1
  10. package/dist/confirm.js +12 -14
  11. package/dist/dependencyMetadata.d.ts +18 -0
  12. package/dist/dependencyMetadata.d.ts.map +1 -0
  13. package/dist/dependencyMetadata.js +67 -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 +5 -5
  18. package/dist/form.d.ts.map +1 -1
  19. package/dist/form.js +16 -10
  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 +204 -0
  23. package/dist/intl.d.ts +4 -4
  24. package/dist/intl.d.ts.map +1 -1
  25. package/dist/intl.js +2 -2
  26. package/dist/lib.d.ts +8 -10
  27. package/dist/lib.d.ts.map +1 -1
  28. package/dist/lib.js +37 -12
  29. package/dist/liveQueryInvalidation.d.ts +16 -0
  30. package/dist/liveQueryInvalidation.d.ts.map +1 -0
  31. package/dist/liveQueryInvalidation.js +115 -0
  32. package/dist/makeClient.d.ts +232 -109
  33. package/dist/makeClient.d.ts.map +1 -1
  34. package/dist/makeClient.js +416 -84
  35. package/dist/makeContext.d.ts.map +1 -1
  36. package/dist/makeIntl.d.ts.map +1 -1
  37. package/dist/makeUseCommand.d.ts +3 -2
  38. package/dist/makeUseCommand.d.ts.map +1 -1
  39. package/dist/makeUseCommand.js +2 -2
  40. package/dist/mutate.d.ts +110 -41
  41. package/dist/mutate.d.ts.map +1 -1
  42. package/dist/mutate.js +236 -59
  43. package/dist/query.d.ts +161 -44
  44. package/dist/query.d.ts.map +1 -1
  45. package/dist/query.js +382 -113
  46. package/dist/queryLifetime.d.ts +25 -0
  47. package/dist/queryLifetime.d.ts.map +1 -0
  48. package/dist/queryLifetime.js +54 -0
  49. package/dist/routeParams.d.ts +4 -4
  50. package/dist/routeParams.d.ts.map +1 -1
  51. package/dist/routeParams.js +4 -3
  52. package/dist/runtime.d.ts +1 -17
  53. package/dist/runtime.d.ts.map +1 -1
  54. package/dist/runtime.js +2 -38
  55. package/dist/suspense.d.ts +19 -0
  56. package/dist/suspense.d.ts.map +1 -0
  57. package/dist/suspense.js +38 -0
  58. package/dist/toast.d.ts +1 -45
  59. package/dist/toast.d.ts.map +1 -1
  60. package/dist/toast.js +2 -32
  61. package/dist/withToast.d.ts +1 -24
  62. package/dist/withToast.d.ts.map +1 -1
  63. package/dist/withToast.js +2 -45
  64. package/docs/atom-query-api-redesign.md +207 -0
  65. package/docs/mutation-command-atoms.md +40 -0
  66. package/docs/query-key-invalidation.md +107 -0
  67. package/examples/streamMutation.ts +72 -0
  68. package/package.json +35 -94
  69. package/src/atomQuery.ts +600 -0
  70. package/src/commander.ts +1064 -116
  71. package/src/confirm.ts +12 -14
  72. package/src/dependencyMetadata.ts +84 -0
  73. package/src/errorReporter.ts +65 -75
  74. package/src/form.ts +22 -15
  75. package/src/index.ts +7 -7
  76. package/src/internal/tanstackQuery.ts +308 -0
  77. package/src/intl.ts +2 -2
  78. package/src/lib.ts +51 -23
  79. package/src/liveQueryInvalidation.ts +138 -0
  80. package/src/makeClient.ts +972 -263
  81. package/src/makeIntl.ts +2 -2
  82. package/src/makeUseCommand.ts +8 -5
  83. package/src/mutate.ts +407 -154
  84. package/src/query.ts +758 -242
  85. package/src/queryLifetime.ts +74 -0
  86. package/src/routeParams.ts +7 -7
  87. package/src/runtime.ts +1 -54
  88. package/src/suspense.ts +43 -0
  89. package/src/toast.ts +1 -52
  90. package/src/withToast.ts +1 -99
  91. package/test/Mutation.test.ts +104 -17
  92. package/test/dependencyInvalidation.test.ts +444 -0
  93. package/test/dist/dependencyInvalidation.test.d.ts.map +1 -0
  94. package/test/dist/form.test.d.ts.map +1 -1
  95. package/test/dist/inactiveInvalidation.test.d.ts.map +1 -0
  96. package/test/dist/interrupt-refetch-repro.test.d.ts.map +1 -0
  97. package/test/dist/lib.test.d.ts.map +1 -0
  98. package/test/dist/liveQueryInvalidation.test.d.ts.map +1 -0
  99. package/test/dist/query-span.test.d.ts.map +1 -0
  100. package/test/dist/queryOptions.test.d.ts.map +1 -0
  101. package/test/dist/streamFinal.test.d.ts.map +1 -0
  102. package/test/dist/streamFn.test.d.ts.map +1 -0
  103. package/test/dist/stubs.d.ts +3681 -256
  104. package/test/dist/stubs.d.ts.map +1 -1
  105. package/test/dist/stubs.js +166 -25
  106. package/test/dist/suspense-regression.test.d.ts.map +1 -0
  107. package/test/dist/suspense.test.d.ts.map +1 -0
  108. package/test/form-validation-errors.test.ts +2 -1
  109. package/test/form.test.ts +2 -1
  110. package/test/inactiveInvalidation.test.ts +172 -0
  111. package/test/interrupt-refetch-repro.test.ts +625 -0
  112. package/test/lib.test.ts +240 -0
  113. package/test/liveQueryInvalidation.test.ts +108 -0
  114. package/test/makeClient.test.ts +414 -32
  115. package/test/query-span.test.ts +92 -0
  116. package/test/queryOptions.test.ts +88 -0
  117. package/test/streamFinal.test.ts +64 -0
  118. package/test/streamFn.test.ts +457 -0
  119. package/test/stubs.ts +194 -36
  120. package/test/suspense-regression.test.ts +168 -0
  121. package/test/suspense.test.ts +160 -0
  122. package/tsconfig.examples.json +20 -0
  123. package/tsconfig.json +9 -1
  124. package/tsconfig.src.json +34 -34
  125. package/tsconfig.test.json +2 -2
  126. package/vitest.config.ts +5 -5
  127. package/eslint.config.mjs +0 -24
  128. package/tsconfig.json.bak +0 -12
@@ -1,43 +1,120 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { isCancelledError } from "@tanstack/vue-query";
3
2
  import { camelCase } from "change-case";
4
- import { Effect, Exit, Struct } from "effect-app";
5
- import { extendM } from "effect-app/utils";
6
- import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
7
- import { onBeforeUnmount, ref } from "vue";
3
+ import * as Context from "effect-app/Context";
4
+ import * as Effect from "effect-app/Effect";
5
+ import * as Layer from "effect-app/Layer";
6
+ import * as S from "effect-app/Schema";
7
+ import * as Cause from "effect/Cause";
8
+ import * as Data from "effect/Data";
9
+ import * as Exit from "effect/Exit";
10
+ import * as Hash from "effect/Hash";
11
+ import * as Reactivity from "effect/reactivity/Reactivity";
12
+ import * as Struct from "effect/Struct";
13
+ import { effectScope, onBeforeUnmount, onScopeDispose, ref } from "vue";
14
+ import { invalidateAndAwait, invalidateSoft, makeAtomClientRuntime } from "./atomQuery.js";
8
15
  import { CommanderStatic } from "./commander.js";
16
+ import { makeTanstackQuery, makeTanstackQueryCacheUpdater, makeTanstackQueryClient, makeTanstackQueryInvalidator } from "./internal/tanstackQuery.js";
9
17
  import { makeUseCommand } from "./makeUseCommand.js";
10
- import { makeMutation, useMakeMutation } from "./mutate.js";
11
- import { makeQuery } from "./query.js";
18
+ import { atomQueryInvalidator, combineQueryInvalidators, makeMutation, makeStreamMutation2, useMakeMutation } from "./mutate.js";
19
+ import { atomQueryCacheUpdater, combineQueryCacheUpdaters, makeQuery, makeQueryAtom, makeQueryFamily, makeQueryNew, makeStreamQuery, makeStreamQueryAtom, makeStreamQueryFamily, makeStreamQueryNew, optionalAtomQueryCacheUpdater, setQueryCacheUpdater } from "./query.js";
12
20
  import { makeRunPromise } from "./runtime.js";
13
- const mapHandler = (handler, map) => Effect.isEffect(handler) ? map(handler, undefined) : (i) => map(handler(i), i);
14
- const _useMutation = makeMutation();
21
+ import { latestDefined } from "./suspense.js";
22
+ const useScopedSuspenseSetup = (setup) => {
23
+ const scope = effectScope();
24
+ const controller = new AbortController();
25
+ const value = scope.run(setup);
26
+ if (value === undefined) {
27
+ throw new Error("Internal Error: suspense setup scope did not initialize");
28
+ }
29
+ const isMounted = ref(true);
30
+ let stopped = false;
31
+ const stop = () => {
32
+ if (stopped)
33
+ return;
34
+ stopped = true;
35
+ isMounted.value = false;
36
+ controller.abort();
37
+ scope.stop();
38
+ };
39
+ onBeforeUnmount(stop);
40
+ onScopeDispose(stop);
41
+ return [value, isMounted, controller.signal];
42
+ };
43
+ /**
44
+ * A suspense query settled with an interrupt-only cause while its component was still MOUNTED.
45
+ *
46
+ * That combination classifies the interrupt's origin: a navigation/unmount cancel interrupts the
47
+ * suspense *fiber* (via the scope's AbortSignal) or is hidden by effect-core before it can settle —
48
+ * it never yields a still-mounted `Failure` exit. A `Failure(interrupt-only)` observed while mounted
49
+ * therefore came from the QUERY side — e.g. the server returned an RPC interrupt `Exit` (over a 200),
50
+ * or the fetch was superseded — and silencing it leaves the user staring at a blank page.
51
+ *
52
+ * Error boundaries can rely on this split: keep silencing raw interrupt-only causes (those are
53
+ * genuinely "user navigated away"), and render this error as "the request was interrupted — reload?".
54
+ */
55
+ export class SuspenseInterruptedError extends Data.TaggedError("SuspenseInterruptedError") {
56
+ get message() {
57
+ return "The request was interrupted while the page was still active";
58
+ }
59
+ }
60
+ /** Structural check (by `_tag`) so consumers compiled against older published types can detect it. */
61
+ export const isSuspenseInterruptedError = (e) => typeof e === "object" && e !== null && "_tag" in e && e._tag === "SuspenseInterruptedError";
62
+ // TODO: optimize - work from encoded shape directly
63
+ const projectHandler = (handler, successSchema, projectionSchema) => {
64
+ const encode = S.encodeUnknownEffect(successSchema);
65
+ const decode = S.decodeUnknownEffect(projectionSchema);
66
+ return (i) => handler(i).pipe(Effect.flatMap(encode), Effect.flatMap(decode));
67
+ };
68
+ const projectionSchemaHash = (schema) => String(Hash.hash(schema.ast));
69
+ const _useMutation = makeMutation(atomQueryInvalidator);
70
+ const wrapWithSpan = (self, mut) => {
71
+ const span = (eff) => Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })(eff);
72
+ return (input, options) => span(mut(input, options));
73
+ };
15
74
  /**
16
75
  * Pass an Effect or a function that returns an Effect, e.g from a client action
17
76
  * Executes query cache invalidation based on default rules or provided option.
18
77
  * adds a span with the mutation id
19
78
  */
20
- export const useMutation = (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
79
+ export const useMutation = ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
21
80
  /**
22
81
  * Pass an Effect or a function that returns an Effect, e.g from a client action
23
82
  * Executes query cache invalidation based on default rules or provided option.
24
83
  * adds a span with the mutation id
25
84
  */
26
- export const useMutationInt = () => {
27
- const _useMutation = useMakeMutation();
28
- return (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
85
+ export const useMutationInt = (queryInvalidator) => {
86
+ const _useMutation = useMakeMutation(queryInvalidator);
87
+ return ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
29
88
  };
30
89
  export class QueryImpl {
31
90
  getRuntime;
32
- constructor(getRuntime) {
91
+ constructor(getRuntime, getAtomRt, legacyUseQuery) {
33
92
  this.getRuntime = getRuntime;
34
- this.useQuery = makeQuery(this.getRuntime);
93
+ this.useQuery = legacyUseQuery ?? makeQuery(this.getRuntime, getAtomRt);
94
+ this.useQueryNew = makeQueryNew(this.getRuntime, getAtomRt);
95
+ this.useQueryAtom = makeQueryAtom(this.getRuntime, getAtomRt);
96
+ this.useQueryFamily = makeQueryFamily(this.getRuntime, getAtomRt);
97
+ this.useStreamQuery = makeStreamQuery(this.getRuntime, getAtomRt);
98
+ this.useStreamQueryFamily = makeStreamQueryFamily(this.getRuntime, getAtomRt);
99
+ this.useStreamQueryAtom = makeStreamQueryAtom(this.getRuntime, getAtomRt);
100
+ this.useStreamQueryNew = makeStreamQueryNew(this.getRuntime, getAtomRt);
35
101
  }
36
102
  /**
37
103
  * Effect results are passed to the caller, including errors.
38
104
  * @deprecated use client helpers instead (.query())
39
105
  */
40
106
  useQuery;
107
+ useQueryNew;
108
+ useQueryAtom;
109
+ useQueryFamily;
110
+ /**
111
+ * Stream results are accumulated as an array of chunks and returned as reactive state.
112
+ * @deprecated use client helpers instead (.query())
113
+ */
114
+ useStreamQuery;
115
+ useStreamQueryFamily;
116
+ useStreamQueryAtom;
117
+ useStreamQueryNew;
41
118
  /**
42
119
  * The difference with useQuery is that this function will return a Promise you can await in the Setup,
43
120
  * which ensures that either there always is a latest value, or an error occurs on load.
@@ -48,66 +125,231 @@ export class QueryImpl {
48
125
  const runPromise = makeRunPromise(this.getRuntime());
49
126
  const q = this.useQuery(self);
50
127
  return (argOrOptions, options) => {
51
- const [resultRef, latestRef, fetch, uqrt] = q(argOrOptions, { ...options, suspense: true } // experimental_prefetchInRender: true }
52
- );
53
- const isMounted = ref(true);
54
- onBeforeUnmount(() => {
55
- isMounted.value = false;
128
+ const [[resultRef, latestDefinedRef, fetch, uqrt], isMounted, signal] = useScopedSuspenseSetup(() => {
129
+ const [resultRef, latestRef, fetch, uqrt] = q(argOrOptions, options);
130
+ const latestDefinedRef = latestDefined(() => latestRef.value, "suspense");
131
+ return [resultRef, latestDefinedRef, fetch, uqrt];
56
132
  });
57
133
  // @effect-diagnostics effect/missingEffectError:off
58
134
  const eff = Effect.gen(function* () {
59
- // we want to throw on error so that we can catch cancelled error and skip handling it
60
- // what's the difference with just calling `fetch` ?
61
- // we will receive a CancelledError which we will have to ignore in our ErrorBoundary, otherwise the user ends up on an error page even if the user e.g cancelled a navigation
62
- const r = yield* Effect.tryPromise(() => uqrt.suspense()).pipe(Effect.catchTag("UnknownError", (err) => isCancelledError(err.cause)
63
- ? Effect.interrupt
64
- : Effect.die(err.cause)));
135
+ const exit = yield* uqrt.awaitResult().pipe(Effect.exit);
65
136
  if (!isMounted.value) {
66
137
  return yield* Effect.interrupt;
67
138
  }
68
- const result = resultRef.value;
69
- if (AsyncResult.isInitial(result)) {
70
- console.error("Internal Error: Promise should be resolved already", {
71
- self,
72
- argOrOptions,
73
- options,
74
- r,
75
- resultRef
76
- });
77
- return yield* Effect.die("Internal Error: Promise should be resolved already");
139
+ if (Exit.isFailure(exit)) {
140
+ // Still mounted, so this interrupt came from the query side (e.g. a server RPC interrupt
141
+ // Exit), not from navigation/unmount — surface it as a renderable typed error instead of a
142
+ // raw interrupt the error boundary would silence into a blank page.
143
+ if (Cause.hasInterruptsOnly(exit.cause)) {
144
+ return yield* new SuspenseInterruptedError({ originalCause: exit.cause, source: "suspense" });
145
+ }
146
+ return yield* Exit.failCause(exit.cause);
147
+ }
148
+ return [resultRef, latestDefinedRef, fetch, uqrt];
149
+ });
150
+ return runPromise(eff, { signal });
151
+ };
152
+ };
153
+ useSuspenseQueryNew = (self) => {
154
+ const runPromise = makeRunPromise(this.getRuntime());
155
+ const q = this.useQueryNew(self);
156
+ return (argOrOptions, options) => {
157
+ const [{ view, data }, isMounted, signal] = useScopedSuspenseSetup(() => {
158
+ const view = q(argOrOptions, options);
159
+ const data = latestDefined(() => view.data.value, "suspenseNew");
160
+ return { view, data };
161
+ });
162
+ // @effect-diagnostics effect/missingEffectError:off
163
+ const eff = Effect.gen(function* () {
164
+ const exit = yield* view.awaitResult().pipe(Effect.exit);
165
+ if (!isMounted.value) {
166
+ return yield* Effect.interrupt;
78
167
  }
79
- if (AsyncResult.isFailure(result)) {
80
- return yield* Exit.failCause(result.cause);
168
+ if (Exit.isFailure(exit)) {
169
+ // Still mounted → query-side interrupt (see SuspenseInterruptedError) — render, don't silence.
170
+ if (Cause.hasInterruptsOnly(exit.cause)) {
171
+ return yield* new SuspenseInterruptedError({ originalCause: exit.cause, source: "suspenseNew" });
172
+ }
173
+ return yield* Exit.failCause(exit.cause);
81
174
  }
82
- return [resultRef, latestRef, fetch, uqrt];
175
+ const fetch = (_options) => view.refetch();
176
+ const handle = {
177
+ awaitResult: view.awaitResult,
178
+ refetch: view.refetch,
179
+ refresh: view.refresh,
180
+ registry: view.registry,
181
+ atom: view.atom
182
+ };
183
+ return Object.assign([
184
+ view.result,
185
+ data,
186
+ fetch,
187
+ handle
188
+ ], {
189
+ ...view,
190
+ data
191
+ });
83
192
  });
84
- return runPromise(eff);
193
+ return runPromise(eff, { signal });
85
194
  };
86
195
  };
87
196
  }
88
197
  // somehow mrt.runtimeEffect doesnt work sync, but this workaround works fine? not sure why though as the layers are generally only sync
89
198
  const managedRuntimeRt = (mrt) => mrt.runSync(Effect.context());
199
+ const makeResolvedAtomQueryInvalidator = (getContext) => {
200
+ let reactivity;
201
+ const getReactivity = () => {
202
+ if (reactivity !== undefined)
203
+ return reactivity;
204
+ const service = Context.getOrUndefined(getContext(), Reactivity.Reactivity);
205
+ if (service === undefined) {
206
+ throw new Error("Reactivity service is missing from the client runtime");
207
+ }
208
+ return reactivity = service;
209
+ };
210
+ return {
211
+ invalidateAndAwait: (keys) => invalidateAndAwait(keys).pipe(Effect.provideService(Reactivity.Reactivity, getReactivity())),
212
+ invalidateSoft: (keys) => invalidateSoft(keys).pipe(Effect.provideService(Reactivity.Reactivity, getReactivity()))
213
+ };
214
+ };
90
215
  export const makeClient = (
91
216
  // global, but only accessible after startup has completed
92
- getBaseMrt, clientFor_, rtHooks) => {
217
+ getBaseMrt, clientFor_, rtHooks, options) => {
93
218
  const getBaseRt = () => managedRuntimeRt(getBaseMrt());
94
219
  const makeCommand = makeUseCommand(rtHooks);
95
220
  let cmd;
96
221
  const useCommand = () => cmd ??= getBaseMrt().runSync(makeCommand);
222
+ // one AtomRuntime for the query engine, built lazily from the live app context;
223
+ // shares the ManagedRuntime memoMap so layers + Reactivity are the same instances.
224
+ let atomRt;
225
+ const getAtomRt = () => (atomRt ??= makeAtomClientRuntime(() => Layer.succeedContext(getBaseRt()), getBaseMrt().memoMap));
226
+ const legacyQueryEngine = options?.legacyQueryEngine ?? "tanstack";
227
+ let tanstackQueryClient;
228
+ const getTanstackQueryClient = () => tanstackQueryClient ??= makeTanstackQueryClient();
229
+ const atomInvalidator = makeResolvedAtomQueryInvalidator(getBaseRt);
230
+ const queryInvalidator = legacyQueryEngine === "tanstack"
231
+ ? combineQueryInvalidators(atomInvalidator, makeTanstackQueryInvalidator(getTanstackQueryClient()))
232
+ : atomInvalidator;
233
+ setQueryCacheUpdater(legacyQueryEngine === "tanstack"
234
+ ? combineQueryCacheUpdaters(makeTanstackQueryCacheUpdater(getTanstackQueryClient()), optionalAtomQueryCacheUpdater)
235
+ : atomQueryCacheUpdater);
97
236
  let m;
98
- const useMutation = () => m ??= useMutationInt();
99
- const query = new QueryImpl(getBaseRt);
237
+ const useMutation = () => m ??= useMutationInt(queryInvalidator);
238
+ let sm2;
239
+ const useStreamMutation2 = () => sm2 ??= makeStreamMutation2(queryInvalidator);
240
+ const legacyUseQuery = legacyQueryEngine === "tanstack"
241
+ ? makeTanstackQuery(getBaseRt, getTanstackQueryClient())
242
+ : undefined;
243
+ const query = new QueryImpl(getBaseRt, getAtomRt, legacyUseQuery);
100
244
  const useQuery = query.useQuery;
245
+ const useQueryNew = query.useQueryNew;
246
+ const useQueryAtom = query.useQueryAtom;
247
+ const useQueryFamily = query.useQueryFamily;
101
248
  const useSuspenseQuery = query.useSuspenseQuery;
249
+ const useSuspenseQueryNew = query.useSuspenseQueryNew;
250
+ const useStreamQuery = query.useStreamQuery;
251
+ const useStreamQueryFamily = query.useStreamQueryFamily;
252
+ const useStreamQueryAtom = query.useStreamQueryAtom;
253
+ const useStreamQueryNew = query.useStreamQueryNew;
254
+ const isQueryHandler = (handler) => handler.Request.type === "query" && !handler.Request.stream;
255
+ const isStreamQueryHandler = (handler) => handler.Request.type === "query" && handler.Request.stream;
256
+ const queryHelpersFor = (handler) => ({
257
+ family: useQueryFamily(handler),
258
+ atom: useQueryAtom(handler),
259
+ query: useQuery(handler),
260
+ queryNew: useQueryNew(handler),
261
+ suspense: useSuspenseQuery(handler),
262
+ suspenseNew: useSuspenseQueryNew(handler)
263
+ });
264
+ const streamQueryHelpersFor = (handler) => ({
265
+ family: useStreamQueryFamily(handler),
266
+ atom: useStreamQueryAtom(handler),
267
+ query: useStreamQuery(handler),
268
+ queryNew: useStreamQueryNew(handler)
269
+ });
270
+ const projectQueryFor = (handler) => (projectionSchema) => {
271
+ const successSchema = handler.Request.success;
272
+ const projectionHash = projectionSchemaHash(projectionSchema);
273
+ const projected = projectHandler(handler.handler, successSchema, projectionSchema);
274
+ const projectedHandler = {
275
+ handler: projected,
276
+ id: handler.id,
277
+ Request: handler.Request,
278
+ queryKeyProjectionHash: projectionHash
279
+ };
280
+ if (handler.options) {
281
+ return {
282
+ request: projected,
283
+ ...queryHelpersFor({ ...projectedHandler, options: handler.options })
284
+ };
285
+ }
286
+ return {
287
+ request: projected,
288
+ ...queryHelpersFor(projectedHandler)
289
+ };
290
+ };
291
+ const mergeInvalidation = (a, b) => {
292
+ if (!a && !b) {
293
+ return undefined;
294
+ }
295
+ return (defaultKey, name, input, output) => [
296
+ ...(a?.(defaultKey, name, input, output) ?? []),
297
+ ...(b?.(defaultKey, name, input, output) ?? [])
298
+ ];
299
+ };
300
+ const withDefaultInvalidation = (mut, defaultInvalidation) => {
301
+ if (!defaultInvalidation)
302
+ return mut;
303
+ const apply = (callerOpts) => ({
304
+ ...callerOpts,
305
+ queryInvalidation: callerOpts?.queryInvalidation
306
+ ? mergeInvalidation(defaultInvalidation, callerOpts.queryInvalidation)
307
+ : defaultInvalidation
308
+ });
309
+ return (input, callerOpts) => mut(input, apply(callerOpts));
310
+ };
311
+ const makeQueryResources = (resources) => {
312
+ if (!resources) {
313
+ return {};
314
+ }
315
+ return resources;
316
+ };
102
317
  const mapQuery = (client) => {
103
318
  const queries = Struct.keys(client).reduce((acc, key) => {
104
- ;
105
- acc[camelCase(key) + "Query"] = Object.assign(useQuery(client[key]), {
106
- id: client[key].id
107
- });
108
- acc[camelCase(key) + "SuspenseQuery"] = Object.assign(useSuspenseQuery(client[key]), {
109
- id: client[key].id
110
- });
319
+ const handler = client[key];
320
+ if (isQueryHandler(handler)) {
321
+ Object.assign(acc, {
322
+ [camelCase(key) + "QueryFamily"]: Object.assign(useQueryFamily(handler), {
323
+ id: client[key].id
324
+ })
325
+ });
326
+ acc[camelCase(key) + "Query"] = Object.assign(useQuery(handler), {
327
+ id: client[key].id
328
+ });
329
+ acc[camelCase(key) + "QueryNew"] = Object.assign(useQueryNew(handler), {
330
+ id: client[key].id
331
+ });
332
+ acc[camelCase(key) + "SuspenseQuery"] = Object.assign(useSuspenseQuery(handler), {
333
+ id: client[key].id
334
+ });
335
+ acc[camelCase(key) + "SuspenseQueryNew"] = Object.assign(useSuspenseQueryNew(handler), {
336
+ id: client[key].id
337
+ });
338
+ }
339
+ else if (isStreamQueryHandler(handler)) {
340
+ const streamHelpers = streamQueryHelpersFor(handler);
341
+ Object.assign(acc, {
342
+ [camelCase(key) + "QueryFamily"]: Object.assign(streamHelpers.family, {
343
+ id: client[key].id
344
+ }),
345
+ [camelCase(key) + "Query"]: Object.assign(streamHelpers.query, {
346
+ id: client[key].id
347
+ }),
348
+ [camelCase(key) + "QueryNew"]: Object.assign(streamHelpers.queryNew, {
349
+ id: client[key].id
350
+ })
351
+ });
352
+ }
111
353
  return acc;
112
354
  }, {});
113
355
  return queries;
@@ -115,66 +357,154 @@ getBaseMrt, clientFor_, rtHooks) => {
115
357
  const mapRequest = (client) => {
116
358
  const Command = useCommand();
117
359
  const mutations = Struct.keys(client).reduce((acc, key) => {
360
+ if (!(client[key].Request.type === "command" && !client[key].Request.stream)) {
361
+ return acc;
362
+ }
118
363
  const mut = client[key].handler;
119
- const fn = Command.fn(client[key].id);
120
- const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
121
- acc[camelCase(key) + "Request"] = Object.assign(mut, fn, // to get the i18n key etc.
122
- { wrap, fn });
364
+ const request = mut;
365
+ const fn = (options) => Command.fn(client[key].id, options);
366
+ const wrap = (options) => Command.wrap({ mutate: request, id: client[key].id }, options);
367
+ acc[camelCase(key) + "Request"] = Object.assign(mut, Command.fn(client[key].id), // to get the i18n key etc.
368
+ { wrap, fn, request });
123
369
  return acc;
124
370
  }, {});
125
371
  return mutations;
126
372
  };
127
- const mapMutation = (client) => {
373
+ const mapMutation = (client, queryInvalidation, invalidationResources) => {
128
374
  const Command = useCommand();
129
375
  const mutation = useMutation();
376
+ const invalidation = queryInvalidation?.(client);
377
+ const queryResources = makeQueryResources(invalidationResources);
130
378
  const mutations = Struct.keys(client).reduce((acc, key) => {
131
- const mut = mutation(client[key]);
132
- const fn = Command.fn(client[key].id);
133
- const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
134
- acc[camelCase(key) + "Mutation"] = Object.assign(mut, fn, // to get the i18n key etc.
135
- { wrap, fn });
379
+ if (!(client[key].Request.type === "command" && !client[key].Request.stream)) {
380
+ return acc;
381
+ }
382
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
383
+ const fromRequest = fromRequestConfig
384
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
385
+ : undefined;
386
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
387
+ const makeProjectedMutation = (handler) => {
388
+ const mut = withDefaultInvalidation(mutation(handler), mergedInvalidation);
389
+ return Object.assign(mut, {
390
+ wrap: (options) => Command.wrap({ mutate: mut, id: client[key].id }, options),
391
+ fn: (options) => Command.fn(client[key].id, options),
392
+ project: (projectionSchema) => {
393
+ const projected = {
394
+ ...handler,
395
+ handler: projectHandler(handler.handler, client[key].Request.success, projectionSchema)
396
+ };
397
+ return makeProjectedMutation(projected);
398
+ }
399
+ });
400
+ };
401
+ acc[camelCase(key) + "Mutation"] = makeProjectedMutation(client[key]);
136
402
  return acc;
137
403
  }, {});
138
404
  return mutations;
139
405
  };
140
406
  // make available .query, .suspense and .mutate for each operation
141
407
  // and a .helpers with all mutations and queries
142
- const mapClient = (queryInvalidation) => (client) => {
408
+ const mapClient = (queryInvalidation, invalidationResources) => (client) => {
143
409
  const Command = useCommand();
144
410
  const mutation = useMutation();
145
411
  const invalidation = queryInvalidation?.(client);
412
+ const queryResources = makeQueryResources(invalidationResources);
146
413
  const extended = Struct.keys(client).reduce((acc, key) => {
414
+ const handler = client[key];
415
+ const requestType = handler.Request.type;
416
+ const isStream = handler.Request.stream;
147
417
  const fn = Command.fn(client[key].id);
148
- const mutate = extendM(mutation(client[key], invalidation?.[key] ? { queryInvalidation: invalidation[key] } : undefined), (mutate) => Object.assign(mutate, fn, // to get the i18n key etc.
149
- {
150
- wrap: Command.wrap({ mutate: Effect.isEffect(mutate) ? () => mutate : mutate, id: client[key].id }),
151
- fn
152
- }));
153
- const h_ = client[key].handler;
154
- const h = Effect.isEffect(h_)
155
- ? () => h_
156
- : (...args) => h_(...args);
157
- acc[key] = Object.assign(h, client[key], fn, // to get the i18n key etc.
158
- {
159
- mutate,
160
- query: useQuery(client[key]),
161
- suspense: useSuspenseQuery(client[key]),
162
- wrap: Command.wrap({ mutate: h, id: client[key].id }),
163
- fn
164
- });
418
+ const h_ = handler.handler;
419
+ const request = h_;
420
+ acc[key] = Object.assign(isQueryHandler(handler)
421
+ ? {
422
+ ...handler,
423
+ request,
424
+ ...queryHelpersFor(handler),
425
+ project: projectQueryFor(handler)
426
+ }
427
+ : isStreamQueryHandler(handler)
428
+ ? {
429
+ ...client[key],
430
+ request,
431
+ ...streamQueryHelpersFor(handler)
432
+ }
433
+ : requestType === "command" && isStream
434
+ ? (() => {
435
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
436
+ const fromRequest = fromRequestConfig
437
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
438
+ : undefined;
439
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
440
+ const streamCmd = useCommand();
441
+ return {
442
+ ...client[key],
443
+ request,
444
+ query: useStreamQuery(client[key]),
445
+ fn: (options) => streamCmd.streamFn(client[key].id, options),
446
+ mutate: (() => {
447
+ const sm2Act = useStreamMutation2()(client[key], mergedInvalidation);
448
+ const sm2Handler = (input, _ctx) => sm2Act(input);
449
+ return Object.assign(sm2Act, {
450
+ id: client[key].id,
451
+ wrap: (options) => streamCmd.streamWrap(sm2Handler, client[key].id, options)
452
+ });
453
+ })()
454
+ };
455
+ })()
456
+ : {
457
+ mutate: ((handler) => {
458
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
459
+ const fromRequest = fromRequestConfig
460
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output))
461
+ : undefined;
462
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
463
+ const makeProjectedMutation = (h) => {
464
+ const mutate = withDefaultInvalidation(mutation(h), mergedInvalidation);
465
+ return Object.assign(mutate, {
466
+ wrap: (options) => Command.wrap({
467
+ mutate,
468
+ id: client[key].id
469
+ }, options),
470
+ fn: (options) => Command.fn(client[key].id, options),
471
+ project: (projectionSchema) => {
472
+ const projected = {
473
+ ...h,
474
+ handler: projectHandler(h.handler, client[key].Request.success, projectionSchema)
475
+ };
476
+ return makeProjectedMutation(projected);
477
+ }
478
+ });
479
+ };
480
+ return makeProjectedMutation(handler);
481
+ })(client[key]),
482
+ ...client[key],
483
+ ...fn, // to get the i18n key etc.
484
+ request,
485
+ fn: (options) => Command.fn(client[key].id, options),
486
+ wrap: (options) => Command.wrap({ mutate: h_, id: client[key].id }, options)
487
+ });
165
488
  return acc;
166
489
  }, {});
167
- return Object.assign(extended, { helpers: { ...mapRequest(client), ...mapMutation(client), ...mapQuery(client) } });
490
+ return Object.assign(extended, {
491
+ helpers: {
492
+ ...mapRequest(client),
493
+ ...mapMutation(client, queryInvalidation, invalidationResources),
494
+ ...mapQuery(client)
495
+ }
496
+ });
168
497
  };
169
498
  // TODO: Clean up this delay initialisation messs
170
499
  // TODO; invalidateQueries should perhaps be configured in the Request impl themselves?
171
- const clientFor__ = (m, queryInvalidation) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation))));
500
+ const clientFor__ = (m, queryInvalidation, invalidationResources) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation, invalidationResources))));
172
501
  // delay client creation until first access
173
502
  // the idea is that we don't need the useNuxtApp().$runtime (only available at later initialisation stage)
174
503
  // until we are at a place where it is available..
175
- const clientFor = (m, queryInvalidation) => {
504
+ const clientFor = (m, ...args) => {
505
+ const [queryInvalidation, invalidationResources] = args;
176
506
  let client = undefined;
177
- const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation));
507
+ const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation, invalidationResources));
178
508
  // initialize on first use..
179
509
  const proxy = Struct.keys(m).concat(["helpers"]).reduce((acc, key) => {
180
510
  Object.defineProperty(acc, key, {
@@ -195,6 +525,7 @@ getBaseMrt, clientFor_, rtHooks) => {
195
525
  // delay initialisation until first use...
196
526
  fn: (...args) => useCommand().fn(...args),
197
527
  wrap: (...args) => useCommand().wrap(...args),
528
+ streamFn: (...args) => useCommand().streamFn(...args),
198
529
  alt: (...args) => useCommand().alt(...args),
199
530
  alt2: (...args) => useCommand().alt2(...args)
200
531
  },
@@ -203,7 +534,8 @@ getBaseMrt, clientFor_, rtHooks) => {
203
534
  return {
204
535
  Command,
205
536
  useCommand,
206
- clientFor
537
+ clientFor,
538
+ tanstackQueryClient: getTanstackQueryClient()
207
539
  };
208
540
  };
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQXVELGdCQUFnQixFQUEwRSxNQUFNLHFCQUFxQixDQUFBO0FBQ25MLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkMsT0FBTyxFQUFnQixNQUFNLEVBQUUsSUFBSSxFQUFtQyxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTFDLE9BQU8sS0FBSyxXQUFXLE1BQU0sd0NBQXdDLENBQUE7QUFDckUsT0FBTyxFQUFvQixlQUFlLEVBQUUsR0FBRyxFQUFvQixNQUFNLEtBQUssQ0FBQTtBQUM5RSxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhFLE9BQU8sRUFBMEIsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBNEIsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3JGLE9BQU8sRUFBMkMsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFHN0MsTUFBTSxVQUFVLEdBQUcsQ0FDakIsT0FBb0UsRUFDcEUsR0FBc0UsRUFDdEUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQXdKN0YsTUFBTSxZQUFZLEdBQUcsWUFBWSxFQUFFLENBQUE7QUFFbkM7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
541
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBS3ZDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFDdEMsT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFDbkMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFFbkMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFHbkMsT0FBTyxLQUFLLFVBQVUsTUFBTSw4QkFBOEIsQ0FBQTtBQUUxRCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQW9CLFdBQVcsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBb0IsTUFBTSxLQUFLLENBQUE7QUFDM0csT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNsSCxPQUFPLEVBQWtCLGVBQWUsRUFBaUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUVySixPQUFPLEVBQTBCLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBMEIsWUFBWSxFQUFFLG1CQUFt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