@effect-app/vue 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/_cjs/errorReporter.cjs +1 -7
  3. package/_cjs/errorReporter.cjs.map +1 -1
  4. package/_cjs/hooks.cjs +0 -26
  5. package/_cjs/hooks.cjs.map +1 -1
  6. package/_cjs/index.cjs +6 -22
  7. package/_cjs/index.cjs.map +1 -1
  8. package/_cjs/internal.cjs +3 -2
  9. package/_cjs/internal.cjs.map +1 -1
  10. package/_cjs/mutate.cjs +6 -9
  11. package/_cjs/mutate.cjs.map +1 -1
  12. package/_cjs/query.cjs +17 -20
  13. package/_cjs/query.cjs.map +1 -1
  14. package/dist/errorReporter.d.ts.map +1 -1
  15. package/dist/errorReporter.js +4 -10
  16. package/dist/hooks.d.ts +0 -1
  17. package/dist/hooks.d.ts.map +1 -1
  18. package/dist/hooks.js +1 -2
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -2
  22. package/dist/internal.d.ts +1 -0
  23. package/dist/internal.d.ts.map +1 -1
  24. package/dist/internal.js +3 -2
  25. package/dist/mutate.d.ts +6 -5
  26. package/dist/mutate.d.ts.map +1 -1
  27. package/dist/mutate.js +8 -19
  28. package/dist/query.d.ts +14 -9
  29. package/dist/query.d.ts.map +1 -1
  30. package/dist/query.js +21 -38
  31. package/package.json +7 -5
  32. package/src/errorReporter.ts +3 -12
  33. package/src/hooks.ts +0 -1
  34. package/src/index.ts +1 -1
  35. package/src/internal.ts +2 -1
  36. package/src/mutate.ts +16 -23
  37. package/src/query.ts +57 -46
  38. package/vitest.config.ts.timestamp-1711656440837-d04458a029af.mjs +37 -0
  39. package/vitest.config.ts.timestamp-1711724061890-e8772f088aa0d.mjs +37 -0
  40. package/vitest.config.ts.timestamp-1711743471018-f8eca63460d15.mjs +37 -0
  41. package/vitest.config.ts.timestamp-1711743489536-332f6bf4f074c.mjs +37 -0
  42. package/vitest.config.ts.timestamp-1711744615240-85d4d02f24414.mjs +37 -0
package/dist/mutate.js CHANGED
@@ -2,31 +2,20 @@
2
2
  import { tuple } from "@effect-app/core/Function";
3
3
  import { useQueryClient } from "@tanstack/vue-query";
4
4
  import { Cause, Effect, Exit, Option } from "effect-app";
5
- import { hasValue, Initial, isInitializing, Loading, queryResult, Refreshing } from "effect-app/client";
6
5
  import { dropUndefinedT } from "effect-app/utils";
7
6
  import { InterruptedException } from "effect/Cause";
8
7
  import * as Either from "effect/Either";
9
8
  import { computed, ref, shallowRef } from "vue";
10
- import { makeQueryKey, run } from "./internal.js";
9
+ import { makeQueryKey, reportRuntimeError, run } from "./internal.js";
10
+ import * as Result from "@effect-rx/rx/Result";
11
11
  export function make(self) {
12
- const result = shallowRef(new Initial());
12
+ const result = shallowRef(Result.initial());
13
13
  const execute = Effect
14
14
  .sync(() => {
15
- result.value = isInitializing(result.value)
16
- ? new Loading()
17
- : new Refreshing(result.value);
15
+ result.value = Result.waiting(result.value);
18
16
  })
19
- .pipe(Effect.andThen(queryResult(Effect.map(self, (_) => _.body))), Effect.flatMap((r) => Effect.sync(() => result.value = r)));
20
- const latestSuccess = computed(() => {
21
- const value = result.value;
22
- return hasValue(value)
23
- ? Either.isRight(value.current)
24
- ? value.current.right
25
- : Option.isSome(value.previous)
26
- ? value.previous.value
27
- : undefined
28
- : undefined;
29
- });
17
+ .pipe(Effect.andThen(Effect.map(self, (_) => _.body)), Effect.exit, Effect.andThen(Result.fromExit), Effect.flatMap((r) => Effect.sync(() => result.value = r)));
18
+ const latestSuccess = computed(() => Option.getOrUndefined(Result.value(result.value)));
30
19
  return tuple(result, latestSuccess, execute);
31
20
  }
