@effect-app/vue 1.1.0 → 1.2.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 +12 -0
- package/_cjs/hooks.cjs +0 -26
- package/_cjs/hooks.cjs.map +1 -1
- package/_cjs/index.cjs +6 -22
- package/_cjs/index.cjs.map +1 -1
- package/_cjs/internal.cjs +3 -2
- package/_cjs/internal.cjs.map +1 -1
- package/_cjs/mutate.cjs +6 -9
- package/_cjs/mutate.cjs.map +1 -1
- package/_cjs/query.cjs +17 -20
- package/_cjs/query.cjs.map +1 -1
- package/dist/hooks.d.ts +0 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +1 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +3 -2
- package/dist/mutate.d.ts +6 -5
- package/dist/mutate.d.ts.map +1 -1
- package/dist/mutate.js +8 -19
- package/dist/query.d.ts +14 -9
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +21 -38
- package/package.json +6 -4
- package/src/hooks.ts +0 -1
- package/src/index.ts +1 -1
- package/src/internal.ts +2 -1
- package/src/mutate.ts +16 -23
- package/src/query.ts +57 -46
- package/vitest.config.ts.timestamp-1711656440837-d04458a029af.mjs +37 -0
- package/vitest.config.ts.timestamp-1711724061890-e8772f088aa0d.mjs +37 -0
- package/vitest.config.ts.timestamp-1711743471018-f8eca63460d15.mjs +37 -0
- package/vitest.config.ts.timestamp-1711743489536-332f6bf4f074c.mjs +37 -0
- package/vitest.config.ts.timestamp-1711744615240-85d4d02f24414.mjs +37 -0
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
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 {
|
|
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
|
|
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
|
-
.
|
|
58
|
-
.
|
|
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
|
|
70
|
-
.
|
|
71
|
-
|
|
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
|
|
88
|
+
return Result.initial(r.isValidating);
|
|
106
89
|
}
|
|
107
|
-
//# 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.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/effect-ts-app/libs/tree/main/packages/vue",
|
|
@@ -9,13 +9,15 @@
|
|
|
9
9
|
"@tanstack/vue-query": "^5.32.0",
|
|
10
10
|
"query-string": "^9.0.0",
|
|
11
11
|
"@effect-app/core": "1.0.6",
|
|
12
|
-
"effect-app": "1.0.
|
|
13
|
-
"@effect-app/vue": "1.
|
|
14
|
-
"
|
|
12
|
+
"@effect-app/schema": "1.0.10",
|
|
13
|
+
"@effect-app/vue": "1.2.0",
|
|
14
|
+
"effect-app": "1.1.0"
|
|
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",
|
package/src/hooks.ts
CHANGED
package/src/index.ts
CHANGED
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
|
-
|
|
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 {
|
|
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<
|
|
17
|
-
const result = shallowRef(
|
|
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 =
|
|
22
|
-
? new Loading()
|
|
23
|
-
: new Refreshing(result.value)
|
|
22
|
+
result.value = Result.waiting(result.value)
|
|
24
23
|
})
|
|
25
24
|
.pipe(
|
|
26
|
-
Effect.andThen(
|
|
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<
|
|
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<
|
|
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<
|
|
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<
|
|
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
|
|
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
|
|
8
|
-
import {
|
|
9
|
-
import type { ApiConfig, FetchResponse
|
|
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
|
|
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<
|
|
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<
|
|
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
|
|
118
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
}):
|
|
180
|
+
}): Result.Result<A, E> {
|
|
170
181
|
if (r.error) {
|
|
171
|
-
return
|
|
172
|
-
|
|
173
|
-
:
|
|
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
|
|
192
|
+
return Result.initial(r.isValidating)
|
|
182
193
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// packages/vue/vitest.config.ts
|
|
2
|
+
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
|
|
3
|
+
|
|
4
|
+
// vite.config.base.ts
|
|
5
|
+
import path from "path";
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
|
|
8
|
+
function makeConfig(dirName) {
|
|
9
|
+
const prefix = path.resolve(__vite_injected_original_dirname, "packages");
|
|
10
|
+
const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
|
|
11
|
+
const cfg = {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
+
//plugins: [autoImport],
|
|
14
|
+
test: {
|
|
15
|
+
include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
16
|
+
reporters: "verbose",
|
|
17
|
+
globals: true
|
|
18
|
+
},
|
|
19
|
+
resolve: {
|
|
20
|
+
alias: packages.reduce((acc, cur) => {
|
|
21
|
+
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
|
|
22
|
+
return acc;
|
|
23
|
+
}, {})
|
|
24
|
+
// "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
console.log(cfg);
|
|
28
|
+
return cfg;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// packages/vue/vitest.config.ts
|
|
32
|
+
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/vue";
|
|
33
|
+
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
34
|
+
export {
|
|
35
|
+
vitest_config_default as default
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvdnVlL3ZpdGVzdC5jb25maWcudHMiLCAidml0ZS5jb25maWcuYmFzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvdnVlXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvcGF0cmlja3JvemEvcGovZWZmZWN0LWFwcC9saWJzL3BhY2thZ2VzL3Z1ZS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvdnVlL3ZpdGVzdC5jb25maWcudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgbWFrZUNvbmZpZyBmcm9tIFwiLi4vLi4vdml0ZS5jb25maWcuYmFzZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyhtYWtlQ29uZmlnKF9fZGlybmFtZSkpXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvcGF0cmlja3JvemEvcGovZWZmZWN0LWFwcC9saWJzL3ZpdGUuY29uZmlnLmJhc2UudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlc3QvY29uZmlnXCJcblxuLy8gY29uc3QgYXV0b0ltcG9ydCA9IEF1dG9JbXBvcnQoe1xuLy8gICBkdHM6IFwiLi90ZXN0L2F1dG8taW1wb3J0cy5kLnRzXCIsXG4vLyAgIC8vIGluY2x1ZGU6IFtcbi8vICAgLy8gICAvXFwudGVzdFxcLlt0al1zeD8kLyAvLyAudHMsIC50c3gsIC5qcywgLmpzeFxuLy8gICAvLyBdLFxuLy8gICBpbXBvcnRzOiBbXG4vLyAgICAgXCJ2aXRlc3RcIlxuLy8gICBdXG4vLyB9KVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQ29uZmlnKGRpck5hbWU/OiBzdHJpbmcpIHtcbiAgY29uc3QgcHJlZml4ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCJwYWNrYWdlc1wiKVxuICBjb25zdCBwYWNrYWdlcyA9IGZzLnJlYWRkaXJTeW5jKHByZWZpeCkubWFwKGYgPT4gcHJlZml4ICsgXCIvXCIgKyBmKS5maWx0ZXIoZiA9PiBmcy5sc3RhdFN5bmMoZikuaXNEaXJlY3RvcnkoKSApXG4gIGNvbnN0IGNmZyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIC8vcGx1Z2luczogW2F1dG9JbXBvcnRdLFxuICAgIHRlc3Q6IHtcbiAgICAgIGluY2x1ZGU6ICBbXCIuL3Rlc3QvKiovKi50ZXN0LntqcyxtanMsY2pzLHRzLG10cyxjdHMsanN4LHRzeH1cIl0sXG4gICAgICByZXBvcnRlcnM6IFwidmVyYm9zZVwiLFxuICAgICAgZ2xvYmFsczogdHJ1ZVxuICAgIH0sXG4gICAgcmVzb2x2ZToge1xuICAgICAgYWxpYXM6IHBhY2thZ2VzLnJlZHVjZSgoYWNjLCBjdXIpID0+IHsgLy8gd29ya2Fyb3VuZCBmb3IgL1ByZWx1ZGUgaXNzdWVcbiAgICAgIGFjY1tKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjdXIgKyBcIi9wYWNrYWdlLmpzb25cIiwgXCJ1dGYtOFwiKSkubmFtZV0gPSBwYXRoLnJlc29sdmUoY3VyLCBjdXIuZW5kc1dpdGgoXCJjb3JlXCIpID8gXCJkaXN0XCIgOiBcInNyY1wiKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHsgfSkgLy8gXCJAZWZmZWN0LWFwcC9jb3JlL1ByZWx1ZGVcIjogcGF0aC5qb2luKF9fZGlybmFtZSwgXCJwYWNrYWdlcy9jb3JlL3NyYy9QcmVsdWRlLmNvZGUudHNcIilcbiAgfVxuICB9XG4gIGNvbnNvbGUubG9nKGNmZylcbiAgcmV0dXJuIGNmZ1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVMsb0JBQW9COzs7QUNBN0IsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sUUFBUTtBQUZmLElBQU0sbUNBQW1DO0FBZ0IxQixTQUFSLFdBQTRCLFNBQWtCO0FBQ25ELFFBQU0sU0FBUyxLQUFLLFFBQVEsa0NBQVcsVUFBVTtBQUNqRCxRQUFNLFdBQVcsR0FBRyxZQUFZLE1BQU0sRUFBRSxJQUFJLE9BQUssU0FBUyxNQUFNLENBQUMsRUFBRSxPQUFPLE9BQUssR0FBRyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUU7QUFDN0csUUFBTSxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR1YsTUFBTTtBQUFBLE1BQ0osU0FBVSxDQUFDLGtEQUFrRDtBQUFBLE1BQzdELFdBQVc7QUFBQSxNQUNYLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxPQUFPLFNBQVMsT0FBTyxDQUFDLEtBQUssUUFBUTtBQUNyQyxZQUFJLEtBQUssTUFBTSxHQUFHLGFBQWEsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssUUFBUSxLQUFLLElBQUksU0FBUyxNQUFNLElBQUksU0FBUyxLQUFLO0FBQy9ILGVBQU87QUFBQSxNQUNULEdBQUcsQ0FBRSxDQUFDO0FBQUE7QUFBQSxJQUNSO0FBQUEsRUFDQTtBQUNBLFVBQVEsSUFBSSxHQUFHO0FBQ2YsU0FBTztBQUNUOzs7QURwQ0EsSUFBTUEsb0NBQW1DO0FBSXpDLElBQU8sd0JBQVEsYUFBYSxXQUFXQyxpQ0FBUyxDQUFDOyIsCiAgIm5hbWVzIjogWyJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// packages/vue/vitest.config.ts
|
|
2
|
+
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
|
|
3
|
+
|
|
4
|
+
// vite.config.base.ts
|
|
5
|
+
import path from "path";
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
|
|
8
|
+
function makeConfig(dirName) {
|
|
9
|
+
const prefix = path.resolve(__vite_injected_original_dirname, "packages");
|
|
10
|
+
const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
|
|
11
|
+
const cfg = {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
+
//plugins: [autoImport],
|
|
14
|
+
test: {
|
|
15
|
+
include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
16
|
+
reporters: "verbose",
|
|
17
|
+
globals: true
|
|
18
|
+
},
|
|
19
|
+
resolve: {
|
|
20
|
+
alias: packages.reduce((acc, cur) => {
|
|
21
|
+
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
|
|
22
|
+
return acc;
|
|
23
|
+
}, {})
|
|
24
|
+
// "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
console.log(cfg);
|
|
28
|
+
return cfg;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// packages/vue/vitest.config.ts
|
|
32
|
+
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/vue";
|
|
33
|
+
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
34
|
+
export {
|
|
35
|
+
vitest_config_default as default
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvdnVlL3ZpdGVzdC5jb25maWcudHMiLCAidml0ZS5jb25maWcuYmFzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvdnVlXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvcGF0cmlja3JvemEvcGovZWZmZWN0LWFwcC9saWJzL3BhY2thZ2VzL3Z1ZS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvdnVlL3ZpdGVzdC5jb25maWcudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgbWFrZUNvbmZpZyBmcm9tIFwiLi4vLi4vdml0ZS5jb25maWcuYmFzZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyhtYWtlQ29uZmlnKF9fZGlybmFtZSkpXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvcGF0cmlja3JvemEvcGovZWZmZWN0LWFwcC9saWJzL3ZpdGUuY29uZmlnLmJhc2UudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlc3QvY29uZmlnXCJcblxuLy8gY29uc3QgYXV0b0ltcG9ydCA9IEF1dG9JbXBvcnQoe1xuLy8gICBkdHM6IFwiLi90ZXN0L2F1dG8taW1wb3J0cy5kLnRzXCIsXG4vLyAgIC8vIGluY2x1ZGU6IFtcbi8vICAgLy8gICAvXFwudGVzdFxcLlt0al1zeD8kLyAvLyAudHMsIC50c3gsIC5qcywgLmpzeFxuLy8gICAvLyBdLFxuLy8gICBpbXBvcnRzOiBbXG4vLyAgICAgXCJ2aXRlc3RcIlxuLy8gICBdXG4vLyB9KVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQ29uZmlnKGRpck5hbWU/OiBzdHJpbmcpIHtcbiAgY29uc3QgcHJlZml4ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCJwYWNrYWdlc1wiKVxuICBjb25zdCBwYWNrYWdlcyA9IGZzLnJlYWRkaXJTeW5jKHByZWZpeCkubWFwKGYgPT4gcHJlZml4ICsgXCIvXCIgKyBmKS5maWx0ZXIoZiA9PiBmcy5sc3RhdFN5bmMoZikuaXNEaXJlY3RvcnkoKSApXG4gIGNvbnN0IGNmZyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIC8vcGx1Z2luczogW2F1dG9JbXBvcnRdLFxuICAgIHRlc3Q6IHtcbiAgICAgIGluY2x1ZGU6ICBbXCIuL3Rlc3QvKiovKi50ZXN0LntqcyxtanMsY2pzLHRzLG10cyxjdHMsanN4LHRzeH1cIl0sXG4gICAgICByZXBvcnRlcnM6IFwidmVyYm9zZVwiLFxuICAgICAgZ2xvYmFsczogdHJ1ZVxuICAgIH0sXG4gICAgcmVzb2x2ZToge1xuICAgICAgYWxpYXM6IHBhY2thZ2VzLnJlZHVjZSgoYWNjLCBjdXIpID0+IHsgLy8gd29ya2Fyb3VuZCBmb3IgL1ByZWx1ZGUgaXNzdWVcbiAgICAgIGFjY1tKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjdXIgKyBcIi9wYWNrYWdlLmpzb25cIiwgXCJ1dGYtOFwiKSkubmFtZV0gPSBwYXRoLnJlc29sdmUoY3VyLCBjdXIuZW5kc1dpdGgoXCJjb3JlXCIpID8gXCJkaXN0XCIgOiBcInNyY1wiKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHsgfSkgLy8gXCJAZWZmZWN0LWFwcC9jb3JlL1ByZWx1ZGVcIjogcGF0aC5qb2luKF9fZGlybmFtZSwgXCJwYWNrYWdlcy9jb3JlL3NyYy9QcmVsdWRlLmNvZGUudHNcIilcbiAgfVxuICB9XG4gIGNvbnNvbGUubG9nKGNmZylcbiAgcmV0dXJuIGNmZ1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVMsb0JBQW9COzs7QUNBN0IsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sUUFBUTtBQUZmLElBQU0sbUNBQW1DO0FBZ0IxQixTQUFSLFdBQTRCLFNBQWtCO0FBQ25ELFFBQU0sU0FBUyxLQUFLLFFBQVEsa0NBQVcsVUFBVTtBQUNqRCxRQUFNLFdBQVcsR0FBRyxZQUFZLE1BQU0sRUFBRSxJQUFJLE9BQUssU0FBUyxNQUFNLENBQUMsRUFBRSxPQUFPLE9BQUssR0FBRyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUU7QUFDN0csUUFBTSxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR1YsTUFBTTtBQUFBLE1BQ0osU0FBVSxDQUFDLGtEQUFrRDtBQUFBLE1BQzdELFdBQVc7QUFBQSxNQUNYLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxPQUFPLFNBQVMsT0FBTyxDQUFDLEtBQUssUUFBUTtBQUNyQyxZQUFJLEtBQUssTUFBTSxHQUFHLGFBQWEsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssUUFBUSxLQUFLLElBQUksU0FBUyxNQUFNLElBQUksU0FBUyxLQUFLO0FBQy9ILGVBQU87QUFBQSxNQUNULEdBQUcsQ0FBRSxDQUFDO0FBQUE7QUFBQSxJQUNSO0FBQUEsRUFDQTtBQUNBLFVBQVEsSUFBSSxHQUFHO0FBQ2YsU0FBTztBQUNUOzs7QURwQ0EsSUFBTUEsb0NBQW1DO0FBSXpDLElBQU8sd0JBQVEsYUFBYSxXQUFXQyxpQ0FBUyxDQUFDOyIsCiAgIm5hbWVzIjogWyJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// packages/vue/vitest.config.ts
|
|
2
|
+
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
|
|
3
|
+
|
|
4
|
+
// vite.config.base.ts
|
|
5
|
+
import path from "path";
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
|
|
8
|
+
function makeConfig(dirName) {
|
|
9
|
+
const prefix = path.resolve(__vite_injected_original_dirname, "packages");
|
|
10
|
+
const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
|
|
11
|
+
const cfg = {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
+
//plugins: [autoImport],
|
|
14
|
+
test: {
|
|
15
|
+
include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
16
|
+
reporters: "verbose",
|
|
17
|
+
globals: true
|
|
18
|
+
},
|
|
19
|
+
resolve: {
|
|
20
|
+
alias: packages.reduce((acc, cur) => {
|
|
21
|
+
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
|
|
22
|
+
return acc;
|
|
23
|
+
}, {})
|
|
24
|
+
// "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
console.log(cfg);
|
|
28
|
+
return cfg;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// packages/vue/vitest.config.ts
|
|
32
|
+
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/vue";
|
|
33
|
+
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
34
|
+
export {
|
|
35
|
+
vitest_config_default as default
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvdnVlL3ZpdGVzdC5jb25maWcudHMiLCAidml0ZS5jb25maWcuYmFzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvdnVlXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvcGF0cmlja3JvemEvcGovZWZmZWN0LWFwcC9saWJzL3BhY2thZ2VzL3Z1ZS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvdnVlL3ZpdGVzdC5jb25maWcudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZVwiXG5pbXBvcnQgbWFrZUNvbmZpZyBmcm9tIFwiLi4vLi4vdml0ZS5jb25maWcuYmFzZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyhtYWtlQ29uZmlnKF9fZGlybmFtZSkpXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvcGF0cmlja3JvemEvcGovZWZmZWN0LWFwcC9saWJzL3ZpdGUuY29uZmlnLmJhc2UudHNcIjsvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGVzdFwiIC8+XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlc3QvY29uZmlnXCJcblxuLy8gY29uc3QgYXV0b0ltcG9ydCA9IEF1dG9JbXBvcnQoe1xuLy8gICBkdHM6IFwiLi90ZXN0L2F1dG8taW1wb3J0cy5kLnRzXCIsXG4vLyAgIC8vIGluY2x1ZGU6IFtcbi8vICAgLy8gICAvXFwudGVzdFxcLlt0al1zeD8kLyAvLyAudHMsIC50c3gsIC5qcywgLmpzeFxuLy8gICAvLyBdLFxuLy8gICBpbXBvcnRzOiBbXG4vLyAgICAgXCJ2aXRlc3RcIlxuLy8gICBdXG4vLyB9KVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQ29uZmlnKGRpck5hbWU/OiBzdHJpbmcpIHtcbiAgY29uc3QgcHJlZml4ID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCJwYWNrYWdlc1wiKVxuICBjb25zdCBwYWNrYWdlcyA9IGZzLnJlYWRkaXJTeW5jKHByZWZpeCkubWFwKGYgPT4gcHJlZml4ICsgXCIvXCIgKyBmKS5maWx0ZXIoZiA9PiBmcy5sc3RhdFN5bmMoZikuaXNEaXJlY3RvcnkoKSApXG4gIGNvbnN0IGNmZyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIC8vcGx1Z2luczogW2F1dG9JbXBvcnRdLFxuICAgIHRlc3Q6IHtcbiAgICAgIGluY2x1ZGU6ICBbXCIuL3Rlc3QvKiovKi50ZXN0LntqcyxtanMsY2pzLHRzLG10cyxjdHMsanN4LHRzeH1cIl0sXG4gICAgICByZXBvcnRlcnM6IFwidmVyYm9zZVwiLFxuICAgICAgZ2xvYmFsczogdHJ1ZVxuICAgIH0sXG4gICAgcmVzb2x2ZToge1xuICAgICAgYWxpYXM6IHBhY2thZ2VzLnJlZHVjZSgoYWNjLCBjdXIpID0+IHsgLy8gd29ya2Fyb3VuZCBmb3IgL1ByZWx1ZGUgaXNzdWVcbiAgICAgIGFjY1tKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjdXIgKyBcIi9wYWNrYWdlLmpzb25cIiwgXCJ1dGYtOFwiKSkubmFtZV0gPSBwYXRoLnJlc29sdmUoY3VyLCBjdXIuZW5kc1dpdGgoXCJjb3JlXCIpID8gXCJkaXN0XCIgOiBcInNyY1wiKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHsgfSkgLy8gXCJAZWZmZWN0LWFwcC9jb3JlL1ByZWx1ZGVcIjogcGF0aC5qb2luKF9fZGlybmFtZSwgXCJwYWNrYWdlcy9jb3JlL3NyYy9QcmVsdWRlLmNvZGUudHNcIilcbiAgfVxuICB9XG4gIGNvbnNvbGUubG9nKGNmZylcbiAgcmV0dXJuIGNmZ1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVMsb0JBQW9COzs7QUNBN0IsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sUUFBUTtBQUZmLElBQU0sbUNBQW1DO0FBZ0IxQixTQUFSLFdBQTRCLFNBQWtCO0FBQ25ELFFBQU0sU0FBUyxLQUFLLFFBQVEsa0NBQVcsVUFBVTtBQUNqRCxRQUFNLFdBQVcsR0FBRyxZQUFZLE1BQU0sRUFBRSxJQUFJLE9BQUssU0FBUyxNQUFNLENBQUMsRUFBRSxPQUFPLE9BQUssR0FBRyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUU7QUFDN0csUUFBTSxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR1YsTUFBTTtBQUFBLE1BQ0osU0FBVSxDQUFDLGtEQUFrRDtBQUFBLE1BQzdELFdBQVc7QUFBQSxNQUNYLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxPQUFPLFNBQVMsT0FBTyxDQUFDLEtBQUssUUFBUTtBQUNyQyxZQUFJLEtBQUssTUFBTSxHQUFHLGFBQWEsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssUUFBUSxLQUFLLElBQUksU0FBUyxNQUFNLElBQUksU0FBUyxLQUFLO0FBQy9ILGVBQU87QUFBQSxNQUNULEdBQUcsQ0FBRSxDQUFDO0FBQUE7QUFBQSxJQUNSO0FBQUEsRUFDQTtBQUNBLFVBQVEsSUFBSSxHQUFHO0FBQ2YsU0FBTztBQUNUOzs7QURwQ0EsSUFBTUEsb0NBQW1DO0FBSXpDLElBQU8sd0JBQVEsYUFBYSxXQUFXQyxpQ0FBUyxDQUFDOyIsCiAgIm5hbWVzIjogWyJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K
|