@effect-app/vue 4.0.0-beta.18 → 4.0.0-beta.180

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 (100) hide show
  1. package/CHANGELOG.md +1224 -0
  2. package/dist/commander.d.ts +370 -0
  3. package/dist/commander.d.ts.map +1 -0
  4. package/dist/commander.js +591 -0
  5. package/dist/confirm.d.ts +19 -0
  6. package/dist/confirm.d.ts.map +1 -0
  7. package/dist/confirm.js +24 -0
  8. package/dist/errorReporter.d.ts +4 -4
  9. package/dist/errorReporter.d.ts.map +1 -1
  10. package/dist/errorReporter.js +12 -18
  11. package/dist/form.d.ts +13 -4
  12. package/dist/form.d.ts.map +1 -1
  13. package/dist/form.js +41 -12
  14. package/dist/index.d.ts +1 -1
  15. package/dist/intl.d.ts +15 -0
  16. package/dist/intl.d.ts.map +1 -0
  17. package/dist/intl.js +9 -0
  18. package/dist/lib.d.ts +6 -8
  19. package/dist/lib.d.ts.map +1 -1
  20. package/dist/lib.js +34 -7
  21. package/dist/makeClient.d.ts +148 -290
  22. package/dist/makeClient.d.ts.map +1 -1
  23. package/dist/makeClient.js +205 -361
  24. package/dist/makeContext.d.ts +1 -1
  25. package/dist/makeContext.d.ts.map +1 -1
  26. package/dist/makeIntl.d.ts +1 -1
  27. package/dist/makeIntl.d.ts.map +1 -1
  28. package/dist/makeUseCommand.d.ts +8 -0
  29. package/dist/makeUseCommand.d.ts.map +1 -0
  30. package/dist/makeUseCommand.js +13 -0
  31. package/dist/mutate.d.ts +57 -25
  32. package/dist/mutate.d.ts.map +1 -1
  33. package/dist/mutate.js +160 -33
  34. package/dist/query.d.ts +11 -15
  35. package/dist/query.d.ts.map +1 -1
  36. package/dist/query.js +19 -27
  37. package/dist/routeParams.d.ts +1 -1
  38. package/dist/runtime.d.ts +5 -2
  39. package/dist/runtime.d.ts.map +1 -1
  40. package/dist/runtime.js +27 -17
  41. package/dist/toast.d.ts +46 -0
  42. package/dist/toast.d.ts.map +1 -0
  43. package/dist/toast.js +32 -0
  44. package/dist/withToast.d.ts +26 -0
  45. package/dist/withToast.d.ts.map +1 -0
  46. package/dist/withToast.js +49 -0
  47. package/eslint.config.mjs +2 -2
  48. package/examples/streamMutation.ts +83 -0
  49. package/package.json +48 -48
  50. package/src/{experimental/commander.ts → commander.ts} +930 -255
  51. package/src/{experimental/confirm.ts → confirm.ts} +10 -14
  52. package/src/errorReporter.ts +62 -74
  53. package/src/form.ts +55 -16
  54. package/src/intl.ts +12 -0
  55. package/src/lib.ts +46 -13
  56. package/src/makeClient.ts +570 -1038
  57. package/src/{experimental/makeUseCommand.ts → makeUseCommand.ts} +3 -3
  58. package/src/mutate.ts +306 -72
  59. package/src/query.ts +39 -50
  60. package/src/runtime.ts +39 -18
  61. package/src/{experimental/toast.ts → toast.ts} +11 -25
  62. package/src/{experimental/withToast.ts → withToast.ts} +15 -6
  63. package/test/Mutation.test.ts +130 -10
  64. package/test/dist/form.test.d.ts.map +1 -1
  65. package/test/dist/lib.test.d.ts.map +1 -0
  66. package/test/dist/streamFinal.test.d.ts.map +1 -0
  67. package/test/dist/stubs.d.ts +3144 -117
  68. package/test/dist/stubs.d.ts.map +1 -1
  69. package/test/dist/stubs.js +132 -25
  70. package/test/form-validation-errors.test.ts +23 -19
  71. package/test/form.test.ts +20 -2
  72. package/test/lib.test.ts +240 -0
  73. package/test/makeClient.test.ts +241 -38
  74. package/test/streamFinal.test.ts +110 -0
  75. package/test/stubs.ts +172 -42
  76. package/tsconfig.examples.json +20 -0
  77. package/tsconfig.json +0 -1
  78. package/tsconfig.json.bak +5 -2
  79. package/tsconfig.src.json +34 -34
  80. package/tsconfig.test.json +2 -2
  81. package/vitest.config.ts +5 -5
  82. package/dist/experimental/commander.d.ts +0 -359
  83. package/dist/experimental/commander.d.ts.map +0 -1
  84. package/dist/experimental/commander.js +0 -557
  85. package/dist/experimental/confirm.d.ts +0 -19
  86. package/dist/experimental/confirm.d.ts.map +0 -1
  87. package/dist/experimental/confirm.js +0 -28
  88. package/dist/experimental/intl.d.ts +0 -16
  89. package/dist/experimental/intl.d.ts.map +0 -1
  90. package/dist/experimental/intl.js +0 -5
  91. package/dist/experimental/makeUseCommand.d.ts +0 -8
  92. package/dist/experimental/makeUseCommand.d.ts.map +0 -1
  93. package/dist/experimental/makeUseCommand.js +0 -13
  94. package/dist/experimental/toast.d.ts +0 -47
  95. package/dist/experimental/toast.d.ts.map +0 -1
  96. package/dist/experimental/toast.js +0 -41
  97. package/dist/experimental/withToast.d.ts +0 -25
  98. package/dist/experimental/withToast.d.ts.map +0 -1
  99. package/dist/experimental/withToast.js +0 -45
  100. package/src/experimental/intl.ts +0 -9