32
21
  /**
@@ -85,8 +74,8 @@ export const useSafeMutation = (self) => {
85
74
  // return Effect.promise(() => queryClient.invalidateQueries({
86
75
  // predicate: (_) => nses.includes(_.queryKey.filter((_) => _.startsWith("$")).join("/"))
87
76
  // }))
88
- })), Effect.exit, Effect.flatMap(handleExit)), dropUndefinedT({ signal }));
77
+ })), Effect.tapDefect(reportRuntimeError), Effect.exit, Effect.flatMap(handleExit)), dropUndefinedT({ signal }));
89
78
  };
90
79
  return tuple(state, exec);
91
80
  };
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXZHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFFdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBR2pELE1BQU0sVUFBVSxJQUFJLENBQVUsSUFBb0M7SUFDaEUsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksT0FBTyxFQUF1QixDQUFDLENBQUE7SUFFN0QsTUFBTSxPQUFPLEdBQUcsTUFBTTtTQUNuQixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsTUFBTSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN6QyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUU7WUFDZixDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQztTQUNE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
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFFdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXJFLE9BQU8sS0FBSyxNQUFNLE1BQU0sc0JBQXNCLENBQUE7QUFHOUMsTUFBTSxVQUFVLElBQUksQ0FBVSxJQUFvQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBeUIsQ0FBQyxDQUFBO0lBRWxFLE1BQU0sT0FBTyxHQUFHLE1BQU07U0FDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNULE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FB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
package/dist/query.d.ts CHANGED
@@ -1,16 +1,18 @@
1
- import type { QueryObserverOptions, QueryObserverResult, RefetchOptions, UseQueryReturnType } from "@tanstack/vue-query";
2
- import { Effect } from "effect-app";
3
- import type { ApiConfig, FetchResponse, QueryResult } from "effect-app/client";
1
+ import * as Result from "@effect-rx/rx/Result";
2
+ import type { QueryKey, QueryObserverOptions, QueryObserverResult, RefetchOptions, UseQueryReturnType } from "@tanstack/vue-query";
3
+ import type { Cause } from "effect-app";
4
+ import { Effect, Runtime } from "effect-app";
5
+ import type { ApiConfig, FetchResponse } from "effect-app/client";
4
6
  import type { HttpClient } from "effect-app/http";
5
7
  import type { ComputedRef, WatchSource } from "vue";
6
- export interface QueryObserverOptionsCustom extends Omit<QueryObserverOptions, "queryKey" | "queryFn"> {
8
+ export interface QueryObserverOptionsCustom<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never> extends Omit<QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam>, "queryKey" | "queryFn"> {
7
9
  }
8
10
  export declare function useSafeQuery<E, A>(self: {
9
11
  handler: Effect<FetchResponse<A>, E, ApiConfig | HttpClient.Client.Default>;
10
12
  mapPath: string;
11
13
  name: string;
12
14
  }, options?: QueryObserverOptionsCustom | undefined): readonly [
13
- ComputedRef<QueryResult<E, A>>,
15
+ ComputedRef<Result.Result<A, E>>,
14
16
  ComputedRef<A | undefined>,
15
17
  (options?: RefetchOptions | undefined) => Promise<QueryObserverResult<any, any>>,
16
18
  UseQueryReturnType<any, any>
@@ -20,18 +22,21 @@ export declare function useSafeQuery<Arg, E, A>(self: {
20
22
  mapPath: (arg: Arg) => string;
21
23
  name: string;
22
24
  }, arg: Arg | WatchSource<Arg>, options?: QueryObserverOptionsCustom | undefined): readonly [
23
- ComputedRef<QueryResult<E, A>>,
25
+ ComputedRef<Result.Result<A, E>>,
24
26
  ComputedRef<A | undefined>,
25
27
  (options?: RefetchOptions | undefined) => Promise<QueryObserverResult<any, any>>,
26
28
  UseQueryReturnType<any, any>
27
29
  ];
30
+ export interface KnownFiberFailure<E> extends Runtime.FiberFailure {
31
+ readonly [Runtime.FiberFailureCauseId]: Cause.Cause<E>;
32
+ }
28
33
  export declare const useSafeQuery_: <I, A, E>(q: {
29
- handler: (req: I) => Effect<FetchResponse<A>, E, ApiConfig | HttpClient.Client.Default>;
34
+ readonly handler: (req: I) => Effect<FetchResponse<A>, E, ApiConfig | HttpClient.Client.Default>;
30
35
  mapPath: (req: I) => string;
31
36
  name: string;
32
37
  } | {
33
- handler: Effect<FetchResponse<A>, E, ApiConfig | HttpClient.Client.Default>;
38
+ readonly handler: Effect<FetchResponse<A>, E, ApiConfig | HttpClient.Client.Default>;
34
39
  mapPath: string;
35
40
  name: string;
36
- }, arg?: I | WatchSource<I>, options?: QueryObserverOptionsCustom) => readonly [ComputedRef<QueryResult<Error | null, unknown>>, ComputedRef<unknown>, (options?: RefetchOptions | undefined) => Promise<QueryObserverResult<unknown, Error>>, UseQueryReturnType<unknown, Error>];
41
+ }, arg?: I | WatchSource<I>, options?: QueryObserverOptionsCustom<unknown, KnownFiberFailure<E>, A>) => readonly [ComputedRef<Result.Result<A, E>>, ComputedRef<A | undefined>, (options?: RefetchOptions | undefined) => Promise<QueryObserverResult<A, KnownFiberFailure<E>>>, UseQueryReturnType<A, KnownFiberFailure<E>>];
37
42
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExH,OAAO,EAAS,MAAM,EAA2B,MAAM,YAAY,CAAA;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAGnD,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,SAAS,CAAC;CAAG;AAEzG,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAC/B,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3E,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,EACD,OAAO,CAAC,EAAE,0BAA0B,GAAG,SAAS,GAC/C,SAAS;IACV,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC;IAC1B,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChF,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;CAC7B,CAAA;AACD,wBAAgB,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EACpC,IAAI,EAAE;IACJ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACzF,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb,EACD,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,0BAA0B,GAAG,SAAS,GAC/C,SAAS;IACV,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC;IAC1B,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChF,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;CAC7B,CAAA;AAsCD,eAAO,MAAM,aAAa,eAEpB;IACA,OAAO,EAAE,CACP,GAAG,EAAE,CAAC,KACH,OACH,cAAc,CAAC,CAAC,EAChB,CAAC,EACD,SAAS,GAAG,WAAW,MAAM,CAAC,OAAO,CACtC,CAAA;IACD,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;CACb,GACC;IACA,OAAO,EAAE,OACP,cAAc,CAAC,CAAC,EAChB,CAAC,EACD,SAAS,GAAG,WAAW,MAAM,CAAC,OAAO,CACtC,CAAA;IACD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb,QACG,CAAC,GAAG,YAAY,CAAC,CAAC,YACf,0BAA0B,iNA2DpC,CAAA"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/dist/query.js CHANGED
@@ -1,8 +1,12 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
3
+ /* eslint-disable @typescript-eslint/no-unsafe-return */
4
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
5
+ import * as Result from "@effect-rx/rx/Result";
1
6
  import { useQuery } from "@tanstack/vue-query";
