@effect-app/vue 1.22.4 → 1.23.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 +19 -0
- package/_cjs/errorReporter.cjs +12 -12
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/internal.cjs +1 -13
- package/_cjs/internal.cjs.map +1 -1
- package/_cjs/makeClient.cjs +8 -8
- package/_cjs/makeClient.cjs.map +1 -1
- package/_cjs/mutate.cjs +79 -75
- package/_cjs/mutate.cjs.map +1 -1
- package/_cjs/query.cjs +86 -83
- package/_cjs/query.cjs.map +1 -1
- package/_cjs/runtime.cjs +0 -9
- package/_cjs/runtime.cjs.map +1 -1
- package/dist/errorReporter.d.ts +3 -3
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +2 -2
- package/dist/form.d.ts +2 -2
- package/dist/form.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -11
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -13
- package/dist/makeClient.d.ts +35 -35
- package/dist/makeClient.d.ts.map +1 -1
- package/dist/makeClient.js +8 -7
- package/dist/mutate.d.ts +12 -24
- package/dist/mutate.d.ts.map +1 -1
- package/dist/mutate.js +67 -63
- package/dist/query.d.ts +14 -31
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +97 -94
- package/dist/runtime.d.ts +0 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1 -5
- package/package.json +4 -4
- package/src/errorReporter.ts +3 -3
- package/src/form.ts +2 -2
- package/src/internal.ts +1 -24
- package/src/makeClient.ts +38 -35
- package/src/mutate.ts +123 -118
- package/src/query.ts +172 -167
- package/src/runtime.ts +0 -5
package/dist/query.js
CHANGED
|
@@ -8,103 +8,106 @@ import { useQuery } from "@tanstack/vue-query";
|
|
|
8
8
|
import { Cause, Effect, Option, Runtime, S } from "effect-app";
|
|
9
9
|
import { ServiceUnavailableError } from "effect-app/client";
|
|
10
10
|
import { computed, ref } from "vue";
|
|
11
|
-
import { makeQueryKey, reportRuntimeError
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
A,
|
|
29
|
-
E,
|
|
30
|
-
ApiConfig | HttpClient.HttpClient
|
|
31
|
-
>
|
|
32
|
-
mapPath: string
|
|
33
|
-
name: string
|
|
34
|
-
},
|
|
35
|
-
*/
|
|
36
|
-
argOrOptions, options) {
|
|
37
|
-
return Effect.isEffect(self.handler)
|
|
38
|
-
? useSafeQuery_(self, undefined, argOrOptions)
|
|
39
|
-
: useSafeQuery_(self, argOrOptions, options);
|
|
40
|
-
}
|
|
41
|
-
// TODO: options
|
|
42
|
-
// declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryReturnType<TData, TError>;
|
|
43
|
-
// declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryDefinedReturnType<TData, TError>;
|
|
44
|
-
// declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>, queryClient?: QueryClient): UseQueryReturnType<TData, TError>;
|
|
45
|
-
export const useSafeQuery_ = (q, arg, options = {} // TODO
|
|
46
|
-
) => {
|
|
47
|
-
const arr = arg;
|
|
48
|
-
const req = !arg
|
|
49
|
-
? undefined
|
|
50
|
-
: typeof arr === "function"
|
|
51
|
-
? {
|
|
52
|
-
get value() {
|
|
53
|
-
return arr();
|
|
11
|
+
import { makeQueryKey, reportRuntimeError } from "./internal.js";
|
|
12
|
+
export const makeQuery = (runtime) => {
|
|
13
|
+
const runPromise = Runtime.runPromise(runtime);
|
|
14
|
+
// TODO: options
|
|
15
|
+
// declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryReturnType<TData, TError>;
|
|
16
|
+
// declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryDefinedReturnType<TData, TError>;
|
|
17
|
+
// declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>, queryClient?: QueryClient): UseQueryReturnType<TData, TError>;
|
|
18
|
+
const useSafeQuery_ = (q, arg, options = {} // TODO
|
|
19
|
+
) => {
|
|
20
|
+
const arr = arg;
|
|
21
|
+
const req = !arg
|
|
22
|
+
? undefined
|
|
23
|
+
: typeof arr === "function"
|
|
24
|
+
? {
|
|
25
|
+
get value() {
|
|
26
|
+
return arr();
|
|
27
|
+
}
|
|
54
28
|
}
|
|
29
|
+
: ref(arg);
|
|
30
|
+
const queryKey = makeQueryKey(q.name);
|
|
31
|
+
const handler = q.handler;
|
|
32
|
+
const r = useQuery(Effect.isEffect(handler)
|
|
33
|
+
? {
|
|
34
|
+
...options,
|
|
35
|
+
retry: (retryCount, error) => {
|
|
36
|
+
if (Runtime.isFiberFailure(error)) {
|
|
37
|
+
const cause = error[Runtime.FiberFailureCauseId];
|
|
38
|
+
const sq = Cause.squash(cause);
|
|
39
|
+
if (!isHttpRequestError(sq) && !isHttpResponseError(sq) && !S.is(ServiceUnavailableError)(sq)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return retryCount < 5;
|
|
44
|
+
},
|
|
45
|
+
queryKey,
|
|
46
|
+
queryFn: ({ signal }) => runPromise(handler
|
|
47
|
+
.pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`query ${q.name}`, { captureStackTrace: false })), { signal })
|
|
55
48
|
}
|
|
56
|
-
:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const sq = Cause.squash(cause);
|
|
66
|
-
if (!isHttpRequestError(sq) && !isHttpResponseError(sq) && !S.is(ServiceUnavailableError)(sq)) {
|
|
67
|
-
return false;
|
|
49
|
+
: {
|
|
50
|
+
...options,
|
|
51
|
+
retry: (retryCount, error) => {
|
|
52
|
+
if (Runtime.isFiberFailure(error)) {
|
|
53
|
+
const cause = error[Runtime.FiberFailureCauseId];
|
|
54
|
+
const sq = Cause.squash(cause);
|
|
55
|
+
if (!isHttpRequestError(sq) && !isHttpResponseError(sq) && !S.is(ServiceUnavailableError)(sq)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
68
58
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
59
|
+
return retryCount < 5;
|
|
60
|
+
},
|
|
61
|
+
queryKey: [...queryKey, req],
|
|
62
|
+
queryFn: ({ signal }) => runPromise(handler(req.value)
|
|
63
|
+
.pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`query ${q.name}`, { captureStackTrace: false })), { signal })
|
|
64
|
+
});
|
|
65
|
+
const result = computed(() => swrToQuery({
|
|
66
|
+
error: r.error.value ?? undefined,
|
|
67
|
+
data: r.data.value,
|
|
68
|
+
isValidating: r.isFetching.value
|
|
69
|
+
}));
|
|
70
|
+
const latestSuccess = computed(() => Option.getOrUndefined(Result.value(result.value)));
|
|
71
|
+
return [result, latestSuccess, r.refetch, r];
|
|
72
|
+
};
|
|
73
|
+
function swrToQuery(r) {
|
|
74
|
+
if (r.error) {
|
|
75
|
+
return Result.failureWithPrevious(r.error[Runtime.FiberFailureCauseId], r.data === undefined ? Option.none() : Option.some(Result.success(r.data)), r.isValidating);
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const cause = error[Runtime.FiberFailureCauseId];
|
|
81
|
-
const sq = Cause.squash(cause);
|
|
82
|
-
if (!isHttpRequestError(sq) && !isHttpResponseError(sq) && !S.is(ServiceUnavailableError)(sq)) {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return retryCount < 5;
|
|
87
|
-
},
|
|
88
|
-
queryKey: [...queryKey, req],
|
|
89
|
-
queryFn: ({ signal }) => run
|
|
90
|
-
.value(handler(req.value)
|
|
91
|
-
.pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`query ${q.name}`, { captureStackTrace: false })), { signal })
|
|
92
|
-
});
|
|
93
|
-
const result = computed(() => swrToQuery({
|
|
94
|
-
error: r.error.value ?? undefined,
|
|
95
|
-
data: r.data.value,
|
|
96
|
-
isValidating: r.isFetching.value
|
|
97
|
-
}));
|
|
98
|
-
const latestSuccess = computed(() => Option.getOrUndefined(Result.value(result.value)));
|
|
99
|
-
return [result, latestSuccess, r.refetch, r];
|
|
100
|
-
};
|
|
101
|
-
function swrToQuery(r) {
|
|
102
|
-
if (r.error) {
|
|
103
|
-
return Result.failureWithPrevious(r.error[Runtime.FiberFailureCauseId], r.data === undefined ? Option.none() : Option.some(Result.success(r.data)), r.isValidating);
|
|
77
|
+
if (r.data !== undefined) {
|
|
78
|
+
return Result.success(r.data, r.isValidating);
|
|
79
|
+
}
|
|
80
|
+
return Result.initial(r.isValidating);
|
|
104
81
|
}
|
|
105
|
-
|
|
106
|
-
|
|
82
|
+
function useSafeQuery(self,
|
|
83
|
+
/*
|
|
84
|
+
q:
|
|
85
|
+
| {
|
|
86
|
+
handler: (
|
|
87
|
+
req: I
|
|
88
|
+
) => Effect<
|
|
89
|
+
A,
|
|
90
|
+
E,
|
|
91
|
+
R
|
|
92
|
+
>
|
|
93
|
+
mapPath: (req: I) => string
|
|
94
|
+
name: string
|
|
107
95
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
96
|
+
| {
|
|
97
|
+
handler: Effect<
|
|
98
|
+
A,
|
|
99
|
+
E,
|
|
100
|
+
R
|
|
101
|
+
>
|
|
102
|
+
mapPath: string
|
|
103
|
+
name: string
|
|
104
|
+
},
|
|
105
|
+
*/
|
|
106
|
+
argOrOptions, options) {
|
|
107
|
+
return Effect.isEffect(self.handler)
|
|
108
|
+
? useSafeQuery_(self, undefined, argOrOptions)
|
|
109
|
+
: useSafeQuery_(self, argOrOptions, options);
|
|
110
|
+
}
|
|
111
|
+
return useSafeQuery;
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCx3REFBd0Q7QUFDeEQsNERBQTREO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzNGLE9BQU8sS0FBSyxNQUFNLE1BQU0sc0JBQXNCLENBQUE7QUFROUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRW5DLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFrQmhFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFJLE9BQTJCLEVBQUUsRUFBRTtJQUMxRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzlDLGdCQUFnQjtJQUNoQixzUkFBc1I7SUFDdFIsMlJBQTJSO0lBQzNSLHVSQUF1UjtJQUN2UixNQUFNLGFBQWEsR0FBRyxDQUNwQixDQW9CRyxFQUNILEdBQXdCLEVBQ3hCLFVBQXdFLEVBQUUsQ0FBQyxPQUFPO01BQ2xGLEVBQUU7UUFDRixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDZixNQUFNLEdBQUcsR0FBaUIsQ0FBQyxHQUFHO1lBQzVCLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLFVBQVU7Z0JBQzNCLENBQUMsQ0FBRTtvQkFD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
|
package/dist/runtime.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { Config, Exit, Runtime } from "effect";
|
|
|
3
3
|
import { Effect, Layer } from "effect-app";
|
|
4
4
|
import { ApiConfig } from "effect-app/client";
|
|
5
5
|
import * as Scope from "effect/Scope";
|
|
6
|
-
export { initRuntime } from "./internal.js";
|
|
7
6
|
export declare const DefaultApiConfig: Config.Config<{
|
|
8
7
|
apiUrl: string;
|
|
9
8
|
headers: import("effect/Option").Option<import("effect/HashMap").HashMap<string, string>>;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,UAAU,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,UAAU,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,eAAO,MAAM,gBAAgB;;;EAQ3B,CAAA;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,yIAI9C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;;2BAwCkzD,CAAC;;;2BAAqd,CAAC;;;;;;;SApBr0E;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC;;;2BAkB6wD,CAAC;;;2BAAqd,CAAC;;;;;;;EAZr0E;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC;;;2BAU4wD,CAAC;;;2BAAqd,CAAC;;;;;;;GADr0E"}
|
package/dist/runtime.js
CHANGED
|
@@ -3,8 +3,6 @@ import { Config, Exit, Runtime } from "effect";
|
|
|
3
3
|
import { Effect, Layer, Logger } from "effect-app";
|
|
4
4
|
import { ApiConfig } from "effect-app/client";
|
|
5
5
|
import * as Scope from "effect/Scope";
|
|
6
|
-
import { initRuntime } from "./internal.js";
|
|
7
|
-
export { initRuntime } from "./internal.js";
|
|
8
6
|
export const DefaultApiConfig = Config.all({
|
|
9
7
|
apiUrl: Config.string("apiUrl").pipe(Config.withDefault("/api")),
|
|
10
8
|
headers: Config
|
|
@@ -36,7 +34,6 @@ export function makeAppRuntime(layer) {
|
|
|
36
34
|
}
|
|
37
35
|
export function initializeSync(layer) {
|
|
38
36
|
const { clean, runtime } = Effect.runSync(makeAppRuntime(layer));
|
|
39
|
-
initRuntime(runtime);
|
|
40
37
|
return {
|
|
41
38
|
runtime,
|
|
42
39
|
clean: () => Effect.runSync(clean)
|
|
@@ -46,11 +43,10 @@ export function initializeAsync(layer) {
|
|
|
46
43
|
return Effect
|
|
47
44
|
.runPromise(makeAppRuntime(layer))
|
|
48
45
|
.then(({ clean, runtime }) => {
|
|
49
|
-
initRuntime(runtime);
|
|
50
46
|
return {
|
|
51
47
|
runtime,
|
|
52
48
|
clean: () => Effect.runPromise(clean)
|
|
53
49
|
};
|
|
54
50
|
});
|
|
55
51
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUVyQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sRUFBRSxNQUFNO1NBQ1osT0FBTyxDQUNOLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFDZixTQUFTLENBQ1Y7U0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2QixDQUFDLENBQUE7QUFFRixNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQWlCO0lBQzdDLE9BQU8sZUFBZTtTQUNuQixLQUFLO1NBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQVUsS0FBcUI7SUFDM0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDdkcsQ0FBQTtRQUNELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRW5GLE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDdkMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO2dCQUMvQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDekMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2FBQ2xDLENBQUM7WUFDRixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNyQyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBTyxLQUE2RDtJQUNoRyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDaEUsT0FBTztRQUNMLE9BQU87UUFDUCxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDbkMsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFPLEtBQTZEO0lBQ2pHLE9BQU8sTUFBTTtTQUNWLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUMzQixPQUFPO1lBQ0wsT0FBTztZQUNQLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUN0QyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/vue",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.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": "^2.10.8",
|
|
9
|
-
"@tanstack/vue-query": "^5.59.
|
|
9
|
+
"@tanstack/vue-query": "^5.59.13",
|
|
10
10
|
"@vueuse/core": "^11.1.0",
|
|
11
11
|
"query-string": "^9.1.1",
|
|
12
12
|
"@effect-app/core": "1.15.8",
|
|
13
|
+
"@effect-app/vue": "1.23.0",
|
|
13
14
|
"@effect-app/schema": "1.17.8",
|
|
14
|
-
"@effect-app/vue": "1.22.4",
|
|
15
15
|
"effect-app": "1.26.8"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@effect/schema": "^0.75.3",
|
|
23
23
|
"@sentry/browser": "^8.34.0",
|
|
24
24
|
"effect": "^3.9.1",
|
|
25
|
-
"vue": "^3.5.
|
|
25
|
+
"vue": "^3.5.12"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@babel/cli": "^7.25.7",
|
package/src/errorReporter.ts
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
3
3
|
import { dropUndefined } from "@effect-app/core/utils"
|
|
4
4
|
import * as Sentry from "@sentry/browser"
|
|
5
|
-
import { Cause, Effect } from "effect
|
|
5
|
+
import { Cause, Effect } from "effect"
|
|
6
6
|
import { annotateSpanWithError, CauseException, ErrorReported } from "effect-app/client/errors"
|
|
7
7
|
|
|
8
8
|
export function reportError(
|
|
9
9
|
name: string
|
|
10
10
|
) {
|
|
11
|
-
return (cause: Cause<unknown>, extras?: Record<string, unknown>) =>
|
|
11
|
+
return (cause: Cause.Cause<unknown>, extras?: Record<string, unknown>) =>
|
|
12
12
|
Effect.gen(function*() {
|
|
13
13
|
yield* annotateSpanWithError(cause, name)
|
|
14
14
|
if (Cause.isInterrupted(cause)) {
|
|
@@ -46,7 +46,7 @@ function reportSentry(
|
|
|
46
46
|
export function logError<E>(
|
|
47
47
|
name: string
|
|
48
48
|
) {
|
|
49
|
-
return (cause: Cause<E>, extras?: Record<string, unknown>) =>
|
|
49
|
+
return (cause: Cause.Cause<E>, extras?: Record<string, unknown>) =>
|
|
50
50
|
Effect.gen(function*() {
|
|
51
51
|
if (Cause.isInterrupted(cause)) {
|
|
52
52
|
yield* Effect.logDebug("Interrupted").pipe(Effect.annotateLogs(dropUndefined({ extras })))
|
package/src/form.ts
CHANGED
|
@@ -60,12 +60,12 @@ export interface DiscriminatedUnionFieldInfo<T> {
|
|
|
60
60
|
_tag: "DiscriminatedUnionFieldInfo"
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
type NestedFieldInfoKey<Key> = [Key] extends [Record<PropertyKey, any>]
|
|
63
|
+
export type NestedFieldInfoKey<Key> = [Key] extends [Record<PropertyKey, any>]
|
|
64
64
|
? Unbranded<Key> extends Record<PropertyKey, any> ? NestedFieldInfo<Key>
|
|
65
65
|
: FieldInfo<Key>
|
|
66
66
|
: FieldInfo<Key>
|
|
67
67
|
|
|
68
|
-
type DistributiveNestedFieldInfoKey<Key> = Key extends any ? NestedFieldInfoKey<Key> : never
|
|
68
|
+
export type DistributiveNestedFieldInfoKey<Key> = Key extends any ? NestedFieldInfoKey<Key> : never
|
|
69
69
|
|
|
70
70
|
export type NestedFieldInfo<To extends Record<PropertyKey, any>> = // exploit eventual _tag field to propagate the unique tag
|
|
71
71
|
{
|
package/src/internal.ts
CHANGED
|
@@ -1,30 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { Effect } from "effect-app"
|
|
3
|
-
import { pipe, Runtime } from "effect-app"
|
|
4
|
-
import type { ApiConfig } from "effect-app/client"
|
|
1
|
+
import { pipe } from "effect-app"
|
|
5
2
|
import { reportError } from "./errorReporter.js"
|
|
6
3
|
|
|
7
|
-
export const run = {
|
|
8
|
-
value<E, A>(
|
|
9
|
-
_: Effect<A, E, ApiConfig | HttpClient.HttpClient>,
|
|
10
|
-
_options?: { readonly signal?: AbortSignal }
|
|
11
|
-
): Promise<A> {
|
|
12
|
-
throw new Error("Runtime not initialized, please run `initRuntime` first")
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
4
|
export const reportRuntimeError = reportError("Runtime")
|
|
16
|
-
export function initRuntime<A>(rt: Runtime.Runtime<A | ApiConfig | HttpClient.HttpClient>) {
|
|
17
|
-
const runPromise = Runtime.runPromise(rt)
|
|
18
|
-
run.value = function<E, A>(
|
|
19
|
-
self: Effect<A, E, ApiConfig | HttpClient.HttpClient>,
|
|
20
|
-
options?: { readonly signal?: AbortSignal }
|
|
21
|
-
): Promise<A> {
|
|
22
|
-
return runPromise(
|
|
23
|
-
self,
|
|
24
|
-
options
|
|
25
|
-
)
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
5
|
|
|
29
6
|
// $Project/$Configuration.Index
|
|
30
7
|
// -> "$Project", "$Configuration", "Index"
|
package/src/makeClient.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import { flow, pipe, tuple } from "@effect-app/core/Function"
|
|
3
|
-
import {
|
|
3
|
+
import type { MutationResult } from "@effect-app/vue"
|
|
4
|
+
import { Result } from "@effect-app/vue"
|
|
4
5
|
import * as Sentry from "@sentry/browser"
|
|
5
6
|
import { type MaybeRefOrGetter, type Pausable, useIntervalFn, type UseIntervalFnOptions } from "@vueuse/core"
|
|
6
7
|
import type { Either } from "effect-app"
|
|
7
8
|
import { Array, Cause, Effect, Match, Option, Runtime, S } from "effect-app"
|
|
8
|
-
import { type
|
|
9
|
-
import type { HttpClient } from "effect-app/http"
|
|
9
|
+
import { type SupportedErrors } from "effect-app/client"
|
|
10
10
|
import { Failure, Success } from "effect-app/Operations"
|
|
11
11
|
import { dropUndefinedT } from "effect-app/utils"
|
|
12
|
+
import type { R } from "vitest/dist/chunks/config.Crbj2GAb.js"
|
|
12
13
|
import { computed, type ComputedRef } from "vue"
|
|
13
14
|
import type { MakeIntlReturn } from "./makeIntl.js"
|
|
14
|
-
import type { MutationOptions } from "./mutate.js"
|
|
15
|
+
import type { MakeMutation, MutationOptions } from "./mutate.js"
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* Use this after handling an error yourself, still continueing on the Error track, but the error will not be reported.
|
|
@@ -53,37 +54,25 @@ export interface Opts<A, I = void> extends MutationOptions<A, I> {
|
|
|
53
54
|
successToast?: (a: A) => any
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
export const useSafeMutationWithState = <I, E, A>(self: {
|
|
57
|
-
handler: (i: I) => Effect<A, E, ApiConfig | HttpClient.HttpClient>
|
|
58
|
-
name: string
|
|
59
|
-
}) => {
|
|
60
|
-
const [a, b] = useSafeMutation(self)
|
|
61
|
-
|
|
62
|
-
return tuple(
|
|
63
|
-
computed(() => mutationResultToVue(a.value)),
|
|
64
|
-
b
|
|
65
|
-
)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
57
|
export const withSuccess: {
|
|
69
|
-
<I, E extends ResponseErrors, A, X>(
|
|
58
|
+
<I, E extends ResponseErrors, A, X, R>(
|
|
70
59
|
self: {
|
|
71
|
-
handler: (i: I) => Effect<A, E,
|
|
60
|
+
handler: (i: I) => Effect<A, E, R>
|
|
72
61
|
name: string
|
|
73
62
|
},
|
|
74
63
|
onSuccess: (a: A, i: I) => Promise<X>
|
|
75
64
|
): {
|
|
76
|
-
handler: (i: I) => Effect<X, E,
|
|
65
|
+
handler: (i: I) => Effect<X, E, R>
|
|
77
66
|
name: string
|
|
78
67
|
}
|
|
79
|
-
<E extends ResponseErrors, A, X>(
|
|
68
|
+
<E extends ResponseErrors, A, X, R>(
|
|
80
69
|
self: {
|
|
81
|
-
handler: Effect<A, E,
|
|
70
|
+
handler: Effect<A, E, R>
|
|
82
71
|
name: string
|
|
83
72
|
},
|
|
84
73
|
onSuccess: (_: A) => Promise<X>
|
|
85
74
|
): {
|
|
86
|
-
handler: Effect<X, E,
|
|
75
|
+
handler: Effect<X, E, R>
|
|
87
76
|
name: string
|
|
88
77
|
}
|
|
89
78
|
} = (self: any, onSuccess: any): any => ({
|
|
@@ -94,7 +83,7 @@ export const withSuccess: {
|
|
|
94
83
|
(
|
|
95
84
|
self.handler as (
|
|
96
85
|
i: any
|
|
97
|
-
) => Effect<any, any,
|
|
86
|
+
) => Effect<any, any, R>
|
|
98
87
|
)(i),
|
|
99
88
|
Effect.flatMap((_) =>
|
|
100
89
|
Effect.promise(() => onSuccess(_, i)).pipe(
|
|
@@ -106,24 +95,24 @@ export const withSuccess: {
|
|
|
106
95
|
})
|
|
107
96
|
|
|
108
97
|
export const withSuccessE: {
|
|
109
|
-
<I, E extends ResponseErrors, A, E2, X>(
|
|
98
|
+
<I, E extends ResponseErrors, A, E2, X, R>(
|
|
110
99
|
self: {
|
|
111
|
-
handler: (i: I) => Effect<A, E,
|
|
100
|
+
handler: (i: I) => Effect<A, E, R>
|
|
112
101
|
name: string
|
|
113
102
|
},
|
|
114
103
|
onSuccessE: (_: A, i: I) => Effect<X, E2>
|
|
115
104
|
): {
|
|
116
|
-
handler: (i: I) => Effect<X, E | E2,
|
|
105
|
+
handler: (i: I) => Effect<X, E | E2, R>
|
|
117
106
|
name: string
|
|
118
107
|
}
|
|
119
|
-
<E extends ResponseErrors, A, E2, X>(
|
|
108
|
+
<E extends ResponseErrors, A, E2, X, R>(
|
|
120
109
|
self: {
|
|
121
|
-
handler: Effect<A, E,
|
|
110
|
+
handler: Effect<A, E, R>
|
|
122
111
|
name: string
|
|
123
112
|
},
|
|
124
113
|
onSuccessE: (_: A) => Effect<X, E2>
|
|
125
114
|
): {
|
|
126
|
-
handler: Effect<X, E | E2,
|
|
115
|
+
handler: Effect<X, E | E2, R>
|
|
127
116
|
name: string
|
|
128
117
|
}
|
|
129
118
|
} = (self: any, onSuccessE: any): any => {
|
|
@@ -188,14 +177,15 @@ export function mutationResultToVue<A, E>(
|
|
|
188
177
|
}
|
|
189
178
|
}
|
|
190
179
|
|
|
191
|
-
export const makeClient = <Locale extends string>(
|
|
180
|
+
export const makeClient = <Locale extends string, R>(
|
|
192
181
|
useIntl: MakeIntlReturn<Locale>["useIntl"],
|
|
193
182
|
useToast: () => {
|
|
194
183
|
error: (message: string) => void
|
|
195
184
|
warning: (message: string) => void
|
|
196
185
|
success: (message: string) => void
|
|
197
186
|
},
|
|
198
|
-
messages: Record<string, string | undefined> = {}
|
|
187
|
+
messages: Record<string, string | undefined> = {},
|
|
188
|
+
useSafeMutation: MakeMutation<R>
|
|
199
189
|
) => {
|
|
200
190
|
const useHandleRequestWithToast = () => {
|
|
201
191
|
const toast = useToast()
|
|
@@ -356,7 +346,7 @@ export const makeClient = <Locale extends string>(
|
|
|
356
346
|
const useAndHandleMutation: {
|
|
357
347
|
<I, E extends ResponseErrors, A>(
|
|
358
348
|
self: {
|
|
359
|
-
handler: (i: I) => Effect<A, E,
|
|
349
|
+
handler: (i: I) => Effect<A, E, R>
|
|
360
350
|
name: string
|
|
361
351
|
},
|
|
362
352
|
action: string,
|
|
@@ -364,7 +354,7 @@ export const makeClient = <Locale extends string>(
|
|
|
364
354
|
): Resp<I, A, E>
|
|
365
355
|
<E extends ResponseErrors, A>(
|
|
366
356
|
self: {
|
|
367
|
-
handler: Effect<A, E,
|
|
357
|
+
handler: Effect<A, E, R>
|
|
368
358
|
name: string
|
|
369
359
|
},
|
|
370
360
|
action: string,
|
|
@@ -420,7 +410,7 @@ export const makeClient = <Locale extends string>(
|
|
|
420
410
|
}) as {
|
|
421
411
|
<I, E extends ResponseErrors, A>(
|
|
422
412
|
self: {
|
|
423
|
-
handler: (i: I) => Effect<A, E,
|
|
413
|
+
handler: (i: I) => Effect<A, E, R>
|
|
424
414
|
name: string
|
|
425
415
|
},
|
|
426
416
|
action: string,
|
|
@@ -428,7 +418,7 @@ export const makeClient = <Locale extends string>(
|
|
|
428
418
|
): Resp<I, A, E>
|
|
429
419
|
<E extends ResponseErrors, A>(
|
|
430
420
|
self: {
|
|
431
|
-
handler: Effect<A, E,
|
|
421
|
+
handler: Effect<A, E, R>
|
|
432
422
|
name: string
|
|
433
423
|
},
|
|
434
424
|
action: string,
|
|
@@ -437,7 +427,20 @@ export const makeClient = <Locale extends string>(
|
|
|
437
427
|
}
|
|
438
428
|
}
|
|
439
429
|
|
|
430
|
+
const useSafeMutationWithState = <I, E, A>(self: {
|
|
431
|
+
handler: (i: I) => Effect<A, E, R>
|
|
432
|
+
name: string
|
|
433
|
+
}) => {
|
|
434
|
+
const [a, b] = useSafeMutation(self)
|
|
435
|
+
|
|
436
|
+
return tuple(
|
|
437
|
+
computed(() => mutationResultToVue(a.value)),
|
|
438
|
+
b
|
|
439
|
+
)
|
|
440
|
+
}
|
|
441
|
+
|
|
440
442
|
return {
|
|
443
|
+
useSafeMutationWithState,
|
|
441
444
|
useAndHandleMutation,
|
|
442
445
|
makeUseAndHandleMutation,
|
|
443
446
|
useHandleRequestWithToast
|