@@ -1,69 +1,35 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { isCancelledError } from "@tanstack/vue-query";
3
3
  import { camelCase } from "change-case";
4
- import { Cause, Data, Effect, Exit, Layer, Match, Option, S, ServiceMap, Struct } from "effect-app";
5
- import { ErrorSilenced } from "effect-app/client/errors";
6
- import { constant, identity, pipe, tuple } from "effect-app/Function";
7
- import { OperationSuccess } from "effect-app/Operations";
8
- import { dropUndefinedT, extendM } from "effect-app/utils";
4
+ import { Effect, Exit, Hash, S, Struct } from "effect-app";
9
5
  import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
10
- import { computed, onBeforeUnmount, ref, watch } from "vue";
11
- import { reportMessage } from "./errorReporter.js";
12
- import { CommanderStatic } from "./experimental/commander.js";
13
- import { I18n } from "./experimental/intl.js";
14
- import { makeUseCommand } from "./experimental/makeUseCommand.js";
15
- import { Toast } from "./experimental/toast.js";
16
- import { buildFieldInfoFromFieldsRoot } from "./form.js";
17
- import { reportRuntimeError } from "./lib.js";
18
- import { asResult, makeMutation, mutationResultToVue, useMakeMutation } from "./mutate.js";
6
+ import { onBeforeUnmount, ref } from "vue";
7
+ import { CommanderStatic } from "./commander.js";
8
+ import { makeUseCommand } from "./makeUseCommand.js";
9
+ import { makeMutation, makeStreamMutation, useMakeMutation } from "./mutate.js";
19
10
  import { makeQuery } from "./query.js";
11
+ import { makeRunPromise } from "./runtime.js";
20
12
  const mapHandler = (handler, map) => Effect.isEffect(handler) ? map(handler, undefined) : (i) => map(handler(i), i);
21
- /**
22
- * Use this after handling an error yourself, still continueing on the Error track, but the error will not be reported.
23
- */
24
- export class SuppressErrors extends Data.TaggedError("SuppressErrors") {
25
- [ErrorSilenced] = true;
26
- }
27
- export const suppressToast = constant(Effect.succeed(undefined));
28
- /** handles errors as specified and reports defects */
29
- function handleRequest(f, id, action, options) {
30
- const handleEffect = (i) => (self) => self.pipe(Effect.tap(Effect.matchCauseEffect({
31
- onSuccess: (r) => options.onSuccess(r, i),
32
- onFailure: (cause) => Effect.gen(function* () {
33
- if (Cause.hasInterruptsOnly(cause)) {
34
- console.info(`Interrupted while trying to ${action}`);
35
- return;
36
- }
37
- const fail = Cause.findErrorOption(cause);
38
- if (Option.isSome(fail)) {
39
- if (fail.value._tag === "SuppressErrors") {
40
- console.info(`Suppressed error trying to ${action}`, fail.value);
41
- return;
42
- }
43
- const message = `Failure trying to ${action}`;
44
- yield* reportMessage(message, { action, error: fail.value });
45
- yield* options.onFail(fail.value, i);
46
- return;
47
- }
48
- const extra = {
49
- action,
50
- message: `Unexpected Error trying to ${action}`
51
- };
52
- yield* reportRuntimeError(cause, extra);
53
- yield* options.onDefect(cause, i);
54
- })
55
- })), Effect.withSpan(`mutation ${id}`, {}, { captureStackTrace: false }));
56
- return Object.assign(Effect.isEffect(f)
57
- ? pipe(f, handleEffect(void 0))
58
- : (i) => pipe(f(i), handleEffect(i)), { action });
59
- }
13
+ // TODO: optimize - work from encoded shape directly
14
+ const projectHandler = (handler, successSchema, projectionSchema) => {
15
+ const encode = S.encodeEffect(successSchema);
16
+ const decode = S.decodeEffectConcurrently(projectionSchema);
17
+ return mapHandler(handler, (self) => self.pipe(Effect.flatMap(encode), Effect.flatMap(decode)));
18
+ };
19
+ const projectionSchemaHash = (schema) => String(Hash.hash(schema.ast));
60
20
  const _useMutation = makeMutation();
