@effect-app/vue 2.31.0 → 2.33.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.
package/dist/mutate.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as Result from "@effect-rx/rx/Result";
2
2
  import type { InvalidateOptions, InvalidateQueryFilters } from "@tanstack/vue-query";
3
- import type { Cause } from "effect-app";
3
+ import type { Cause, Exit } from "effect-app";
4
4
  import { Effect } from "effect-app";
5
5
  import type { RequestHandler, RequestHandlerWithInput, TaggedRequestClassAny } from "effect-app/client/clientFor";
6
6
  import type { ComputedRef, Ref } from "vue";
@@ -15,10 +15,6 @@ export interface Res<A, E> {
15
15
  }
16
16
  export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T);
17
17
  export declare function make<A, E, R>(self: Effect<A, E, R>): readonly [import("vue").ShallowRef<Result.Result<A, E>, Result.Result<A, E>>, ComputedRef<A | undefined>, Effect.Effect<Result.Success<A, E> | Result.Failure<A, E>, never, R>];
18
- export type MaybeRef<T> = Ref<T> | ComputedRef<T> | T;
19
- type MaybeRefDeep<T> = MaybeRef<T extends Function ? T : T extends object ? {
20
- [Property in keyof T]: MaybeRefDeep<T[Property]>;
21
- } : T>;
22
18
  export interface MutationOptions<A, E, R, A2 = A, E2 = E, R2 = R, I = void> {
23
19
  /**
24
20
  * Map the handler; cache invalidation is already done in this handler.
@@ -30,16 +26,18 @@ export interface MutationOptions<A, E, R, A2 = A, E2 = E, R2 = R, I = void> {
30
26
  * This can be overridden by providing a function that returns an array of filters and options.
31
27
  */
32
28
  queryInvalidation?: (defaultKey: string[], name: string) => {
33
- filters?: MaybeRefDeep<InvalidateQueryFilters> | undefined;
34
- options?: MaybeRefDeep<InvalidateOptions> | undefined;
29
+ filters?: InvalidateQueryFilters | undefined;
30
+ options?: InvalidateOptions | undefined;
35
31
  }[];
36
32
  }
37
- export declare const asResult: <Args extends readonly any[], A, E, R>(handler: (...args: Args) => Effect<A, E, R>) => readonly [import("vue").ShallowRef<Result.Result<A, E>, Result.Result<A, E>>, (...args: Args) => Effect.Effect<A, E, R>];
33
+ export declare const asResult: {
34
+ <A, E, R>(handler: Effect<A, E, R>): readonly [ComputedRef<Result.Result<A, E>>, Effect<Exit<A, E>, never, void>];
35
+ <Args extends readonly any[], A, E, R>(handler: (...args: Args) => Effect<A, E, R>): readonly [ComputedRef<Result.Result<A, E>>, (...args: Args) => Effect<Exit<A, E>, never, void>];
36
+ };
38
37
  export declare const makeMutation: () => {
39
- <I, E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(self: RequestHandlerWithInput<I, A, E, R, Request>, options?: MutationOptions<A, E, R, A2, E2, R2, I>): readonly [Readonly<Ref<Result.Result<A2, E2>>>, (i: I) => Effect<A2, E2, R2>];
40
- <E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(self: RequestHandler<A, E, R, Request>, options?: MutationOptions<A, E, R, A2, E2, R2>): readonly [Readonly<Ref<Result.Result<A2, E2>>>, Effect<A2, E2, R2>];
38
+ <I, E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(self: RequestHandlerWithInput<I, A, E, R, Request>, options?: MutationOptions<A, E, R, A2, E2, R2, I>): (i: I) => Effect<A2, E2, R2>;
39
+ <E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(self: RequestHandler<A, E, R, Request>, options?: MutationOptions<A, E, R, A2, E2, R2>): Effect<A2, E2, R2>;
41
40
  };
42
41
  export interface MakeMutation2 extends ReturnType<typeof makeMutation> {
43
42
  }
44
- export {};
45
43
  //# sourceMappingURL=mutate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"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"}
package/dist/mutate.js CHANGED
@@ -4,7 +4,7 @@ import { useQueryClient } from "@tanstack/vue-query";
4
4
  import { Effect, Option } from "effect-app";
5
5
  import { tuple } from "effect-app/Function";
6
6
  import { computed, shallowRef } from "vue";