2
- import { Cause, Effect, Either, Option, Runtime } from "effect-app";
3
- import { Done, Initial, isSuccess, Loading, Refreshing } from "effect-app/client";
7
+ import { Effect, Option, Runtime } from "effect-app";
4
8
  import { computed, ref } from "vue";
5
- import { makeQueryKey, run } from "./internal.js";
9
+ import { makeQueryKey, reportRuntimeError, run } from "./internal.js";
6
10
  export function useSafeQuery(self,
7
11
  /*
8
12
  q:
@@ -49,59 +53,38 @@ export const useSafeQuery_ = (q, arg, options = {} // TODO
49
53
  }
50
54
  : ref(arg);
51
55
  const queryKey = makeQueryKey(q.name);
52
- const r = useQuery(Effect.isEffect(q.handler)
56
+ const handler = q.handler;
57
+ const r = useQuery(Effect.isEffect(handler)
53
58
  ? {
54
59
  ...options,
55
60
  queryKey,
56
- queryFn: ({ signal }) => run
57
- .value(Effect.map(q.handler, (_) => _.body), { signal })
58
- .catch((_) => {
59
- if (!Runtime.isFiberFailure(_))
60
- throw _;
61
- const cause = _[Runtime.FiberFailureCauseId];
62
- throw Cause.squash(cause);
63
- })
61
+ queryFn: ({ signal }) => run.value(Effect
62
+ .map(handler, (_) => _.body)
63
+ .pipe(Effect.tapDefect(reportRuntimeError)), { signal })
64
64
  }
65
65
  : {
66
66
  ...options,
67
67
  queryKey: [...queryKey, req],
68
68
  queryFn: ({ signal }) => run
69
- .value(Effect.map(q.handler(req.value), (_) => _.body), { signal })
70
- .catch((_) => {
71
- if (!Runtime.isFiberFailure(_))
72
- throw _;
73
- const cause = _[Runtime.FiberFailureCauseId];
74
- throw Cause.squash(cause);
75
- })
69
+ .value(Effect
70
+ .map(handler(req.value), (_) => _.body)
71
+ .pipe(Effect.tapDefect(reportRuntimeError)), { signal })
76
72
  });
77
73
  const result = computed(() => swrToQuery({
78
- error: r.error.value,
74
+ error: r.error.value ?? undefined,
79
75
  data: r.data.value,
80
76
  isValidating: r.isFetching.value
81
77
  }));
82
- const latestSuccess = computed(() => {
83
- const value = result.value;
84
- return isSuccess(value)
85
- ? Either.isRight(value.current)
86
- ? value.current.right
87
- : Option.isSome(value.previous)
88
- ? value.previous.value
89
- : undefined
90
- : undefined;
91
- });
78
+ const latestSuccess = computed(() => Option.getOrUndefined(Result.value(result.value)));
92
79
  return [result, latestSuccess, r.refetch, r];
93
80
  };
94
81
  function swrToQuery(r) {
95
82
  if (r.error) {
96
- return r.isValidating
97
- ? Refreshing.fail(r.error, r.data)
98
- : Done.fail(r.error, r.data);
83
+ return Result.failureWithPrevious(r.error[Runtime.FiberFailureCauseId], r.data === undefined ? Option.none() : Option.some(Result.success(r.data)), r.isValidating);
99
84
  }
100
85
  if (r.data !== undefined) {
101
- return r.isValidating
102
- ? Refreshing.succeed(r.data)
103
- : Done.succeed(r.data);
86
+ return Result.success(r.data, r.isValidating);
104
87
  }
105
- return r.isValidating ? new Loading() : new Initial();
88
+ return Result.initial(r.isValidating);
106
89
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ25FLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFHakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFFbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxlQUFlLENBQUE7QUErQmpELE1BQU0sVUFBVSxZQUFZLENBQzFCLElBQVM7QUFDVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNCRTtBQUNGLFlBQWtCLEVBQ2xCLE9BQWE7SUFFYixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNsQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUNoRCxDQUFDO0FBRUQsZ0JBQWdCO0FBQ2hCLHNSQUFzUjtBQUN0UiwyUkFBMlI7QUFDM1IsdVJBQXVSO0FBQ3ZSLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUMzQixDQW9CRyxFQUNILEdBQXdCLEVBQ3hCLFVBQXNDLEVBQUUsQ0FBQyxPQUFPO0VBQ2hELEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDZixNQUFNLEdBQUcsR0FBaUIsQ0FBQyxHQUFHO1FBQzVCLENBQUMsQ0FBQyxTQUFTO1FB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
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.1.0",
3
+ "version": "1.2.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/effect-ts-app/libs/tree/main/packages/vue",
@@ -8,14 +8,16 @@
8
8
  "@formatjs/intl": "^2.10.1",
9
9
  "@tanstack/vue-query": "^5.32.0",
10
10
  "query-string": "^9.0.0",
11
- "@effect-app/core": "1.0.6",
12
- "effect-app": "1.0.12",
13
- "@effect-app/vue": "1.1.0",
14
- "@effect-app/schema": "1.0.10"
11
+ "@effect-app/schema": "1.0.10",
12
+ "effect-app": "1.1.1",
13
+ "@effect-app/vue": "1.2.1",
14
+ "@effect-app/core": "1.0.6"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@effect/platform": "^0.50.7",
18
18
  "@effect/platform-browser": "^0.33.7",
19
+ "@effect-rx/rx": "^0.29.1",
20
+ "@effect-rx/rx-vue": "^0.8.1",
19
21
  "@effect/schema": "^0.66.10",
20
22
  "@sentry/browser": "^7.112.2",
21
23
  "effect": "^3.0.7",
@@ -2,24 +2,15 @@
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, Predicate } from "effect-app"
6
- import { CauseException, ErrorReported } from "effect-app/client/errors"
5
+ import { Cause, Effect } from "effect-app"
6
+ import { annotateSpanWithError, CauseException, ErrorReported } from "effect-app/client/errors"
7
7
 
8
8
  export function reportError(
9
9
  name: string
10
10
  ) {
11
11
  return (cause: Cause<unknown>, extras?: Record<string, unknown>) =>
12
12
  Effect.gen(function*($) {
13
- yield* $(Effect.annotateCurrentSpan({
14
- "exception.escaped": true,
15
- "exception.message": "Reported error for " + name,
16
- "exception.stacktrace": Cause.pretty(cause),
17
- "exception.type": Cause.squashWith(
18
- cause,
19
- (_) => Predicate.hasProperty(_, "_tag") ? _._tag : Predicate.hasProperty(_, "name") ? _.name : `${_}`
20
- ),
21
- "error.type": cause._tag
22
- }))
13
+ yield* $(annotateSpanWithError(cause, name))
23
14
  if (Cause.isInterrupted(cause)) {
24
15
  yield* $(Effect.logDebug("Interrupted").pipe(Effect.annotateLogs("extras", JSON.stringify(extras ?? {}))))
25
16
  return Cause.squash(cause)
package/src/hooks.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
- export { isFailed, isInitializing, isSuccess } from "effect-app/client"
4
3
  export * from "./mutate.js"
5
4
  export * from "./query.js"
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { isFailed, isInitializing, isSuccess } from "effect-app/client"
1
+ export * as Result from "@effect-rx/rx/Result"
2
2
  export * from "./hooks.js"
3
3
  export * from "./runtime.js"
package/src/internal.ts CHANGED
@@ -2,6 +2,7 @@ import type * as HttpClient from "@effect/platform/Http/Client"
2
2
  import type { Effect } from "effect-app"
3
3
  import { pipe, Runtime } from "effect-app"
4
4
  import type { ApiConfig } from "effect-app/client"
5
+ import { reportError } from "./errorReporter.js"
5
6
 
6
7
  export const run = {
7
8
  value<E, A>(
@@ -11,7 +12,7 @@ export const run = {
11
12
  throw new Error("Runtime not initialized, please run `initRuntime` first")
12
13
  }
13
14
  }
14
- // const reportRuntimeError = reportError("Runtime")
15
+ export const reportRuntimeError = reportError("Runtime")
15
16
  export function initRuntime<A>(rt: Runtime.Runtime<A | ApiConfig | HttpClient.Client.Default>) {
16
17
  const runPromise = Runtime.runPromise(rt)
17
18
  run.value = function<E, A>(
package/src/mutate.ts CHANGED
@@ -3,40 +3,32 @@ import { tuple } from "@effect-app/core/Function"
3
3
  import type * as HttpClient from "@effect/platform/Http/Client"
4
4
  import { useQueryClient } from "@tanstack/vue-query"
5
5
  import { Cause, Effect, Exit, Option } from "effect-app"
6
- import { hasValue, Initial, isInitializing, Loading, queryResult, Refreshing } from "effect-app/client"
7
- import type { ApiConfig, FetchResponse, QueryResult } from "effect-app/client"
6
+ import type { ApiConfig, FetchResponse } from "effect-app/client"
8
7
  import { dropUndefinedT } from "effect-app/utils"
9
8
  import { InterruptedException } from "effect/Cause"
10
9
  import * as Either from "effect/Either"
11
10
  import type { ComputedRef, Ref } from "vue"
12
11
  import { computed, ref, shallowRef } from "vue"
13
- import { makeQueryKey, run } from "./internal.js"
12
+ import { makeQueryKey, reportRuntimeError, run } from "./internal.js"
13
+
14
+ import * as Result from "@effect-rx/rx/Result"
14
15
 
15
16
  export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T)
16
- export function make<R, E, A>(self: Effect<FetchResponse<A>, E, R>) {
17
- const result = shallowRef(new Initial() as QueryResult<E, A>)
17
+ export function make<A, E, R>(self: Effect<FetchResponse<A>, E, R>) {
18
+ const result = shallowRef(Result.initial() as Result.Result<A, E>)
18
19
 
19
20
  const execute = Effect
20
21
  .sync(() => {
21
- result.value = isInitializing(result.value)
22
- ? new Loading()
23
- : new Refreshing(result.value)
22
+ result.value = Result.waiting(result.value)
24
23
  })
25
24
  .pipe(
26
- Effect.andThen(queryResult(Effect.map(self, (_) => _.body))),
25
+ Effect.andThen(Effect.map(self, (_) => _.body)),
26
+ Effect.exit,
27
+ Effect.andThen(Result.fromExit),
27
28
  Effect.flatMap((r) => Effect.sync(() => result.value = r))
28
29
  )
29
30
 
30
- const latestSuccess = computed(() => {
31
- const value = result.value
32
- return hasValue(value)
33
- ? Either.isRight(value.current)
34
- ? value.current.right
35
- : Option.isSome(value.previous)
36
- ? value.previous.value
37
- : undefined
38
- : undefined
39
- })
31
+ const latestSuccess = computed(() => Option.getOrUndefined(Result.value(result.value)))
40
32
 
41
33
  return tuple(result, latestSuccess, execute)
42
34
  }
@@ -59,7 +51,7 @@ export interface MutationError<E> {
59
51
  readonly error: E
60
52
  }
61
53
 
62
- export type MutationResult<E, A> = MutationInitial | MutationLoading | MutationSuccess<A> | MutationError<E>
54
+ export type MutationResult<A, E> = MutationInitial | MutationLoading | MutationSuccess<A> | MutationError<E>
63
55
 
64
56
  /**
65
57
  * Pass a function that returns an Effect, e.g from a client action, or an Effect
@@ -67,14 +59,14 @@ export type MutationResult<E, A> = MutationInitial | MutationLoading | MutationS
67
59
  */
68
60
  export const useSafeMutation: {
69
61
  <I, E, A>(self: { handler: (i: I) => Effect<A, E, ApiConfig | HttpClient.Client.Default>; name: string }): readonly [
70
- Readonly<Ref<MutationResult<E, A>>>,
62
+ Readonly<Ref<MutationResult<A, E>>>,
71
63
  (
72
64
  i: I,
73
65
  signal?: AbortSignal
74
66
  ) => Promise<Either.Either<A, E>>
75
67
  ]
76
68
  <E, A>(self: { handler: Effect<A, E, ApiConfig | HttpClient.Client.Default>; name: string }): readonly [
77
- Readonly<Ref<MutationResult<E, A>>>,
69
+ Readonly<Ref<MutationResult<A, E>>>,
78
70
  (
79
71
  signal?: AbortSignal
80
72
  ) => Promise<Either.Either<A, E>>
@@ -88,7 +80,7 @@ export const useSafeMutation: {
88
80
  }
89
81
  ) => {
90
82
  const queryClient = useQueryClient()
91
- const state: Ref<MutationResult<E, A>> = ref<MutationResult<E, A>>({ _tag: "Initial" }) as any
83
+ const state: Ref<MutationResult<A, E>> = ref<MutationResult<A, E>>({ _tag: "Initial" }) as any
92
84
 
93
85
  function handleExit(exit: Exit.Exit<A, E>): Effect<Either.Either<A, E>, never, never> {
94
86
  return Effect.sync(() => {
@@ -148,6 +140,7 @@ export const useSafeMutation: {
148
140
  // }))
149
141
  })
150
142
  ),
143
+ Effect.tapDefect(reportRuntimeError),
151
144
  Effect.exit,
152
145
  Effect.flatMap(handleExit)
153
146
  ),
package/src/query.ts CHANGED
@@ -2,17 +2,33 @@
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-call */
3
3
  /* eslint-disable @typescript-eslint/no-unsafe-return */
4
4
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
5
- import type { QueryObserverOptions, QueryObserverResult, RefetchOptions, UseQueryReturnType } from "@tanstack/vue-query"
5
+ import * as Result from "@effect-rx/rx/Result"
6
+ import type {
7
+ QueryKey,
8
+ QueryObserverOptions,
9
+ QueryObserverResult,
10
+ RefetchOptions,
11
+ UseQueryReturnType
12
+ } from "@tanstack/vue-query"
6
13
  import { useQuery } from "@tanstack/vue-query"
7
- import { Cause, Effect, Either, Option, Runtime } from "effect-app"
8
- import { Done, Initial, isSuccess, Loading, Refreshing } from "effect-app/client"
9
- import type { ApiConfig, FetchResponse, QueryResult } from "effect-app/client"
14
+ import type { Cause } from "effect-app"
15
+ import { Effect, Option, Runtime } from "effect-app"
16
+ import type { ApiConfig, FetchResponse } from "effect-app/client"
10
17
  import type { HttpClient } from "effect-app/http"
11
18
  import { computed, ref } from "vue"
12
19
  import type { ComputedRef, WatchSource } from "vue"
13
- import { makeQueryKey, run } from "./internal.js"
20
+ import { makeQueryKey, reportRuntimeError, run } from "./internal.js"
14
21
 
15
- export interface QueryObserverOptionsCustom extends Omit<QueryObserverOptions, "queryKey" | "queryFn"> {}
22
+ export interface QueryObserverOptionsCustom<
23
+ TQueryFnData = unknown,
24
+ TError = Error,
25
+ TData = TQueryFnData,
26
+ TQueryData = TQueryFnData,
27
+ TQueryKey extends QueryKey = QueryKey,
28
+ TPageParam = never
29
+ > extends
30
+ Omit<QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey, TPageParam>, "queryKey" | "queryFn">
31
+ {}
16
32
 
17
33
  export function useSafeQuery<E, A>(
18
34
  self: {
@@ -22,7 +38,7 @@ export function useSafeQuery<E, A>(
22
38
  },
23
39
  options?: QueryObserverOptionsCustom | undefined // TODO
24
40
  ): readonly [
25
- ComputedRef<QueryResult<E, A>>,
41
+ ComputedRef<Result.Result<A, E>>,
26
42
  ComputedRef<A | undefined>,
27
43
  (options?: RefetchOptions | undefined) => Promise<QueryObserverResult<any, any>>,
28
44
  UseQueryReturnType<any, any>
@@ -36,7 +52,7 @@ export function useSafeQuery<Arg, E, A>(
36
52
  arg: Arg | WatchSource<Arg>,
37
53
  options?: QueryObserverOptionsCustom | undefined // TODO
38
54
  ): readonly [
39
- ComputedRef<QueryResult<E, A>>,
55
+ ComputedRef<Result.Result<A, E>>,
40
56
  ComputedRef<A | undefined>,
41
57
  (options?: RefetchOptions | undefined) => Promise<QueryObserverResult<any, any>>,
42
58
  UseQueryReturnType<any, any>
@@ -74,6 +90,10 @@ export function useSafeQuery(
74
90
  : useSafeQuery_(self, argOrOptions, options)
75
91
  }
76
92
 
93
+ export interface KnownFiberFailure<E> extends Runtime.FiberFailure {
94
+ readonly [Runtime.FiberFailureCauseId]: Cause.Cause<E>
95
+ }
96
+
77
97
  // TODO: options
78
98
  // declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryReturnType<TData, TError>;
79
99
  // declare function useQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>, queryClient?: QueryClient): UseQueryDefinedReturnType<TData, TError>;
@@ -81,7 +101,7 @@ export function useSafeQuery(
81
101
  export const useSafeQuery_ = <I, A, E>(
82
102
  q:
83
103
  | {
84
- handler: (
104
+ readonly handler: (
85
105
  req: I
86
106
  ) => Effect<
87
107
  FetchResponse<A>,
@@ -92,7 +112,7 @@ export const useSafeQuery_ = <I, A, E>(
92
112
  name: string
93
113
  }
94
114
  | {
95
- handler: Effect<
115
+ readonly handler: Effect<
96
116
  FetchResponse<A>,
97
117
  E,
98
118
  ApiConfig | HttpClient.Client.Default
@@ -101,7 +121,7 @@ export const useSafeQuery_ = <I, A, E>(
101
121
  name: string
102
122
  },
103
123
  arg?: I | WatchSource<I>,
104
- options: QueryObserverOptionsCustom = {} // TODO
124
+ options: QueryObserverOptionsCustom<unknown, KnownFiberFailure<E>, A> = {} // TODO
105
125
  ) => {
106
126
  const arr = arg
107
127
  const req: { value: I } = !arg
@@ -114,69 +134,60 @@ export const useSafeQuery_ = <I, A, E>(
114
134
  } as any)
115
135
  : ref(arg)
116
136
  const queryKey = makeQueryKey(q.name)
117
- const r = useQuery(
118
- Effect.isEffect(q.handler)
137
+ const handler = q.handler
138
+ const r = useQuery<unknown, KnownFiberFailure<E>, A>(
139
+ Effect.isEffect(handler)
119
140
  ? {
120
141
  ...options,
121
142
  queryKey,
122
143
  queryFn: ({ signal }) =>
123
- run
124
- .value(Effect.map(q.handler as any, (_) => (_ as any).body), { signal })
125
- .catch((_) => {
126
- if (!Runtime.isFiberFailure(_)) throw _
127
- const cause = _[Runtime.FiberFailureCauseId]
128
- throw Cause.squash(cause)
129
- })
144
+ run.value(
145
+ Effect
146
+ .map(handler, (_) => _.body)
147
+ .pipe(Effect.tapDefect(reportRuntimeError)),
148
+ { signal }
149
+ )
130
150
  }
131
151
  : {
132
152
  ...options,
133
153
  queryKey: [...queryKey, req],
134
154
  queryFn: ({ signal }) =>
135
155
  run
136
- .value(Effect.map((q.handler as any)(req.value), (_) => (_ as any).body), { signal })
137
- .catch((_) => {
138
- if (!Runtime.isFiberFailure(_)) throw _
139
- const cause = _[Runtime.FiberFailureCauseId]
140
- throw Cause.squash(cause)
141
- })
156
+ .value(
157
+ Effect
158
+ .map(handler(req.value), (_) => _.body)
159
+ .pipe(Effect.tapDefect(reportRuntimeError)),
160
+ { signal }
161
+ )
142
162
  }
143
163
  )
144
164
 
145
165
  const result = computed(() =>
146
166
  swrToQuery({
147
- error: r.error.value,
167
+ error: r.error.value ?? undefined,
148
168
  data: r.data.value,
149
169
  isValidating: r.isFetching.value
150
170
  })
151
171
  )
152
- const latestSuccess = computed(() => {
153
- const value = result.value
154
- return isSuccess(value)
155
- ? Either.isRight(value.current)
156
- ? value.current.right
157
- : Option.isSome(value.previous)
158
- ? value.previous.value
159
- : undefined
160
- : undefined
161
- })
172
+ const latestSuccess = computed(() => Option.getOrUndefined(Result.value(result.value)))
162
173
  return [result, latestSuccess, r.refetch, r] as const
163
174
  }
164
175
 
165
176
  function swrToQuery<E, A>(r: {
166
- error: E | undefined
177
+ error: KnownFiberFailure<E> | undefined
167
178
  data: A | undefined
168
179
  isValidating: boolean
169
- }): QueryResult<E, A> {
180
+ }): Result.Result<A, E> {
170
181
  if (r.error) {
171
- return r.isValidating
172
- ? Refreshing.fail<E, A>(r.error, r.data)
173
- : Done.fail<E, A>(r.error, r.data)
182
+ return Result.failureWithPrevious(
183
+ r.error[Runtime.FiberFailureCauseId],
184
+ r.data === undefined ? Option.none() : Option.some(Result.success(r.data)),
185
+ r.isValidating
186
+ )
174
187
  }
175
188
  if (r.data !== undefined) {
176
- return r.isValidating
177
- ? Refreshing.succeed<A, E>(r.data)
178
- : Done.succeed<A, E>(r.data)
189
+ return Result.success<A, E>(r.data, r.isValidating)
179
190
  }
180
191
 
181
- return r.isValidating ? new Loading() : new Initial()
192
+ return Result.initial(r.isValidating)
182
193
  }