21
+ const wrapWithSpan = (self, mut) => {
22
+ const span = (eff) => Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })(eff);
23
+ return Effect.isEffect(self.handler)
24
+ ? (options) => span(mut(options))
25
+ : (input, options) => span(mut(input, options));
26
+ };
61
27
  /**
62
28
  * Pass an Effect or a function that returns an Effect, e.g from a client action
63
29
  * Executes query cache invalidation based on default rules or provided option.
64
30
  * adds a span with the mutation id
65
31
  */
66
- export const useMutation = (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
32
+ export const useMutation = ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
67
33
  /**
68
34
  * Pass an Effect or a function that returns an Effect, e.g from a client action
69
35
  * Executes query cache invalidation based on default rules or provided option.
@@ -71,255 +37,8 @@ export const useMutation = (self, options) => Object.assign(mapHandler(_useMutat
71
37
  */
72
38
  export const useMutationInt = () => {
73
39
  const _useMutation = useMakeMutation();
74
- return (self, options) => Object.assign(mapHandler(_useMutation(self, options), Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false })), { id: self.id });
40
+ return ((self) => Object.assign(wrapWithSpan(self, _useMutation(self)), { id: self.id }));
75
41
  };
76
- export class LegacyMutationImpl {
77
- getRuntime;
78
- toast;
79
- intl;
80
- constructor(getRuntime, toast, intl) {
81
- this.getRuntime = getRuntime;
82
- this.toast = toast;
83
- this.intl = intl;
84
- }
85
- /**
86
- * Effect results are converted to Exit, so errors are ignored by default.
87
- * you should use the result ref to render errors!
88
- * @deprecated use `Command.fn` and friends instead
89
- */
90
- useSafeMutation = (self, options) => {
91
- const unsafe = _useMutation(self, options);
92
- const mh = options?.mapHandler ?? identity;
93
- const [a, b] = asResult(mapHandler(mapHandler(unsafe, mh), Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause))));
94
- return [
95
- a,
96
- mapHandler(b, Effect.withSpan(`mutation ${self.id}`, {}, { captureStackTrace: false }))
97
- ];
98
- };
99
- /** handles errors as toasts and reports defects
100
- * @deprecated use `Command.fn` and friends instead
101
- */
102
- useHandleRequestWithToast = () => {
103
- // eslint-disable-next-line @typescript-eslint/no-this-alias
104
- const self = this;
105
- return handleRequestWithToast;
106
- /**
107
- * Pass a function that returns a Promise.
108
- * Returns an execution function which reports errors as Toast.
109
- */
110
- function handleRequestWithToast(f, id, action, options = {}) {
111
- const actionMessage = self.intl.formatMessage({ id: `action.${action}`, defaultMessage: action });
112
- const defaultWarnMessage = self.intl.formatMessage({ id: "handle.with_warnings" }, { action: actionMessage });
113
- const defaultSuccessMessage = self.intl.formatMessage({ id: "handle.success" }, { action: actionMessage });
114
- const defaultErrorMessage = self.intl.formatMessage({ id: "handle.with_errors" }, { action: actionMessage });
115
- return handleRequest(f, id, action, {
116
- onSuccess: Effect.fnUntraced(function* (a, i) {
117
- const message = options.successMessage ? yield* options.successMessage(a, i) : defaultSuccessMessage
118
- + (S.is(OperationSuccess)(a) && a.message
119
- ? "\n" + a.message
120
- : "");
121
- if (message) {
122
- yield* self.toast.success(message);
123
- }
124
- }),
125
- onFail: Effect.fnUntraced(function* (e, i) {
126
- if (!options.failMessage && e._tag === "OperationFailure") {
127
- yield* self.toast.warning(defaultWarnMessage + e.message
128
- ? "\n" + e.message
129
- : "");
130
- return;
131
- }
132
- const message = options.failMessage
133
- ? yield* options.failMessage(e, i)
134
- : `${defaultErrorMessage}:\n` + renderError(e);
135
- if (message) {
136
- yield* self.toast.error(message);
137
- }
138
- }),
139
- onDefect: Effect.fnUntraced(function* (cause, i) {
140
- const message = options.defectMessage
141
- ? yield* options.defectMessage(cause, i)
142
- : self.intl.formatMessage({ id: "handle.unexpected_error" }, {
143
- action: actionMessage,
144
- error: Cause.pretty(cause)
145
- });
146
- if (message) {
147
- yield* self.toast.error(message);
148
- }
149
- })
150
- });
151
- }
152
- function renderError(e) {
153
- return Match.value(e).pipe(Match.tags({
154
- // HttpErrorRequest: e =>
155
- // this.intl.value.formatMessage(
156
- // { id: "handle.request_error" },
157
- // { error: `${e.error}` },
158
- // ),
159
- // HttpErrorResponse: e =>
160
- // e.response.status >= 500 ||
161
- // e.response.body._tag !== "Some" ||
162
- // !e.response.body.value
163
- // ? this.intl.value.formatMessage(
164
- // { id: "handle.error_response" },
165
- // {
166
- // error: `${
167
- // e.response.body._tag === "Some" && e.response.body.value
168
- // ? parseError(e.response.body.value)
169
- // : "Unknown"
170
- // } (${e.response.status})`,
171
- // },
172
- // )
173
- // : this.intl.value.formatMessage(
174
- // { id: "handle.unexpected_error" },
175
- // {
176
- // error:
177
- // JSON.stringify(e.response.body, undefined, 2) +
178
- // "( " +
179
- // e.response.status +
180
- // ")",
181
- // },
182
- // ),
183
- // ResponseError: e =>
184
- // this.intl.value.formatMessage(
185
- // { id: "handle.response_error" },
186
- // { error: `${e.error}` },
187
- // ),
188
- SchemaError: (e) => {
189
- console.warn(e.toString());
190
- return self.intl.formatMessage({ id: "validation.failed" });
191
- }
192
- }), Match.orElse((e) => `${e.message ?? e._tag ?? e}`));
193
- }
194
- };
195
- /**
196
- * Pass a function that returns an Effect, e.g from a client action, give it a name.
197
- * Returns a tuple with raw Result and execution function which reports success and errors as Toast.
198
- * @deprecated use `Command.fn` and friends instead
199
- */
200
- useAndHandleMutationResult = (self, action, options) => {
201
- const handleRequestWithToast = this.useHandleRequestWithToast();
202
- const handler = self.handler;
203
- const unsafe = _useMutation({
204
- ...self,
205
- handler: Effect.isEffect(handler)
206
- ? pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(handler))
207
- : (...args) => pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(handler(...args)))
208
- }, options ? dropUndefinedT(options) : undefined);
209
- const mh = options?.mapHandler ?? identity;
210
- // Effect.tapDefect(reportRuntimeError) handled in toast handler,
211
- const [a, b] = asResult(mapHandler(unsafe, mh));
212
- return tuple(a, handleRequestWithToast(b, self.id, action, options));
213
- };
214
- //
215
- /**
216
- * Pass a function that returns an Effect, e.g from a client action, give it a name.
217
- * Returns a tuple with state ref and execution function which reports success and errors as Toast.
218
- *
219
- * @deprecated use `Command.fn` and friends instead
220
- */
221
- useAndHandleMutation = (self, action, options) => {
222
- const [a, b] = this.useAndHandleMutationResult(self, action, options);
223
- return tuple(computed(() => mutationResultToVue(a.value)), b);
224
- };
225
- /** @deprecated use `Command.fn` and friends instead */
226
- makeUseAndHandleMutation = (defaultOptions) => ((self, action, options) => {
227
- return this.useAndHandleMutation(self, action, { ...defaultOptions, ...options });
228
- });
229
- /**
230
- * The same as @see useAndHandleMutation, but does not display any toasts by default.
231
- * Messages for success, error and defect toasts can be provided in the Options.
232
- * @deprecated use `Command.fn` and friends instead
233
- */
234
- useAndHandleMutationSilently = this.makeUseAndHandleMutation({
235
- successMessage: suppressToast,
236
- failMessage: suppressToast,
237
- defectMessage: suppressToast
238
- });
239
- /**
240
- * The same as @see useAndHandleMutation, but does not act on success, error or defect by default.
241
- * Actions for success, error and defect can be provided in the Options.
242
- * @deprecated use `Command.fn` and friends instead
243
- */
244
- useAndHandleMutationCustom = (self, action, options) => {
245
- const unsafe = _useMutation({
246
- ...self,
247
- handler: Effect.isEffect(self.handler)
248
- ? pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(self.handler))
249
- : (...args) => pipe(Effect.annotateCurrentSpan({ action }), Effect.andThen(self.handler(...args)))
250
- }, options ? dropUndefinedT(options) : undefined);
251
- const mh = options?.mapHandler ?? identity;
252
- const [a, b] = asResult(mapHandler(mapHandler(unsafe, mh), Effect.tapCauseIf(Cause.hasDies, (cause) => reportRuntimeError(cause))));
253
- return tuple(computed(() => mutationResultToVue(a.value)), handleRequest(b, self.id, action, {
254
- onSuccess: suppressToast,
255
- onDefect: suppressToast,
256
- onFail: suppressToast,
257
- ...options
258
- }));
259
- };
260
- /**
261
- * Effect results are converted to Exit, so errors are ignored by default.
262
- * you should use the result ref to render errors!
263
- * @deprecated use `Command.fn` and friends instead
264
- */
265
- useSafeMutationWithState = (self, options) => {
266
- const [a, b] = this.useSafeMutation(self, options);
267
- return tuple(computed(() => mutationResultToVue(a.value)), b);
268
- };
269
- /** @deprecated use OmegaForm */
270
- buildFormFromSchema = (s, state, onSubmit) => {
271
- const fields = buildFieldInfoFromFieldsRoot(s).fields;
272
- const schema = S.Struct(Struct.omit(s.fields, ["_tag"]));
273
- const parse = S.decodeUnknownSync(schema);
274
- const isDirty = ref(false);
275
- const isValid = ref(true);
276
- const isLoading = ref(false);
277
- const runPromise = Effect.runPromiseWith(this.getRuntime());
278
- const submit1 = (onSubmit) => async (e) => {
279
- isLoading.value = true;
280
- try {
281
- const r = await e;
282
- if (!r.valid)
283
- return;
284
- return await runPromise(onSubmit(new s(await runPromise(parse(state.value)))));
285
- }
286
- finally {
287
- isLoading.value = false;
288
- }
289
- };
290
- const submit = submit1(onSubmit);
291
- watch(state, (v) => {
292
- // TODO: do better
293
- isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value);
294
- }, { deep: true });
295
- const submitFromState = Effect.gen(function* () {
296
- return yield* onSubmit(yield* parse(state.value));
297
- });
298
- const submitFromStatePromise = () => runPromise(submitFromState);
299
- return {
300
- fields,
301
- /** optimized for Vuetify v-form submit callback */
302
- submit,
303
- /** optimized for Native form submit callback or general use */
304
- submitFromState,
305
- submitFromStatePromise,
306
- isDirty,
307
- isValid,
308
- isLoading
309
- };
310
- };
311
- }
312
- // @effect-diagnostics-next-line missingEffectServiceDependency:off
313
- export class LegacyMutation extends ServiceMap.Service()("LegacyMutation", {
314
- make: Effect.gen(function* () {
315
- const intl = yield* I18n;
316
- const toast = yield* Toast;
317
- return (getRuntime) => new LegacyMutationImpl(getRuntime, toast, intl);
318
- })
319
- }) {
320
- static DefaultWithoutDependencies = Layer.effect(this, this.make);
321
- static Default = this.DefaultWithoutDependencies;
322
- }
323
42
  export class QueryImpl {
324
43
  getRuntime;
325
44
  constructor(getRuntime) {
@@ -338,7 +57,7 @@ export class QueryImpl {
338
57
  * @deprecated use client helpers instead (.suspense())
339
58
  */
340
59
  useSuspenseQuery = (self) => {
341
- const runPromise = Effect.runPromiseWith(this.getRuntime());
60
+ const runPromise = makeRunPromise(this.getRuntime());
342
61
  const q = this.useQuery(self);
343
62
  return (argOrOptions, options) => {
344
63
  const [resultRef, latestRef, fetch, uqrt] = q(argOrOptions, { ...options, suspense: true } // experimental_prefetchInRender: true }
@@ -379,46 +98,54 @@ export class QueryImpl {
379
98
  };
380
99
  }
381
100
  // somehow mrt.runtimeEffect doesnt work sync, but this workaround works fine? not sure why though as the layers are generally only sync
382
- const managedRuntimeRt = (mrt) => mrt.runSync(Effect.services());
101
+ const managedRuntimeRt = (mrt) => mrt.runSync(Effect.context());
383
102
  export const makeClient = (
384
103
  // global, but only accessible after startup has completed
385
104
  getBaseMrt, clientFor_, rtHooks) => {
386
- const getRt = Effect.services();
387
105
  const getBaseRt = () => managedRuntimeRt(getBaseMrt());
388
106
  const makeCommand = makeUseCommand(rtHooks);
389
- const makeMutation = Effect.gen(function* () {
390
- const mut = yield* LegacyMutation;
391
- return mut(() => getBaseMrt().runSync(getRt));
392
- });
393
107
  let cmd;
394
108
  const useCommand = () => cmd ??= getBaseMrt().runSync(makeCommand);
395
- let mut;
396
- const getMutation = () => mut ??= getBaseMrt().runSync(makeMutation);
397
109
  let m;
398
110
  const useMutation = () => m ??= useMutationInt();
399
- const keys = [
400
- "useSafeMutationWithState",
401
- "useAndHandleMutation",
402
- "useAndHandleMutationResult",
403
- "useAndHandleMutationSilently",
404
- "useAndHandleMutationCustom",
405
- "makeUseAndHandleMutation",
406
- "useHandleRequestWithToast",
407
- "buildFormFromSchema",
408
- "useSafeMutation"
409
- ];
410
- const mutations = keys.reduce((prev, cur) => {
411
- ;
412
- prev[cur] = ((...args) => {
413
- return getMutation()[cur](...args);
414
- });
415
- return prev;
416
- }, {});
111
+ let sm;
112
+ const useStreamMutation = () => sm ??= makeStreamMutation();
417
113
  const query = new QueryImpl(getBaseRt);
418
114
  const useQuery = query.useQuery;
419
115
  const useSuspenseQuery = query.useSuspenseQuery;
116
+ const mergeInvalidation = (a, b) => {
117
+ if (!a && !b) {
118
+ return undefined;
119
+ }
120
+ return (defaultKey, name, input, output) => [
121
+ ...(a?.(defaultKey, name, input, output) ?? []),
122
+ ...(b?.(defaultKey, name, input, output) ?? [])
123
+ ];
124
+ };
125
+ const withDefaultInvalidation = (mut, isWithInput, defaultInvalidation) => {
126
+ if (!defaultInvalidation)
127
+ return mut;
128
+ const apply = (callerOpts) => ({
129
+ ...callerOpts,
130
+ queryInvalidation: callerOpts?.queryInvalidation
131
+ ? mergeInvalidation(defaultInvalidation, callerOpts.queryInvalidation)
132
+ : defaultInvalidation
133
+ });
134
+ return isWithInput
135
+ ? (input, callerOpts) => mut(input, apply(callerOpts))
136
+ : (callerOpts) => mut(apply(callerOpts));
137
+ };
138
+ const makeQueryResources = (resources) => {
139
+ if (!resources) {
140
+ return {};
141
+ }
142
+ return resources;
143
+ };
420
144
  const mapQuery = (client) => {
421
145
  const queries = Struct.keys(client).reduce((acc, key) => {
146
+ if (client[key].Request.type !== "query") {
147
+ return acc;
148
+ }
422
149
  ;
423
150
  acc[camelCase(key) + "Query"] = Object.assign(useQuery(client[key]), {
424
151
  id: client[key].id
@@ -433,6 +160,9 @@ getBaseMrt, clientFor_, rtHooks) => {
433
160
  const mapRequest = (client) => {
434
161
  const Command = useCommand();
435
162
  const mutations = Struct.keys(client).reduce((acc, key) => {
163
+ if (client[key].Request.type !== "command") {
164
+ return acc;
165
+ }
436
166
  const mut = client[key].handler;
437
167
  const fn = Command.fn(client[key].id);
438
168
  const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
@@ -442,57 +172,176 @@ getBaseMrt, clientFor_, rtHooks) => {
442
172
  }, {});
443
173
  return mutations;
444
174
  };
445
- const mapMutation = (client) => {
175
+ const mapMutation = (client, queryInvalidation, invalidationResources) => {
446
176
  const Command = useCommand();
447
177
  const mutation = useMutation();
178
+ const invalidation = queryInvalidation?.(client);
179
+ const queryResources = makeQueryResources(invalidationResources);
448
180
  const mutations = Struct.keys(client).reduce((acc, key) => {
449
- const mut = mutation(client[key]);
450
- const fn = Command.fn(client[key].id);
451
- const wrap = Command.wrap({ mutate: Effect.isEffect(mut) ? () => mut : mut, id: client[key].id });
452
- acc[camelCase(key) + "Mutation"] = Object.assign(mut, fn, // to get the i18n key etc.
453
- { wrap, fn });
181
+ if (client[key].Request.type !== "command") {
182
+ return acc;
183
+ }
184
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
185
+ const fromRequest = fromRequestConfig
186
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output).map((entry) => ({
187
+ filters: entry.filters,
188
+ options: entry.options
189
+ })))
190
+ : undefined;
191
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
192
+ const makeProjectedMutation = (handler) => {
193
+ const isWithInput = !Effect.isEffect(handler.handler);
194
+ const mut = withDefaultInvalidation(mutation(handler), isWithInput, mergedInvalidation);
195
+ const wrap = Command.wrap({ mutate: mut, id: client[key].id });
196
+ return Object.assign(mut, {
197
+ wrap,
198
+ project: (projectionSchema) => {
199
+ const projected = {
200
+ ...handler,
201
+ handler: projectHandler(handler.handler, client[key].Request.success, projectionSchema)
202
+ };
203
+ return makeProjectedMutation(projected);
204
+ }
205
+ });
206
+ };
207
+ acc[camelCase(key) + "Mutation"] = makeProjectedMutation(client[key]);
454
208
  return acc;
455
209
  }, {});
456
210
  return mutations;
457
211
  };
212
+ const mapStreamMutation = (client, queryInvalidation, invalidationResources) => {
213
+ const streamMutation = useStreamMutation();
214
+ const invalidation = queryInvalidation?.(client);
215
+ const queryResources = makeQueryResources(invalidationResources);
216
+ const streams = Struct.keys(client).reduce((acc, key) => {
217
+ if (client[key].Request.type !== "stream") {
218
+ return acc;
219
+ }
220
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
221
+ const fromRequest = fromRequestConfig
222
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output).map((entry) => ({
223
+ filters: entry.filters,
224
+ options: entry.options
225
+ })))
226
+ : undefined;
227
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
228
+ acc[camelCase(key) + "Stream"] = streamMutation(client[key], mergedInvalidation);
229
+ return acc;
230
+ }, {});
231
+ return streams;
232
+ };
458
233
  // make available .query, .suspense and .mutate for each operation
459
234
  // and a .helpers with all mutations and queries
460
- const mapClient = (queryInvalidation) => (client) => {
235
+ const mapClient = (queryInvalidation, invalidationResources) => (client) => {
461
236
  const Command = useCommand();
462
237
  const mutation = useMutation();
238
+ const streamMutation = useStreamMutation();
463
239
  const invalidation = queryInvalidation?.(client);
240
+ const queryResources = makeQueryResources(invalidationResources);
464
241
  const extended = Struct.keys(client).reduce((acc, key) => {
242
+ const requestType = client[key].Request.type;
465
243
  const fn = Command.fn(client[key].id);
466
- const mutate = extendM(mutation(client[key], invalidation?.[key] ? { queryInvalidation: invalidation[key] } : undefined), (mutate) => Object.assign(mutate, fn, // to get the i18n key etc.
467
- {
468
- wrap: Command.wrap({ mutate: Effect.isEffect(mutate) ? () => mutate : mutate, id: client[key].id }),
469
- fn
470
- }));
471
244
  const h_ = client[key].handler;
472
- const h = Effect.isEffect(h_)
245
+ const wrapInput = Effect.isEffect(h_)
473
246
  ? () => h_
474
247
  : (...args) => h_(...args);
475
- acc[key] = Object.assign(h, client[key], fn, // to get the i18n key etc.
476
- {
477
- mutate,
478
- query: useQuery(client[key]),
479
- suspense: useSuspenseQuery(client[key]),
480
- wrap: Command.wrap({ mutate: h, id: client[key].id }),
481
- fn
482
- });
248
+ const request = Effect.isEffect(h_) ? h_ : wrapInput;
249
+ acc[key] = Object.assign(requestType === "query"
250
+ ? {
251
+ ...client[key],
252
+ request,
253
+ query: useQuery(client[key]),
254
+ suspense: useSuspenseQuery(client[key]),
255
+ project: (projectionSchema) => {
256
+ const successSchema = client[key].Request.success;
257
+ const projectionHash = projectionSchemaHash(projectionSchema);
258
+ const projected = projectHandler(h_, successSchema, projectionSchema);
259
+ const fakeHandler = {
260
+ handler: projected,
261
+ id: client[key].id,
262
+ Request: client[key].Request,
263
+ options: client[key].options,
264
+ queryKeyProjectionHash: projectionHash
265
+ };
266
+ return {
267
+ request: projected,
268
+ query: useQuery(fakeHandler),
269
+ suspense: useSuspenseQuery(fakeHandler)
270
+ };
271
+ }
272
+ }
273
+ : requestType === "stream"
274
+ ? (() => {
275
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
276
+ const fromRequest = fromRequestConfig
277
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output).map((entry) => ({
278
+ filters: entry.filters,
279
+ options: entry.options
280
+ })))
281
+ : undefined;
282
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
283
+ return {
284
+ ...client[key],
285
+ request: h_,
286
+ mutateStream: streamMutation(client[key], mergedInvalidation)
287
+ };
288
+ })()
289
+ : {
290
+ mutate: ((handler) => {
291
+ const fromRequestConfig = client[key].Request.config?.["invalidatesQueries"];
292
+ const fromRequest = fromRequestConfig
293
+ ? ((defaultKey, _name, input, output) => fromRequestConfig(defaultKey, queryResources, input, output).map((entry) => ({
294
+ filters: entry.filters,
295
+ options: entry.options
296
+ })))
297
+ : undefined;
298
+ const mergedInvalidation = mergeInvalidation(fromRequest, invalidation?.[key]);
299
+ const makeProjectedMutation = (h) => {
300
+ const isWithInput = !Effect.isEffect(h.handler);
301
+ const mutate = withDefaultInvalidation(mutation(h), isWithInput, mergedInvalidation);
302
+ return Object.assign(mutate, {
303
+ wrap: Command.wrap({
304
+ mutate,
305
+ id: client[key].id
306
+ }),
307
+ project: (projectionSchema) => {
308
+ const projected = {
309
+ ...h,
310
+ handler: projectHandler(h.handler, client[key].Request.success, projectionSchema)
311
+ };
312
+ return makeProjectedMutation(projected);
313
+ }
314
+ });
315
+ };
316
+ return makeProjectedMutation(handler);
317
+ })(client[key]),
318
+ ...client[key],
319
+ ...fn, // to get the i18n key etc.
320
+ request,
321
+ fn,
322
+ wrap: Command.wrap({ mutate: wrapInput, id: client[key].id })
323
+ });
483
324
  return acc;
484
325
  }, {});
485
- return Object.assign(extended, { helpers: { ...mapRequest(client), ...mapMutation(client), ...mapQuery(client) } });
326
+ return Object.assign(extended, {
327
+ helpers: {
328
+ ...mapRequest(client),
329
+ ...mapMutation(client, queryInvalidation, invalidationResources),
330
+ ...mapStreamMutation(client, queryInvalidation, invalidationResources),
331
+ ...mapQuery(client)
332
+ }
333
+ });
486
334
  };
487
335
  // TODO: Clean up this delay initialisation messs
488
336
  // TODO; invalidateQueries should perhaps be configured in the Request impl themselves?
489
- const clientFor__ = (m, queryInvalidation) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation))));
337
+ const clientFor__ = (m, queryInvalidation, invalidationResources) => getBaseMrt().runSync(clientFor_(m).pipe(Effect.map(mapClient(queryInvalidation, invalidationResources))));
490
338
  // delay client creation until first access
491
339
  // the idea is that we don't need the useNuxtApp().$runtime (only available at later initialisation stage)
492
340
  // until we are at a place where it is available..
493
- const clientFor = (m, queryInvalidation) => {
341
+ const clientFor = (m, ...args) => {
342
+ const [queryInvalidation, invalidationResources] = args;
494
343
  let client = undefined;
495
- const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation));
344
+ const getOrMakeClient = () => (client ??= clientFor__(m, queryInvalidation, invalidationResources));
496
345
  // initialize on first use..
497
346
  const proxy = Struct.keys(m).concat(["helpers"]).reduce((acc, key) => {
498
347
  Object.defineProperty(acc, key, {
@@ -508,10 +357,6 @@ getBaseMrt, clientFor_, rtHooks) => {
508
357
  }, {});
509
358
  return proxy;
510
359
  };
511
- const legacy = {
512
- ...mutations,
513
- ...query
514
- };
515
360
  const Command = {
516
361
  ...{
517
362
  // delay initialisation until first use...
@@ -525,8 +370,7 @@ getBaseMrt, clientFor_, rtHooks) => {
525
370
  return {
526
371
  Command,
527
372
  useCommand,
528
- clientFor,
529
- legacy
373
+ clientFor
530
374
  };
531
375
  };
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQXVELGdCQUFnQixFQUEwRSxNQUFNLHFCQUFxQixDQUFBO0FBQ25MLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQXVCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHeEgsT0FBTyxFQUFFLGFBQWEsRUFBd0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckUsT0FBTyxFQUF5QixnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFMUQsT0FBTyxLQUFLLFdBQVcsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixlQUFlLEVBQVksR0FBRyxFQUFFLEtBQUssRUFBb0IsTUFBTSxLQUFLLENBQUE7QUFDekcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ2xELE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzdDLE9BQU8sRUFBMEIsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDekYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQy9DLE9BQU8sRUFB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
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQXVELGdCQUFnQixFQUEwRSxNQUFNLHFCQUFxQixDQUFBO0FBQ25MLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkMsT0FBTyxFQUFnQixNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBbUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQU16RyxPQUFPLEtBQUssV0FBVyxNQUFNLHdDQUF3QyxDQUFBO0FBQ3JFLE9BQU8sRUFBb0IsZUFBZSxFQUFFLEdBQUcsRUFBb0IsTUFBTSxLQUFLLENBQUE7QUFDOUUsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVoRSxPQUFPLEVBQTBCLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQTRCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN6RyxPQUFPLEVBQTJDLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRzdDLE1BQU0sVUFBVSxHQUFHLENBQ2pCLE9BQW9FLEVBQ3BFLEdBQXNFLEVBQ3RFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFFN0Ysb0RBQW9EO0FBQ3BELE1BQU0sY0FBYyxHQUFHLENBQ3JCLE9BQWtGLEVBQ2xGLGFB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