7
- import { makeQueryKey, reportRuntimeError } from "./lib.js";
7
+ import { makeQueryKey } from "./lib.js";
8
8
  export const getQueryKey = (h) => {
9
9
  const key = makeQueryKey(h);
10
10
  const ns = key.filter((_) => _.startsWith("$"));
@@ -58,19 +58,25 @@ export function make(self) {
58
58
  */
59
59
  export const asResult = (handler) => {
60
60
  const state = shallowRef(Result.initial());
61
- const act = (...args) => Effect
62
- .sync(() => {
63
- state.value = Result.initial(true);
64
- })
65
- .pipe(Effect.zipRight(Effect.suspend(() => handler(...args))), Effect.onExit((exit) => Effect.sync(() => (state.value = Result.fromExit(exit)))));
66
- return tuple(state, act);
61
+ const act = Effect.isEffect(handler)
62
+ ? Effect
63
+ .sync(() => {
64
+ state.value = Result.initial(true);
65
+ })
66
+ .pipe(Effect.zipRight(Effect.suspend(() => handler.pipe(Effect.exit, Effect.tap((exit) => Effect.sync(() => (state.value = Result.fromExit(exit))))))))
67
+ : (...args) => Effect
68
+ .sync(() => {
69
+ state.value = Result.initial(true);
70
+ })
71
+ .pipe(Effect.zipRight(Effect.suspend(() => handler(...args).pipe(Effect.exit, Effect.tap((exit) => Effect.sync(() => (state.value = Result.fromExit(exit))))))));
72
+ return tuple(computed(() => state.value), act);
67
73
  };
68
74
  export const makeMutation = () => {
69
75
  /**
70
76
  * Pass a function that returns an Effect, e.g from a client action, or an Effect
71
77
  * Returns a tuple with state ref and execution function which reports errors as Toast.
72
78
  */
73
- const useSafeMutation = (self, options) => {
79
+ const useMutation = (self, options) => {
74
80
  const queryClient = useQueryClient();
75
81
  const invalidateQueries = (filters, options) => Effect.promise(() => queryClient.invalidateQueries(filters, options));
76
82
  const invalidateCache = Effect.suspend(() => {
@@ -91,12 +97,11 @@ export const makeMutation = () => {
91
97
  .pipe(Effect.withSpan("client.query.invalidation", { captureStackTrace: false }));
92
98
  });
93
99
  const mapHandler = options?.mapHandler ?? ((_) => _);
94
- const [state, handle_] = asResult((self, i = void 0) => mapHandler(Effect.tapBoth(self, { onFailure: () => invalidateCache, onSuccess: () => invalidateCache }), i));
95
- const handle = (self, name, i = void 0) => handle_(self, i).pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`mutation ${name}`, { captureStackTrace: false }));
100
+ const handle = (self, i = void 0) => mapHandler(Effect.tapBoth(self, { onFailure: () => invalidateCache, onSuccess: () => invalidateCache }), i);
96
101
  const handler = self.handler;
97
- const r = tuple(state, Effect.isEffect(handler) ? handle(handler, self.name) : (i) => handle(handler(i), self.name, i));
102
+ const r = Effect.isEffect(handler) ? handle(handler) : (i) => handle(handler(i), i);
98
103
  return r;
99
104
  };
100
- return useSafeMutation;
105
+ return useMutation;
101
106
  };
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxzQkFBc0IsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFM0QsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBbUIsRUFBRSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDL0MsNkZBQTZGO0lBQzdGLG9GQUFvRjtJQUNwRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDakYsSUFBSSxDQUFDLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FB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
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxzQkFBc0IsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFdkMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBbUIsRUFBRSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDL0MsNkZBQTZGO0lBQzdGLG9GQUFvRjtJQUNwRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDakYsSUFBSSxDQUFDLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6RCxPQUFPLENBQUMsQ0FBQTtBQUNWLENBQUMsQ0FBQTtBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsY0FBbUM7SUFFbkMsUUFBUSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2YsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFBO1FBQy9FLENBQUM7UUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxjQUFjLENBQUMsS0FBSztnQkFDMUIsS0FBSyxFQUFFLFNBQVM7YUFDakIsQ0FBQTtRQUNILENBQUM7UUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxTQUFTO2dCQUNmLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSzthQUM1QixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBU0QsTUFBTSxVQUFVLElBQUksQ0FBVSxJQUFxQjtJQUNqRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBeUIsQ0FBQyxDQUFBO0lBRWxFLE1BQU0sT0FBTyxHQUFHLE1BQU07U0FDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNULE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQ3BCLE1BQU0sQ0FBQyxJQUFJLEVBQ1gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFBO0lBRUgsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXZGLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUE7QUFDOUMsQ0FBQztBQW1CRCx3REFBd0Q7QUFDeEQsOERBQThEO0FBQzlELDJGQUEyRjtBQUMzRixNQUFNO0FBQ047Ozs7O2tCQUtrQjtBQUVsQixNQUFNLENBQUMsTUFBTSxRQUFRLEdBT2pCLENBQ0YsT0FBK0QsRUFDL0QsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBc0IsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFL0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDbEMsQ0FBQyxDQUFDLE1BQU07YUFDTCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3BDLENBQUMsQ0FBQzthQUNELElBQUksQ0FDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsTUFBTSxDQUFDLElBQUksRUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvRSxDQUNGLENBQUMsQ0FDSDtRQUNILENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBVSxFQUFFLEVBQUUsQ0FDbEIsTUFBTTthQUNILElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDcEMsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDbEMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNuQixNQUFNLENBQUMsSUFBSSxFQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9FLENBQ0YsQ0FBQyxDQUNILENBQUE7SUFFUCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBUSxDQUFBO0FBQ3ZELENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDL0I7OztPQUdHO0lBQ0gsTUFBTSxXQUFXLEdBU2IsQ0FDRixJQUFxRixFQUNyRixPQUFpRCxFQUNqRCxFQUFFO1FBQ0YsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUE7UUFFcEMsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixPQUFnQyxFQUNoQyxPQUEyQixFQUMzQixFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFFMUUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDMUMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRWxDLElBQUksT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUE7Z0JBQ3BCLENBQUM7Z0JBQ0QsT0FBTyxNQUFNO3FCQUNWLE9BQU8sQ0FDTixNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQ2pHO3FCQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ3JGLENBQUM7WUFFRCxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUE7WUFFakMsT0FBTyxNQUFNO2lCQUNWLE9BQU8sQ0FDTixNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUN4QyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQ2hDO2lCQUNBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3JGLENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVwRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQXFCLEVBQUUsSUFBYyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUUsVUFBVSxDQUN6RSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLEVBQzVGLENBQU0sQ0FDZ0IsQ0FBQTtRQUV4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFBO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFdEYsT0FBTyxDQUFRLENBQUE7SUFDakIsQ0FBQyxDQUFBO0lBQ0QsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQyxDQUFBIn0=
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@effect-app/vue",
3
- "version": "2.31.0",
3
+ "version": "2.33.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/effect-ts-app/libs/tree/main/packages/vue",
7
7
  "dependencies": {
8
8
  "@formatjs/intl": "^3.1.4",
9
- "@tanstack/vue-query": "^5.66.11",
10
- "@vueuse/core": "^12.7.0",
9
+ "@tanstack/vue-query": "^5.67.1",
10
+ "@vueuse/core": "^12.8.2",
11
11
  "query-string": "^9.1.1",
12
- "effect-app": "2.32.2"
12
+ "effect-app": "2.32.3"
13
13
  },
14
14
  "peerDependencies": {
15
- "@effect/platform": "^0.77.4",
16
- "@effect/platform-browser": "^0.56.4",
15
+ "@effect/platform": "^0.77.6",
16
+ "@effect/platform-browser": "^0.56.6",
17
17
  "@effect-rx/rx": "^0.34.7",
18
18
  "@effect-rx/rx-vue": "^0.11.7",
19
- "@sentry/browser": "^9.3.0",
20
- "effect": "^3.13.4",
19
+ "@sentry/browser": "^9.4.0",
20
+ "effect": "^3.13.6",
21
21
  "vue": "^3.5.13"
22
22
  },
23
23
  "devDependencies": {
@@ -28,7 +28,7 @@
28
28
  "@babel/plugin-transform-modules-commonjs": "^7.26.3",
29
29
  "babel-plugin-replace-import-extension": "^1.1.5",
30
30
  "@rollup/pluginutils": "^5.1.4",
31
- "@types/node": "~22.13.8",
31
+ "@types/node": "~22.13.9",
32
32
  "intl-messageformat": "^10.7.15",
33
33
  "json5": "^2.2.3",
34
34
  "typescript": "^5.8.2",
package/src/form.ts CHANGED
@@ -36,16 +36,16 @@ export function convertIn(v: string | null, type?: "text" | "float" | "int") {
36
36
  * Makes sure our international number format is converted to js int/float format.
37
37
  * Right now assumes . for thousands and , for decimal.
38
38
  */
39
- const prepareNumberForLocale = (v: string) => v.replace(/\./g, "").replace(/,/g, ".")
39
+ export const prepareNumberForLocale = (v: string) => v.replace(/\./g, "").replace(/,/g, ".")
40
40
 
41
41
  export function convertOutInt(v: string, type?: "text" | "float" | "int") {
42
42
  v = v == null ? v : v.trim()
43
43
  const c = v === ""
44
44
  ? null
45
45
  : type === "float"
46
- ? parseFloat(prepareNumberForLocale(v))
46
+ ? parseFloat(v)
47
47
  : type === "int"
48
- ? parseInt(prepareNumberForLocale(v))
48
+ ? parseInt(v)
49
49
  : v
50
50
  return c
51
51
  }
package/src/makeClient.ts CHANGED
@@ -14,10 +14,15 @@ import { reportMessage } from "./errorReporter.js"
14
14
  import { buildFieldInfoFromFieldsRoot } from "./form.js"
15
15
  import { getRuntime, reportRuntimeError } from "./lib.js"
16
16
  import type { MakeIntlReturn } from "./makeIntl.js"
17
- import { makeMutation, mutationResultToVue } from "./mutate.js"
17
+ import { asResult, makeMutation, mutationResultToVue } from "./mutate.js"
18
18
  import type { MutationOptions, Res } from "./mutate.js"
19
19
  import { makeQuery } from "./query.js"
20
20
 
21
+ const tapHandler = <A, E, R, I>(
22
+ handler: Effect<A, E, R> | ((i: I) => Effect<A, E, R>),
23
+ map: (self: Effect<A, E, R>) => Effect<A, E, R>
24
+ ) => Effect.isEffect(handler) ? map(handler) : (i: I) => map(handler(i))
25
+
21
26
  /**
22
27
  * Use this after handling an error yourself, still continueing on the Error track, but the error will not be reported.
23
28
  */
@@ -117,7 +122,8 @@ export function handleRequest<
117
122
  EDefect = never,
118
123
  RDefect = never
119
124
  >(
120
- f: Effect<A, E, R> | ((i: I) => Effect<A, E, R>),
125
+ f: Effect<Exit<A, E>, never, R> | ((i: I) => Effect<Exit<A, E>, never, R>),
126
+ name: string,
121
127
  action: string,
122
128
  options: {
123
129
  onSuccess: (a: A, i: I) => Effect<void, ESuccess, RSuccess>
@@ -125,9 +131,8 @@ export function handleRequest<
125
131
  onDefect: (e: Cause.Cause<E>, i: I) => Effect<void, EDefect, RDefect>
126
132
  }
127
133
  ) {
128
- const handleEffect = (i: any) => (self: Effect<A, E, R>) =>
134
+ const handleEffect = (i: any) => (self: Effect<Exit<A, E>, never, R>) =>
129
135
  self.pipe(
130
- Effect.exit,
131
136
  Effect.tap(
132
137
  Exit.matchEffect({
133
138
  onSuccess: (r) => options.onSuccess(r, i),
@@ -160,15 +165,7 @@ export function handleRequest<
160
165
  })
161
166
  })
162
167
  ),
163
- Effect.tapErrorCause((cause) =>
164
- Effect.gen(function*() {
165
- const extra = {
166
- action,
167
- message: `Unexpected Error trying to handle errors for ${action}`
168
- }
169
- yield* reportRuntimeError(cause, extra)
170
- })
171
- )
168
+ Effect.withSpan(`mutation ${name}`, { captureStackTrace: false })
172
169
  )
173
170
  return Object.assign(
174
171
  Effect.isEffect(f)
@@ -196,8 +193,47 @@ export const makeClient = <Locale extends string, R>(
196
193
  messages: Record<string, string | undefined> = {}
197
194
  ) => {
198
195
  // making sure names do not collide with auto exports in nuxt apps, please do not rename..
199
- const _useSafeMutation = makeMutation()
196
+ /**
197
+ * Effect results are passed to the caller, including errors.
198
+ */
199
+ const _useUnsafeMutation = makeMutation()
200
200
  const _useSafeQuery = makeQuery(runtime)
201
+
202
+ /**
203
+ * Effect results are converted to Exit, so errors are ignored by default.
204
+ * you should use the result ref to render errors!
205
+ */
206
+ const _useSafeMutation: {
207
+ <I, E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(
208
+ self: RequestHandlerWithInput<I, A, E, R, Request>,
209
+ options?: MutationOptions<A, E, R, A2, E2, R2, I>
210
+ ): readonly [
211
+ ComputedRef<Result<A2, E2>>,
212
+ (i: I) => Effect<Exit<A2, E2>, never, R2>
213
+ ]
214
+ <E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(
215
+ self: RequestHandler<A, E, R, Request>,
216
+ options?: MutationOptions<A, E, R, A2, E2, R2>
217
+ ): readonly [
218
+ ComputedRef<Result<A2, E2>>,
219
+ Effect<Exit<A2, E2>, never, R2>
220
+ ]
221
+ } = <I, E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(
222
+ self: RequestHandlerWithInput<I, A, E, R, Request> | RequestHandler<A, E, R, Request>,
223
+ options?: MutationOptions<A, E, R, A2, E2, R2, I>
224
+ ) => {
225
+ const unsafe = _useUnsafeMutation(self as any, options)
226
+
227
+ const [a, b] = asResult(tapHandler(unsafe, Effect.tapDefect(reportRuntimeError)) as any)
228
+ return [
229
+ a,
230
+ tapHandler(
231
+ b,
232
+ Effect.withSpan(`mutation ${self.name}`, { captureStackTrace: false })
233
+ )
234
+ ] as const as any
235
+ }
236
+
201
237
  const _useHandleRequestWithToast = () => {
202
238
  const toast = useToast()
203
239
  const { intl } = useIntl()
@@ -222,7 +258,8 @@ export const makeClient = <Locale extends string, R>(
222
258
  EDefect = never,
223
259
  RDefect = never
224
260
  >(
225
- f: Effect<A2, E2, R2> | ((i: I) => Effect<A2, E2, R2>),
261
+ f: Effect<Exit<A2, E2>, never, R2> | ((i: I) => Effect<Exit<A2, E2>, never, R2>),
262
+ name: string,
226
263
  action: string,
227
264
  options: Opts<A, E, R, I, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect> = {}
228
265
  ) {
@@ -240,7 +277,7 @@ export const makeClient = <Locale extends string, R>(
240
277
  { action: actionMessage }
241
278
  )
242
279
 
243
- return handleRequest<E2, A2, R2, any, ESuccess, RSuccess, EError, RError, EDefect, RDefect>(f, action, {
280
+ return handleRequest<E2, A2, R2, any, ESuccess, RSuccess, EError, RError, EDefect, RDefect>(f, name, action, {
244
281
  onSuccess: (a, i) =>
245
282
  Effect.gen(function*() {
246
283
  const message = options.successMessage ? yield* options.successMessage(a, i) : defaultSuccessMessage
@@ -365,7 +402,7 @@ export const makeClient = <Locale extends string, R>(
365
402
  self: RequestHandlerWithInput<I, A, E, R, Request>,
366
403
  action: string,
367
404
  options?: Opts<A, E, R, I, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect>
368
- ): Resp<I, A2, E2, R2, Readonly<Ref<Result<A2, E2>, Result<A2, E2>>>>
405
+ ): Resp<I, A2, E2, R2, ComputedRef<Result<A2, E2>>>
369
406
  <
370
407
  E extends ResponseErrors,
371
408
  A,
@@ -384,32 +421,34 @@ export const makeClient = <Locale extends string, R>(
384
421
  self: RequestHandler<A, E, R, Request>,
385
422
  action: string,
386
423
  options?: Opts<A, E, R, void, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect>
387
- ): ActResp<A2, E2, R2, Readonly<Ref<Result<A2, E2>, Result<A2, E2>>>>
388
- } = (
389
- self: any,
424
+ ): ActResp<A2, E2, R2, ComputedRef<Result<A2, E2>>>
425
+ } = <E extends ResponseErrors, A, R, Request extends TaggedRequestClassAny, I>(
426
+ self: RequestHandlerWithInput<I, A, E, R, Request> | RequestHandler<A, E, R, Request>,
390
427
  action: any,
391
428
  options?: Opts<any, any, any, any, any, any, any, any, any, any, any, any, any>
392
429
  ): any => {
393
430
  const handleRequestWithToast = _useHandleRequestWithToast()
394
- const [a, b] = _useSafeMutation({
431
+ const handler = self.handler
432
+ const [a, b] = asResult(_useUnsafeMutation({
395
433
  ...self,
396
- handler: Effect.isEffect(self.handler)
434
+ handler: Effect.isEffect(handler)
397
435
  ? (pipe(
398
436
  Effect.annotateCurrentSpan({ action }),
399
- Effect.andThen(self.handler)
437
+ Effect.zipRight(handler)
400
438
  ) as any)
401
- : (...args: any[]) =>
439
+ : (...args: [any]) =>
402
440
  pipe(
403
441
  Effect.annotateCurrentSpan({ action }),
404
- Effect.andThen(self.handler(...args))
442
+ Effect.zipRight(handler(...args))
405
443
  )
406
- }, options ? dropUndefinedT(options) : undefined)
444
+ }, options ? dropUndefinedT(options) : undefined))
407
445
 
408
446
  return tuple(
409
447
  a,
410
- handleRequestWithToast(b as any, action, options)
448
+ handleRequestWithToast(b as any, self.name, action, options)
411
449
  )
412
450
  }
451
+ //
413
452
 
414
453
  /**
415
454
  * Pass a function that returns an Effect, e.g from a client action, give it a name.
@@ -468,6 +507,57 @@ export const makeClient = <Locale extends string, R>(
468
507
  )
469
508
  }
470
509
 
510
+ function _makeUseAndHandleMutation(
511
+ defaultOptions?: Opts<any, any, any, any, any, any, any, any, any>
512
+ ) {
513
+ return ((self: any, action: any, options: any) => {
514
+ return _useAndHandleMutation(
515
+ self,
516
+ action,
517
+ { ...defaultOptions, ...options }
518
+ )
519
+ }) as unknown as {
520
+ <
521
+ I,
522
+ E extends ResponseErrors,
523
+ A,
524
+ R,
525
+ Request extends TaggedRequestClassAny,
526
+ A2 = A,
527
+ E2 extends ResponseErrors = E,
528
+ R2 = R,
529
+ ESuccess = never,
530
+ RSuccess = never,
531
+ EError = never,
532
+ RError = never,
533
+ EDefect = never,
534
+ RDefect = never
535
+ >(
536
+ self: RequestHandlerWithInput<I, A, E, R, Request>,
537
+ action: string,
538
+ options?: Opts<A, E, R, I, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect>
539
+ ): Resp<I, A2, E2, R2>
540
+ <
541
+ E extends ResponseErrors,
542
+ A,
543
+ Request extends TaggedRequestClassAny,
544
+ A2 = A,
545
+ E2 extends ResponseErrors = E,
546
+ R2 = R,
547
+ ESuccess = never,
548
+ RSuccess = never,
549
+ EError = never,
550
+ RError = never,
551
+ EDefect = never,
552
+ RDefect = never
553
+ >(
554
+ self: RequestHandler<A, E, R, Request>,
555
+ action: string,
556
+ options?: Opts<A, E, R, void, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect>
557
+ ): ActResp<A2, E2, R2>
558
+ }
559
+ }
560
+
471
561
  /**
472
562
  * The same as @see useAndHandleMutation, but does not display any toasts by default.
473
563
  * Messages for success, error and defect toasts can be provided in the Options.
@@ -563,7 +653,7 @@ export const makeClient = <Locale extends string, R>(
563
653
  options?: LowOptsOptional<A, E, R, void, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect>
564
654
  ): ActResp<A2, E2, R2>
565
655
  } = (self: any, action: string, options: any) => {
566
- const [a, b] = _useSafeMutation({
656
+ const [a, b] = asResult(_useUnsafeMutation({
567
657
  ...self,
568
658
  handler: Effect.isEffect(self.handler)
569
659
  ? (pipe(
@@ -575,11 +665,11 @@ export const makeClient = <Locale extends string, R>(
575
665
  Effect.annotateCurrentSpan({ action }),
576
666
  Effect.andThen(self.handler(...args))
577
667
  )
578
- }, options ? dropUndefinedT(options) : undefined)
668
+ }, options ? dropUndefinedT(options) : undefined))
579
669
 
580
670
  return tuple(
581
671
  computed(() => mutationResultToVue(a.value)),
582
- handleRequest(b as any, action, {
672
+ handleRequest(b as any, self.name, action, {
583
673
  onSuccess: suppressToast,
584
674
  onDefect: suppressToast,
585
675
  onFail: suppressToast,
@@ -588,66 +678,35 @@ export const makeClient = <Locale extends string, R>(
588
678
  ) as any
589
679
  }
590
680
 
591
- function _makeUseAndHandleMutation(
592
- defaultOptions?: Opts<any, any, any, any, any, any, any, any, any>
593
- ) {
594
- return ((self: any, action: any, options: any) => {
595
- return _useAndHandleMutation(
596
- self,
597
- action,
598
- { ...defaultOptions, ...options }
599
- )
600
- }) as unknown as {
601
- <
602
- I,
603
- E extends ResponseErrors,
604
- A,
605
- R,
606
- Request extends TaggedRequestClassAny,
607
- A2 = A,
608
- E2 extends ResponseErrors = E,
609
- R2 = R,
610
- ESuccess = never,
611
- RSuccess = never,
612
- EError = never,
613
- RError = never,
614
- EDefect = never,
615
- RDefect = never
616
- >(
617
- self: RequestHandlerWithInput<I, A, E, R, Request>,
618
- action: string,
619
- options?: Opts<A, E, R, I, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect>
620
- ): Resp<I, A2, E2, R2>
621
- <
622
- E extends ResponseErrors,
623
- A,
624
- Request extends TaggedRequestClassAny,
625
- A2 = A,
626
- E2 extends ResponseErrors = E,
627
- R2 = R,
628
- ESuccess = never,
629
- RSuccess = never,
630
- EError = never,
631
- RError = never,
632
- EDefect = never,
633
- RDefect = never
634
- >(
635
- self: RequestHandler<A, E, R, Request>,
636
- action: string,
637
- options?: Opts<A, E, R, void, A2, E2, R2, ESuccess, RSuccess, EError, RError, EDefect, RDefect>
638
- ): ActResp<A2, E2, R2>
639
- }
640
- }
641
-
642
- const _useSafeMutationWithState = <I, E, A, Request extends TaggedRequestClassAny>(
643
- self: RequestHandlerWithInput<I, A, E, R, Request>
681
+ /**
682
+ * Effect results are converted to Exit, so errors are ignored by default.
683
+ * you should use the result ref to render errors!
684
+ */
685
+ const _useSafeMutationWithState: {
686
+ <I, E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(
687
+ self: RequestHandlerWithInput<I, A, E, R, Request>,
688
+ options?: MutationOptions<A, E, R, A2, E2, R2, I>
689
+ ): readonly [
690
+ ComputedRef<Res<A, E>>,
691
+ (i: I) => Effect<Exit<A2, E2>, never, R2>
692
+ ]
693
+ <E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(
694
+ self: RequestHandler<A, E, R, Request>,
695
+ options?: MutationOptions<A, E, R, A2, E2, R2>
696
+ ): readonly [
697
+ ComputedRef<Res<A, E>>,
698
+ Effect<Exit<A2, E2>, never, R2>
699
+ ]
700
+ } = <I, E, A, R, Request extends TaggedRequestClassAny, A2 = A, E2 = E, R2 = R>(
701
+ self: RequestHandlerWithInput<I, A, E, R, Request> | RequestHandler<A, E, R, Request>,
702
+ options?: MutationOptions<A, E, R, A2, E2, R2, I>
644
703
  ) => {
645
- const [a, b] = _useSafeMutation(self)
704
+ const [a, b] = _useSafeMutation(self as any, options)
646
705
 
647
706
  return tuple(
648
707
  computed(() => mutationResultToVue(a.value)),
649
708
  b
650
- )
709
+ ) as any
651
710
  }
652
711
 
653
712
  const _buildFormFromSchema = <
@@ -722,6 +781,7 @@ export const makeClient = <Locale extends string, R>(
722
781
  useHandleRequestWithToast: _useHandleRequestWithToast,
723
782
  buildFormFromSchema: _buildFormFromSchema,
724
783
  useSafeQuery: _useSafeQuery,
725
- useSafeMutation: _useSafeMutation
784
+ useSafeMutation: _useSafeMutation,
785
+ useUnsafeMutation: _useUnsafeMutation
726
786
  }
727
787
  }