@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/CHANGELOG.md +18 -0
- package/dist/form.d.ts +5 -0
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +4 -4
- package/dist/lib.d.ts +1 -1
- package/dist/makeClient.d.ts +29 -22
- package/dist/makeClient.d.ts.map +1 -1
- package/dist/makeClient.js +48 -31
- package/dist/mutate.d.ts +9 -11
- package/dist/mutate.d.ts.map +1 -1
- package/dist/mutate.js +18 -13
- package/package.json +9 -9
- package/src/form.ts +3 -3
- package/src/makeClient.ts +146 -86
- package/src/mutate.ts +44 -44
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?:
|
|
34
|
-
options?:
|
|
29
|
+
filters?: InvalidateQueryFilters | undefined;
|
|
30
|
+
options?: InvalidateOptions | undefined;
|
|
35
31
|
}[];
|
|
36
32
|
}
|
|
37
|
-
export declare const asResult:
|
|
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>):
|
|
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>):
|
|
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
|
package/dist/mutate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAEpF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAEpF,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAU,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAEjH,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAI3C,eAAO,MAAM,WAAW,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,aAQ9C,CAAA;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EACtC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAClC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAoBX;AAED,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;CACrC;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;AACtE,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,mLAiBlD;AAGD,MAAM,WAAW,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;IACxE;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACvE;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK;QAC1D,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAA;QAC5C,OAAO,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;KACxC,EAAE,CAAA;CACJ;AAaD,eAAO,MAAM,QAAQ,EAAE;IACrB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACvB,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAC/E,CAAC,IAAI,SAAS,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAC1C,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;CAkCnG,CAAA;AAED,eAAO,MAAM,YAAY;KAMpB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,SAAS,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAC9D,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,YACxC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAChD,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC9B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,SAAS,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAC3D,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,YAC5B,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAC7C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CAmDxB,CAAA;AAGD,MAAM,WAAW,aAAc,SAAQ,UAAU,CAAC,OAAO,YAAY,CAAC;CAAG"}
|
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
|
|
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 = (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
|
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
|
|
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 =
|
|
102
|
+
const r = Effect.isEffect(handler) ? handle(handler) : (i) => handle(handler(i), i);
|
|
98
103
|
return r;
|
|
99
104
|
};
|
|
100
|
-
return
|
|
105
|
+
return useMutation;
|
|
101
106
|
};
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxzQkFBc0IsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFdkMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBbUIsRUFBRSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDL0MsNkZBQTZGO0lBQzdGLG9GQUFvRjtJQUNwRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDakYsSUFBSSxDQUFDLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6RCxPQUFP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
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/vue",
|
|
3
|
-
"version": "2.
|
|
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.
|
|
10
|
-
"@vueuse/core": "^12.
|
|
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.
|
|
12
|
+
"effect-app": "2.32.3"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"@effect/platform": "^0.77.
|
|
16
|
-
"@effect/platform-browser": "^0.56.
|
|
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.
|
|
20
|
-
"effect": "^3.13.
|
|
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.
|
|
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(
|
|
46
|
+
? parseFloat(v)
|
|
47
47
|
: type === "int"
|
|
48
|
-
? parseInt(
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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,
|
|
388
|
-
} = (
|
|
389
|
-
self:
|
|
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
|
|
431
|
+
const handler = self.handler
|
|
432
|
+
const [a, b] = asResult(_useUnsafeMutation({
|
|
395
433
|
...self,
|
|
396
|
-
handler: Effect.isEffect(
|
|
434
|
+
handler: Effect.isEffect(handler)
|
|
397
435
|
? (pipe(
|
|
398
436
|
Effect.annotateCurrentSpan({ action }),
|
|
399
|
-
Effect.
|
|
437
|
+
Effect.zipRight(handler)
|
|
400
438
|
) as any)
|
|
401
|
-
: (...args: any
|
|
439
|
+
: (...args: [any]) =>
|
|
402
440
|
pipe(
|
|
403
441
|
Effect.annotateCurrentSpan({ action }),
|
|
404
|
-
Effect.
|
|
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] =
|
|
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
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
<
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
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
|
}
|