@effect-app/vue 1.4.12 → 1.4.14
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 +16 -0
- package/_cjs/mutate.cjs +40 -15
- package/_cjs/mutate.cjs.map +1 -1
- package/_cjs/query.cjs +2 -2
- package/_cjs/query.cjs.map +1 -1
- package/dist/mutate.d.ts +13 -7
- package/dist/mutate.d.ts.map +1 -1
- package/dist/mutate.js +36 -14
- package/dist/query.js +3 -3
- package/package.json +4 -4
- package/src/mutate.ts +66 -20
- package/src/query.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @effect-app/vue
|
|
2
2
|
|
|
3
|
+
## 1.4.14
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c10097e: clear namespace not root
|
|
8
|
+
- Updated dependencies [c10097e]
|
|
9
|
+
- @effect-app/vue@1.4.14
|
|
10
|
+
|
|
11
|
+
## 1.4.13
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- improve query/mutation spans and handling
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
- @effect-app/vue@1.4.13
|
|
18
|
+
|
|
3
19
|
## 1.4.12
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/_cjs/mutate.cjs
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.getQueryKey = void 0;
|
|
6
7
|
exports.make = make;
|
|
7
8
|
exports.useSafeMutation = void 0;
|
|
8
9
|
var _Function = require("@effect-app/core/Function");
|
|
10
|
+
var Result = _interopRequireWildcard(require("@effect-rx/rx/Result"));
|
|
9
11
|
var _vueQuery = require("@tanstack/vue-query");
|
|
10
12
|
var _effectApp = require("effect-app");
|
|
11
13
|
var _utils = require("effect-app/utils");
|
|
@@ -13,7 +15,6 @@ var _Cause = require("effect/Cause");
|
|
|
13
15
|
var Either = _interopRequireWildcard(require("effect/Either"));
|
|
14
16
|
var _vue = require("vue");
|
|
15
17
|
var _internal = require("./internal.cjs");
|
|
16
|
-
var Result = _interopRequireWildcard(require("@effect-rx/rx/Result"));
|
|
17
18
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
19
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
20
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
@@ -26,15 +27,33 @@ function make(self) {
|
|
|
26
27
|
const latestSuccess = (0, _vue.computed)(() => _effectApp.Option.getOrUndefined(Result.value(result.value)));
|
|
27
28
|
return (0, _Function.tuple)(result, latestSuccess, execute);
|
|
28
29
|
}
|
|
30
|
+
const getQueryKey = name => {
|
|
31
|
+
const key = (0, _internal.makeQueryKey)(name);
|
|
32
|
+
const ns = key.filter(_ => _.startsWith("$"));
|
|
33
|
+
return ns.length ? ns : undefined;
|
|
34
|
+
};
|
|
35
|
+
// TODO: more efficient invalidation, including args etc
|
|
36
|
+
// return Effect.promise(() => queryClient.invalidateQueries({
|
|
37
|
+
// predicate: (_) => nses.includes(_.queryKey.filter((_) => _.startsWith("$")).join("/"))
|
|
38
|
+
// }))
|
|
39
|
+
/*
|
|
40
|
+
// const nses: string[] = []
|
|
41
|
+
// for (let i = 0; i < ns.length; i++) {
|
|
42
|
+
// nses.push(ns.slice(0, i + 1).join("/"))
|
|
43
|
+
// }
|
|
44
|
+
*/
|
|
29
45
|
/**
|
|
30
46
|
* Pass a function that returns an Effect, e.g from a client action, or an Effect
|
|
31
47
|
* Returns a tuple with state ref and execution function which reports errors as Toast.
|
|
32
48
|
*/
|
|
49
|
+
exports.getQueryKey = getQueryKey;
|
|
33
50
|
const useSafeMutation = (self, options) => {
|
|
34
51
|
const queryClient = (0, _vueQuery.useQueryClient)();
|
|
35
52
|
const state = (0, _vue.ref)({
|
|
36
53
|
_tag: "Initial"
|
|
37
54
|
});
|
|
55
|
+
const onSuccess = options?.onSuccess;
|
|
56
|
+
const invalidateQueries = (filters, options) => _effectApp.Effect.promise(() => queryClient.invalidateQueries(filters, options));
|
|
38
57
|
function handleExit(exit) {
|
|
39
58
|
return _effectApp.Effect.sync(() => {
|
|
40
59
|
if (_effectApp.Exit.isSuccess(exit)) {
|
|
@@ -77,21 +96,27 @@ const useSafeMutation = (self, options) => {
|
|
|
77
96
|
state.value = {
|
|
78
97
|
_tag: "Loading"
|
|
79
98
|
};
|
|
80
|
-
}).pipe(_effectApp.Effect.andThen(effect),
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
99
|
+
}).pipe(_effectApp.Effect.andThen(effect), _effectApp.Effect.tap(() => _effectApp.Effect.suspend(() => {
|
|
100
|
+
const queryKey = getQueryKey(self.name);
|
|
101
|
+
if (options?.queryInvalidation) {
|
|
102
|
+
const opts = options.queryInvalidation(queryKey, self.name);
|
|
103
|
+
if (!opts.length) {
|
|
104
|
+
return _effectApp.Effect.void;
|
|
105
|
+
}
|
|
106
|
+
return _effectApp.Effect.andThen(_effectApp.Effect.annotateCurrentSpan({
|
|
107
|
+
queryKey,
|
|
108
|
+
opts
|
|
109
|
+
}), _effectApp.Effect.forEach(opts, _ => invalidateQueries(_.filters, _.options), {
|
|
110
|
+
concurrency: "inherit"
|
|
111
|
+
})).pipe(_effectApp.Effect.withSpan("client.query.invalidation"));
|
|
86
112
|
}
|
|
87
|
-
return _effectApp.Effect.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
})), _effectApp.Effect.tapDefect(_internal.reportRuntimeError), _effectApp.Effect.exit, _effectApp.Effect.flatMap(handleExit)), (0, _utils.dropUndefinedT)({
|
|
113
|
+
if (!queryKey) return _effectApp.Effect.void;
|
|
114
|
+
return _effectApp.Effect.andThen(_effectApp.Effect.annotateCurrentSpan({
|
|
115
|
+
queryKey
|
|
116
|
+
}), invalidateQueries({
|
|
117
|
+
queryKey
|
|
118
|
+
})).pipe(_effectApp.Effect.withSpan("client.query.invalidation"));
|
|
119
|
+
})), _effectApp.Effect.tapDefect(_internal.reportRuntimeError), _effectApp.Effect.tap(i => onSuccess ? _effectApp.Effect.promise(() => onSuccess(i)) : _effectApp.Effect.void), _effectApp.Effect.exit, _effectApp.Effect.flatMap(handleExit), _effectApp.Effect.withSpan(`mutation ${self.name}`)), (0, _utils.dropUndefinedT)({
|
|
95
120
|
signal
|
|
96
121
|
}));
|
|
97
122
|
};
|
package/_cjs/mutate.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.cjs","names":["_Function","require","_vueQuery","_effectApp","_utils","_Cause","Either","
|
|
1
|
+
{"version":3,"file":"mutate.cjs","names":["_Function","require","Result","_interopRequireWildcard","_vueQuery","_effectApp","_utils","_Cause","Either","_vue","_internal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","make","self","result","shallowRef","initial","execute","Effect","sync","value","waiting","pipe","andThen","map","_","body","exit","fromExit","flatMap","latestSuccess","computed","Option","getOrUndefined","tuple","getQueryKey","name","key","makeQueryKey","ns","filter","startsWith","length","undefined","exports","useSafeMutation","options","queryClient","useQueryClient","state","ref","_tag","onSuccess","invalidateQueries","filters","promise","handleExit","Exit","isSuccess","data","right","err","Cause","failureOption","cause","isSome","error","left","died","dieOption","interrupted","interruptOption","InterruptedException","Error","exec","fst","snd","effect","signal","isEffect","handler","run","tap","suspend","queryKey","queryInvalidation","opts","void","annotateCurrentSpan","forEach","concurrency","withSpan","tapDefect","reportRuntimeError","dropUndefinedT"],"sources":["../src/mutate.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/_cjs/query.cjs
CHANGED
|
@@ -63,7 +63,7 @@ const useSafeQuery_ = (q, arg, options = {} // TODO
|
|
|
63
63
|
queryKey,
|
|
64
64
|
queryFn: ({
|
|
65
65
|
signal
|
|
66
|
-
}) => _internal.run.value(_effectApp.Effect.map(handler, _ => _.body).pipe(_effectApp.Effect.tapDefect(_internal.reportRuntimeError)), {
|
|
66
|
+
}) => _internal.run.value(_effectApp.Effect.map(handler, _ => _.body).pipe(_effectApp.Effect.tapDefect(_internal.reportRuntimeError), _effectApp.Effect.withSpan(`query ${q.name}`)), {
|
|
67
67
|
signal
|
|
68
68
|
})
|
|
69
69
|
} : {
|
|
@@ -71,7 +71,7 @@ const useSafeQuery_ = (q, arg, options = {} // TODO
|
|
|
71
71
|
queryKey: [...queryKey, req],
|
|
72
72
|
queryFn: ({
|
|
73
73
|
signal
|
|
74
|
-
}) => _internal.run.value(_effectApp.Effect.map(handler(req.value), _ => _.body).pipe(_effectApp.Effect.tapDefect(_internal.reportRuntimeError)), {
|
|
74
|
+
}) => _internal.run.value(_effectApp.Effect.map(handler(req.value), _ => _.body).pipe(_effectApp.Effect.tapDefect(_internal.reportRuntimeError), _effectApp.Effect.withSpan(`query ${q.name}`)), {
|
|
75
75
|
signal
|
|
76
76
|
})
|
|
77
77
|
});
|
package/_cjs/query.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.cjs","names":["Result","_interopRequireWildcard","require","_vueQuery","_effectApp","_vue","_internal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useSafeQuery","self","argOrOptions","options","Effect","isEffect","handler","useSafeQuery_","undefined","q","arg","arr","req","value","ref","queryKey","makeQueryKey","name","useQuery","queryFn","signal","run","map","_","body","pipe","tapDefect","reportRuntimeError","result","computed","swrToQuery","error","data","isValidating","isFetching","latestSuccess","Option","getOrUndefined","refetch","exports","failureWithPrevious","Runtime","FiberFailureCauseId","none","some","success","initial"],"sources":["../src/query.ts"],"sourcesContent":[null],"mappings":"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
|
|
1
|
+
{"version":3,"file":"query.cjs","names":["Result","_interopRequireWildcard","require","_vueQuery","_effectApp","_vue","_internal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useSafeQuery","self","argOrOptions","options","Effect","isEffect","handler","useSafeQuery_","undefined","q","arg","arr","req","value","ref","queryKey","makeQueryKey","name","useQuery","queryFn","signal","run","map","_","body","pipe","tapDefect","reportRuntimeError","withSpan","result","computed","swrToQuery","error","data","isValidating","isFetching","latestSuccess","Option","getOrUndefined","refetch","exports","failureWithPrevious","Runtime","FiberFailureCauseId","none","some","success","initial"],"sources":["../src/query.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/mutate.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import * as Result from "@effect-rx/rx/Result";
|
|
1
2
|
import type * as HttpClient from "@effect/platform/Http/Client";
|
|
3
|
+
import type { InvalidateOptions, InvalidateQueryFilters } from "@tanstack/vue-query";
|
|
2
4
|
import { Effect } from "effect-app";
|
|
3
5
|
import type { ApiConfig, FetchResponse } from "effect-app/client";
|
|
4
6
|
import * as Either from "effect/Either";
|
|
7
|
+
import type { MaybeRefDeep } from "node_modules/@tanstack/vue-query/build/modern/types.js";
|
|
5
8
|
import type { ComputedRef, Ref } from "vue";
|
|
6
|
-
import * as Result from "@effect-rx/rx/Result";
|
|
7
9
|
export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T);
|
|
8
10
|
export declare function make<A, E, R>(self: Effect<FetchResponse<A>, E, R>): readonly [import("vue").ShallowRef<Result.Result<A, E>>, ComputedRef<A | undefined>, Effect.Effect<Result.Success<A, E> | Result.Failure<A, E>, never, R>];
|
|
9
11
|
export interface MutationInitial {
|
|
@@ -29,20 +31,24 @@ type Handler<A, E> = {
|
|
|
29
31
|
handler: Effect<A, E, ApiConfig | HttpClient.Client.Default>;
|
|
30
32
|
name: string;
|
|
31
33
|
};
|
|
34
|
+
export interface MutationOptions<A, I = void> {
|
|
35
|
+
queryInvalidation?: (defaultKey: string[] | undefined, name: string) => {
|
|
36
|
+
filters?: MaybeRefDeep<InvalidateQueryFilters> | undefined;
|
|
37
|
+
options?: MaybeRefDeep<InvalidateOptions> | undefined;
|
|
38
|
+
}[];
|
|
39
|
+
onSuccess?: (a: A, i: I) => Promise<unknown>;
|
|
40
|
+
}
|
|
41
|
+
export declare const getQueryKey: (name: string) => string[] | undefined;
|
|
32
42
|
/**
|
|
33
43
|
* Pass a function that returns an Effect, e.g from a client action, or an Effect
|
|
34
44
|
* Returns a tuple with state ref and execution function which reports errors as Toast.
|
|
35
45
|
*/
|
|
36
46
|
export declare const useSafeMutation: {
|
|
37
|
-
<I, E, A>(self: HandlerWithInput<I, A, E>, options?:
|
|
38
|
-
disableQueryInvalidation?: boolean;
|
|
39
|
-
}): readonly [
|
|
47
|
+
<I, E, A>(self: HandlerWithInput<I, A, E>, options?: MutationOptions<A, I>): readonly [
|
|
40
48
|
Readonly<Ref<MutationResult<A, E>>>,
|
|
41
49
|
(i: I, signal?: AbortSignal) => Promise<Either.Either<A, E>>
|
|
42
50
|
];
|
|
43
|
-
<E, A>(self: Handler<A, E>, options?:
|
|
44
|
-
disableQueryInvalidation?: boolean;
|
|
45
|
-
}): readonly [
|
|
51
|
+
<E, A>(self: Handler<A, E>, options?: MutationOptions<A>): readonly [
|
|
46
52
|
Readonly<Ref<MutationResult<A, E>>>,
|
|
47
53
|
(signal?: AbortSignal) => Promise<Either.Either<A, E>>
|
|
48
54
|
];
|
package/dist/mutate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,UAAU,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"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"}
|
package/dist/mutate.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import { tuple } from "@effect-app/core/Function";
|
|
3
|
+
import * as Result from "@effect-rx/rx/Result";
|
|
3
4
|
import { useQueryClient } from "@tanstack/vue-query";
|
|
4
5
|
import { Cause, Effect, Exit, Option } from "effect-app";
|
|
5
6
|
import { dropUndefinedT } from "effect-app/utils";
|
|
@@ -7,7 +8,6 @@ import { InterruptedException } from "effect/Cause";
|
|
|
7
8
|
import * as Either from "effect/Either";
|
|
8
9
|
import { computed, ref, shallowRef } from "vue";
|
|
9
10
|
import { makeQueryKey, reportRuntimeError, run } from "./internal.js";
|
|
10
|
-
import * as Result from "@effect-rx/rx/Result";
|
|
11
11
|
export function make(self) {
|
|
12
12
|
const result = shallowRef(Result.initial());
|
|
13
13
|
const execute = Effect
|
|
@@ -18,6 +18,21 @@ export function make(self) {
|
|
|
18
18
|
const latestSuccess = computed(() => Option.getOrUndefined(Result.value(result.value)));
|
|
19
19
|
return tuple(result, latestSuccess, execute);
|
|
20
20
|
}
|
|
21
|
+
export const getQueryKey = (name) => {
|
|
22
|
+
const key = makeQueryKey(name);
|
|
23
|
+
const ns = key.filter((_) => _.startsWith("$"));
|
|
24
|
+
return ns.length ? ns : undefined;
|
|
25
|
+
};
|
|
26
|
+
// TODO: more efficient invalidation, including args etc
|
|
27
|
+
// return Effect.promise(() => queryClient.invalidateQueries({
|
|
28
|
+
// predicate: (_) => nses.includes(_.queryKey.filter((_) => _.startsWith("$")).join("/"))
|
|
29
|
+
// }))
|
|
30
|
+
/*
|
|
31
|
+
// const nses: string[] = []
|
|
32
|
+
// for (let i = 0; i < ns.length; i++) {
|
|
33
|
+
// nses.push(ns.slice(0, i + 1).join("/"))
|
|
34
|
+
// }
|
|
35
|
+
*/
|
|
21
36
|
/**
|
|
22
37
|
* Pass a function that returns an Effect, e.g from a client action, or an Effect
|
|
23
38
|
* Returns a tuple with state ref and execution function which reports errors as Toast.
|
|
@@ -25,6 +40,8 @@ export function make(self) {
|
|
|
25
40
|
export const useSafeMutation = (self, options) => {
|
|
26
41
|
const queryClient = useQueryClient();
|
|
27
42
|
const state = ref({ _tag: "Initial" });
|
|
43
|
+
const onSuccess = options?.onSuccess;
|
|
44
|
+
const invalidateQueries = (filters, options) => Effect.promise(() => queryClient.invalidateQueries(filters, options));
|
|
28
45
|
function handleExit(exit) {
|
|
29
46
|
return Effect.sync(() => {
|
|
30
47
|
if (Exit.isSuccess(exit)) {
|
|
@@ -62,20 +79,25 @@ export const useSafeMutation = (self, options) => {
|
|
|
62
79
|
.sync(() => {
|
|
63
80
|
state.value = { _tag: "Loading" };
|
|
64
81
|
})
|
|
65
|
-
.pipe(Effect.andThen(effect),
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
.pipe(Effect.andThen(effect), Effect.tap(() => Effect
|
|
83
|
+
.suspend(() => {
|
|
84
|
+
const queryKey = getQueryKey(self.name);
|
|
85
|
+
if (options?.queryInvalidation) {
|
|
86
|
+
const opts = options.queryInvalidation(queryKey, self.name);
|
|
87
|
+
if (!opts.length) {
|
|
88
|
+
return Effect.void;
|
|
89
|
+
}
|
|
90
|
+
return Effect
|
|
91
|
+
.andThen(Effect.annotateCurrentSpan({ queryKey, opts }), Effect.forEach(opts, (_) => invalidateQueries(_.filters, _.options), { concurrency: "inherit" }))
|
|
92
|
+
.pipe(Effect.withSpan("client.query.invalidation"));
|
|
71
93
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
})), Effect.tapDefect(reportRuntimeError), Effect.exit, Effect.flatMap(handleExit)), dropUndefinedT({ signal }));
|
|
94
|
+
if (!queryKey)
|
|
95
|
+
return Effect.void;
|
|
96
|
+
return Effect
|
|
97
|
+
.andThen(Effect.annotateCurrentSpan({ queryKey }), invalidateQueries({ queryKey }))
|
|
98
|
+
.pipe(Effect.withSpan("client.query.invalidation"));
|
|
99
|
+
})), Effect.tapDefect(reportRuntimeError), Effect.tap((i) => onSuccess ? Effect.promise(() => onSuccess(i)) : Effect.void), Effect.exit, Effect.flatMap(handleExit), Effect.withSpan(`mutation ${self.name}`)), dropUndefinedT({ signal }));
|
|
78
100
|
};
|
|
79
101
|
return tuple(state, exec);
|
|
80
102
|
};
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2pELE9BQU8sS0FBSyxNQUFNLE1BQU0sc0JBQXNCLENBQUE7QUFHOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUNuRCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUd2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHckUsTUFBTSxVQUFVLElBQUksQ0FBVSxJQUFvQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBeUIsQ0FBQyxDQUFBO0lBRWxFLE1BQU0sT0FBTyxHQUFHLE1BQU07U0FDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNULE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FB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
|
package/dist/query.js
CHANGED
|
@@ -60,7 +60,7 @@ export const useSafeQuery_ = (q, arg, options = {} // TODO
|
|
|
60
60
|
queryKey,
|
|
61
61
|
queryFn: ({ signal }) => run.value(Effect
|
|
62
62
|
.map(handler, (_) => _.body)
|
|
63
|
-
.pipe(Effect.tapDefect(reportRuntimeError)), { signal })
|
|
63
|
+
.pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`query ${q.name}`)), { signal })
|
|
64
64
|
}
|
|
65
65
|
: {
|
|
66
66
|
...options,
|
|
@@ -68,7 +68,7 @@ export const useSafeQuery_ = (q, arg, options = {} // TODO
|
|
|
68
68
|
queryFn: ({ signal }) => run
|
|
69
69
|
.value(Effect
|
|
70
70
|
.map(handler(req.value), (_) => _.body)
|
|
71
|
-
.pipe(Effect.tapDefect(reportRuntimeError)), { signal })
|
|
71
|
+
.pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`query ${q.name}`)), { signal })
|
|
72
72
|
});
|
|
73
73
|
const result = computed(() => swrToQuery({
|
|
74
74
|
error: r.error.value ?? undefined,
|
|
@@ -87,4 +87,4 @@ function swrToQuery(r) {
|
|
|
87
87
|
}
|
|
88
88
|
return Result.initial(r.isValidating);
|
|
89
89
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCx3REFBd0Q7QUFDeEQsNERBQTREO0FBQzVELE9BQU8sS0FBSyxNQUFNLE1BQU0sc0JBQXNCLENBQUE7QUFROUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUdwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUVuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQXdDckUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBUztBQUNUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0JFO0FBQ0YsWUFBa0IsRUFDbEIsT0FBYTtJQUViLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUM7UUFDOUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFNRCxnQkFBZ0I7QUFDaEIsc1JBQXNSO0FBQ3RSLDJSQUEyUjtBQUMzUix1UkFBdVI7QUFDdlIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQzNCLENBb0JHLEVBQ0gsR0FBd0IsRUFDeEIsVUFBd0UsRUFBRSxDQUFDLE9BQU87RUFDbEYsRUFBRTtJQUNGLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNmLE1BQU0sR0FBRyxHQUFpQixDQUFDLEdBQUc7UUFDNUIsQ0FBQyxDQUFDLFNBQVM7UUFD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/vue",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.14",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/effect-ts-app/libs/tree/main/packages/vue",
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"@tanstack/vue-query": "^5.37.1",
|
|
10
10
|
"query-string": "^9.0.0",
|
|
11
11
|
"@effect-app/core": "1.2.3",
|
|
12
|
-
"@effect-app/vue": "1.4.
|
|
13
|
-
"effect-app": "1.
|
|
14
|
-
"
|
|
12
|
+
"@effect-app/vue": "1.4.14",
|
|
13
|
+
"@effect-app/schema": "1.2.8",
|
|
14
|
+
"effect-app": "1.4.8"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"@effect/platform": "^0.53.14",
|
package/src/mutate.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import { tuple } from "@effect-app/core/Function"
|
|
3
|
+
import * as Result from "@effect-rx/rx/Result"
|
|
3
4
|
import type * as HttpClient from "@effect/platform/Http/Client"
|
|
5
|
+
import type { InvalidateOptions, InvalidateQueryFilters } from "@tanstack/vue-query"
|
|
4
6
|
import { useQueryClient } from "@tanstack/vue-query"
|
|
5
7
|
import { Cause, Effect, Exit, Option } from "effect-app"
|
|
6
8
|
import type { ApiConfig, FetchResponse } from "effect-app/client"
|
|
7
9
|
import { dropUndefinedT } from "effect-app/utils"
|
|
8
10
|
import { InterruptedException } from "effect/Cause"
|
|
9
11
|
import * as Either from "effect/Either"
|
|
12
|
+
import type { MaybeRefDeep } from "node_modules/@tanstack/vue-query/build/modern/types.js"
|
|
10
13
|
import type { ComputedRef, Ref } from "vue"
|
|
11
14
|
import { computed, ref, shallowRef } from "vue"
|
|
12
15
|
import { makeQueryKey, reportRuntimeError, run } from "./internal.js"
|
|
13
16
|
|
|
14
|
-
import * as Result from "@effect-rx/rx/Result"
|
|
15
|
-
|
|
16
17
|
export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T)
|
|
17
18
|
export function make<A, E, R>(self: Effect<FetchResponse<A>, E, R>) {
|
|
18
19
|
const result = shallowRef(Result.initial() as Result.Result<A, E>)
|
|
@@ -59,19 +60,43 @@ type HandlerWithInput<I, A, E> = {
|
|
|
59
60
|
}
|
|
60
61
|
type Handler<A, E> = { handler: Effect<A, E, ApiConfig | HttpClient.Client.Default>; name: string }
|
|
61
62
|
|
|
63
|
+
export interface MutationOptions<A, I = void> {
|
|
64
|
+
queryInvalidation?: (defaultKey: string[] | undefined, name: string) => {
|
|
65
|
+
filters?: MaybeRefDeep<InvalidateQueryFilters> | undefined
|
|
66
|
+
options?: MaybeRefDeep<InvalidateOptions> | undefined
|
|
67
|
+
}[]
|
|
68
|
+
onSuccess?: (a: A, i: I) => Promise<unknown>
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export const getQueryKey = (name: string) => {
|
|
72
|
+
const key = makeQueryKey(name)
|
|
73
|
+
const ns = key.filter((_) => _.startsWith("$"))
|
|
74
|
+
return ns.length ? ns : undefined
|
|
75
|
+
}
|
|
76
|
+
// TODO: more efficient invalidation, including args etc
|
|
77
|
+
// return Effect.promise(() => queryClient.invalidateQueries({
|
|
78
|
+
// predicate: (_) => nses.includes(_.queryKey.filter((_) => _.startsWith("$")).join("/"))
|
|
79
|
+
// }))
|
|
80
|
+
/*
|
|
81
|
+
// const nses: string[] = []
|
|
82
|
+
// for (let i = 0; i < ns.length; i++) {
|
|
83
|
+
// nses.push(ns.slice(0, i + 1).join("/"))
|
|
84
|
+
// }
|
|
85
|
+
*/
|
|
86
|
+
|
|
62
87
|
/**
|
|
63
88
|
* Pass a function that returns an Effect, e.g from a client action, or an Effect
|
|
64
89
|
* Returns a tuple with state ref and execution function which reports errors as Toast.
|
|
65
90
|
*/
|
|
66
91
|
export const useSafeMutation: {
|
|
67
|
-
<I, E, A>(self: HandlerWithInput<I, A, E>, options?:
|
|
92
|
+
<I, E, A>(self: HandlerWithInput<I, A, E>, options?: MutationOptions<A, I>): readonly [
|
|
68
93
|
Readonly<Ref<MutationResult<A, E>>>,
|
|
69
94
|
(
|
|
70
95
|
i: I,
|
|
71
96
|
signal?: AbortSignal
|
|
72
97
|
) => Promise<Either.Either<A, E>>
|
|
73
98
|
]
|
|
74
|
-
<E, A>(self: Handler<A, E>, options?:
|
|
99
|
+
<E, A>(self: Handler<A, E>, options?: MutationOptions<A>): readonly [
|
|
75
100
|
Readonly<Ref<MutationResult<A, E>>>,
|
|
76
101
|
(
|
|
77
102
|
signal?: AbortSignal
|
|
@@ -84,10 +109,16 @@ export const useSafeMutation: {
|
|
|
84
109
|
| Handler<A, E>["handler"]
|
|
85
110
|
name: string
|
|
86
111
|
},
|
|
87
|
-
options?:
|
|
112
|
+
options?: MutationOptions<A>
|
|
88
113
|
) => {
|
|
89
114
|
const queryClient = useQueryClient()
|
|
90
115
|
const state: Ref<MutationResult<A, E>> = ref<MutationResult<A, E>>({ _tag: "Initial" }) as any
|
|
116
|
+
const onSuccess = options?.onSuccess
|
|
117
|
+
|
|
118
|
+
const invalidateQueries = (
|
|
119
|
+
filters?: MaybeRefDeep<InvalidateQueryFilters> | undefined,
|
|
120
|
+
options?: MaybeRefDeep<InvalidateOptions> | undefined
|
|
121
|
+
) => Effect.promise(() => queryClient.invalidateQueries(filters, options))
|
|
91
122
|
|
|
92
123
|
function handleExit(exit: Exit.Exit<A, E>): Effect<Either.Either<A, E>, never, never> {
|
|
93
124
|
return Effect.sync(() => {
|
|
@@ -132,24 +163,39 @@ export const useSafeMutation: {
|
|
|
132
163
|
})
|
|
133
164
|
.pipe(
|
|
134
165
|
Effect.andThen(effect),
|
|
135
|
-
|
|
136
|
-
Effect
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
166
|
+
Effect.tap(() =>
|
|
167
|
+
Effect
|
|
168
|
+
.suspend(() => {
|
|
169
|
+
const queryKey = getQueryKey(self.name)
|
|
170
|
+
|
|
171
|
+
if (options?.queryInvalidation) {
|
|
172
|
+
const opts = options.queryInvalidation(queryKey, self.name)
|
|
173
|
+
if (!opts.length) {
|
|
174
|
+
return Effect.void
|
|
175
|
+
}
|
|
176
|
+
return Effect
|
|
177
|
+
.andThen(
|
|
178
|
+
Effect.annotateCurrentSpan({ queryKey, opts }),
|
|
179
|
+
Effect.forEach(opts, (_) => invalidateQueries(_.filters, _.options), { concurrency: "inherit" })
|
|
180
|
+
)
|
|
181
|
+
.pipe(Effect.withSpan("client.query.invalidation"))
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (!queryKey) return Effect.void
|
|
185
|
+
|
|
186
|
+
return Effect
|
|
187
|
+
.andThen(
|
|
188
|
+
Effect.annotateCurrentSpan({ queryKey }),
|
|
189
|
+
invalidateQueries({ queryKey })
|
|
190
|
+
)
|
|
191
|
+
.pipe(Effect.withSpan("client.query.invalidation"))
|
|
192
|
+
})
|
|
149
193
|
),
|
|
150
194
|
Effect.tapDefect(reportRuntimeError),
|
|
195
|
+
Effect.tap((i) => onSuccess ? Effect.promise(() => onSuccess(i)) : Effect.void),
|
|
151
196
|
Effect.exit,
|
|
152
|
-
Effect.flatMap(handleExit)
|
|
197
|
+
Effect.flatMap(handleExit),
|
|
198
|
+
Effect.withSpan(`mutation ${self.name}`)
|
|
153
199
|
),
|
|
154
200
|
dropUndefinedT({ signal })
|
|
155
201
|
)
|
package/src/query.ts
CHANGED
|
@@ -144,7 +144,7 @@ export const useSafeQuery_ = <I, A, E>(
|
|
|
144
144
|
run.value(
|
|
145
145
|
Effect
|
|
146
146
|
.map(handler, (_) => _.body)
|
|
147
|
-
.pipe(Effect.tapDefect(reportRuntimeError)),
|
|
147
|
+
.pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`query ${q.name}`)),
|
|
148
148
|
{ signal }
|
|
149
149
|
)
|
|
150
150
|
}
|
|
@@ -156,7 +156,7 @@ export const useSafeQuery_ = <I, A, E>(
|
|
|
156
156
|
.value(
|
|
157
157
|
Effect
|
|
158
158
|
.map(handler(req.value), (_) => _.body)
|
|
159
|
-
.pipe(Effect.tapDefect(reportRuntimeError)),
|
|
159
|
+
.pipe(Effect.tapDefect(reportRuntimeError), Effect.withSpan(`query ${q.name}`)),
|
|
160
160
|
{ signal }
|
|
161
161
|
)
|
|
162
162
|
}
|