Skip to content

Commit eceb3a3

Browse files
committed
align on CauseException
1 parent facb80b commit eceb3a3

4 files changed

Lines changed: 37 additions & 39 deletions

File tree

.changeset/brave-years-fry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@effect-app/vue": patch
3+
---
4+
5+
align CauseException

packages/effect-app/src/client/errors.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ export class CauseException<E> extends Error {
207207
Error.stackTraceLimit = 0
208208
super()
209209
Error.stackTraceLimit = limit
210+
this.cause = Cause.squash(originalCause)
210211
// v4: makeFiberFailure removed — use Cause.prettyErrors instead
211212
const errors = Cause.prettyErrors(originalCause)
212213
const first = errors[0]

packages/vue/src/query.ts

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { type DefaultError, type Enabled, type InitialDataFunction, type NonUnde
66
import { Array, Cause, type Context, Effect, Option, S } from "effect-app"
77
import { type Req } from "effect-app/client"
88
import type { RequestHandler, RequestHandlerWithInput } from "effect-app/client/clientFor"
9-
import { ServiceUnavailableError } from "effect-app/client/errors"
9+
import { CauseException, ServiceUnavailableError } from "effect-app/client/errors"
1010
import { type Span } from "effect/Tracer"
1111
import { isHttpClientError } from "effect/unstable/http/HttpClientError"
1212
import * as AsyncResult from "effect/unstable/reactivity/AsyncResult"
@@ -75,14 +75,6 @@ export interface CustomDefinedPlaceholderQueryOptions<
7575
| PlaceholderDataFunction<NonFunctionGuard<TQueryData>, TError, NonFunctionGuard<TQueryData>, TQueryKey>
7676
}
7777

78-
export class KnownFiberFailure<E> extends Error {
79-
readonly error: unknown
80-
constructor(public effectCause: Cause.Cause<E>) {
81-
super("Query failed with cause: " + Cause.squash(effectCause))
82-
this.error = Cause.squash(effectCause)
83-
}
84-
}
85-
8678
export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
8779
const useQuery_: {
8880
<I, A, E, Request extends Req, Name extends string>(
@@ -96,8 +88,8 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
9688
): readonly [
9789
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
9890
ComputedRef<TData | undefined>,
99-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>, never, never>,
100-
UseQueryDefinedReturnType<TData, KnownFiberFailure<E>>
91+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>, never, never>,
92+
UseQueryDefinedReturnType<TData, CauseException<E>>
10193
]
10294

10395
<TData = A>(
@@ -106,8 +98,8 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
10698
): readonly [
10799
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
108100
ComputedRef<TData>,
109-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>, never, never>,
110-
UseQueryDefinedReturnType<TData, KnownFiberFailure<E>>
101+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>, never, never>,
102+
UseQueryDefinedReturnType<TData, CauseException<E>>
111103
]
112104

113105
<TData = A>(
@@ -116,8 +108,8 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
116108
): readonly [
117109
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
118110
ComputedRef<TData>,
119-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>, never, never>,
120-
UseQueryDefinedReturnType<TData, KnownFiberFailure<E>>
111+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>, never, never>,
112+
UseQueryDefinedReturnType<TData, CauseException<E>>
121113
]
122114
}
123115
} = <I, A, E, Request extends Req, Name extends string>(
@@ -131,7 +123,7 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
131123
options?: any
132124
// TODO
133125
) => {
134-
// we wrap into KnownFiberFailure because we want to keep the full cause of the failure.
126+
// we wrap into CauseException because we want to keep the full cause of the failure.
135127
const runPromise = makeRunPromise(getRuntime())
136128
const arr = arg
137129
const req: { value: I } = !arg
@@ -156,14 +148,14 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
156148
throwOnError: false
157149
}
158150

159-
const r = useTanstackQuery<A, KnownFiberFailure<E>, TData>(
151+
const r = useTanstackQuery<A, CauseException<E>, TData>(
160152
Effect.isEffect(handler)
161153
? {
162154
...defaultOptions,
163155
...options,
164156
retry: (retryCount, error) => {
165-
if (error instanceof KnownFiberFailure) {
166-
if (!isHttpClientError(error.error) && !S.is(ServiceUnavailableError)(error.error)) {
157+
if (error instanceof CauseException) {
158+
if (!isHttpClientError(error.cause) && !S.is(ServiceUnavailableError)(error.cause)) {
167159
return false
168160
}
169161
}
@@ -186,8 +178,8 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
186178
...defaultOptions,
187179
...options,
188180
retry: (retryCount, error) => {
189-
if (error instanceof KnownFiberFailure) {
190-
if (!isHttpClientError(error.error) && !S.is(ServiceUnavailableError)(error.error)) {
181+
if (error instanceof CauseException) {
182+
if (!isHttpClientError(error.cause) && !S.is(ServiceUnavailableError)(error.cause)) {
191183
return false
192184
}
193185
}
@@ -235,13 +227,13 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
235227
}
236228

237229
function swrToQuery<E, A>(r: {
238-
error: KnownFiberFailure<E> | undefined
230+
error: CauseException<E> | undefined
239231
data: A | undefined
240232
isValidating: boolean
241233
}): AsyncResult.AsyncResult<A, E> {
242234
if (r.error !== undefined) {
243235
return AsyncResult.failureWithPrevious(
244-
r.error.effectCause,
236+
r.error.originalCause,
245237
{
246238
previous: r.data === undefined ? Option.none() : Option.some(AsyncResult.success(r.data)),
247239
waiting: r.isValidating
@@ -268,29 +260,29 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
268260
* Effect results are passed to the caller, including errors.
269261
*/
270262
<TData = A>(
271-
options: CustomDefinedInitialQueryOptions<A, KnownFiberFailure<E>, TData>
263+
options: CustomDefinedInitialQueryOptions<A, CauseException<E>, TData>
272264
): readonly [
273265
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
274266
ComputedRef<TData>,
275-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>>,
267+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>>,
276268
UseQueryReturnType<any, any>
277269
]
278270
<TData = A>(
279271
options: CustomDefinedPlaceholderQueryOptions<A, E, TData>
280272
): readonly [
281273
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
282274
ComputedRef<TData>,
283-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>, never, never>,
284-
UseQueryDefinedReturnType<TData, KnownFiberFailure<E>>
275+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>, never, never>,
276+
UseQueryDefinedReturnType<TData, CauseException<E>>
285277
]
286278
// optional options, optional A
287279
/**
288280
* Effect results are passed to the caller, including errors.
289281
*/
290-
<TData = A>(options?: CustomUndefinedInitialQueryOptions<A, KnownFiberFailure<E>, TData>): readonly [
282+
<TData = A>(options?: CustomUndefinedInitialQueryOptions<A, CauseException<E>, TData>): readonly [
291283
ComputedRef<AsyncResult.AsyncResult<A, E>>,
292284
ComputedRef<A | undefined>,
293-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>>,
285+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>>,
294286
UseQueryReturnType<any, any>
295287
]
296288
}
@@ -307,11 +299,11 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
307299
*/
308300
<TData = A>(
309301
arg: Arg | WatchSource<Arg>,
310-
options: CustomDefinedInitialQueryOptions<A, KnownFiberFailure<E>, TData>
302+
options: CustomDefinedInitialQueryOptions<A, CauseException<E>, TData>
311303
): readonly [
312304
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
313305
ComputedRef<TData>,
314-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>>,
306+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>>,
315307
UseQueryReturnType<any, any>
316308
]
317309
// required options, with placeholderData
@@ -320,11 +312,11 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
320312
*/
321313
<TData = A>(
322314
arg: Arg | WatchSource<Arg>,
323-
options: CustomDefinedPlaceholderQueryOptions<A, KnownFiberFailure<E>, TData>
315+
options: CustomDefinedPlaceholderQueryOptions<A, CauseException<E>, TData>
324316
): readonly [
325317
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
326318
ComputedRef<TData>,
327-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>>,
319+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>>,
328320
UseQueryReturnType<any, any>
329321
]
330322
// optional options, optional A
@@ -333,11 +325,11 @@ export const makeQuery = <R>(getRuntime: () => Context.Context<R>) => {
333325
*/
334326
<TData = A>(
335327
arg: Arg | WatchSource<Arg>,
336-
options?: CustomUndefinedInitialQueryOptions<A, KnownFiberFailure<E>, TData>
328+
options?: CustomUndefinedInitialQueryOptions<A, CauseException<E>, TData>
337329
): readonly [
338330
ComputedRef<AsyncResult.AsyncResult<TData, E>>,
339331
ComputedRef<TData | undefined>,
340-
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, KnownFiberFailure<E>>>,
332+
(options?: RefetchOptions) => Effect.Effect<QueryObserverResult<TData, CauseException<E>>>,
341333
UseQueryReturnType<any, any>
342334
]
343335
}

packages/vue/src/runtime.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Exit, flow, ManagedRuntime } from "effect"
22
import { Effect, Layer, Logger } from "effect-app"
3+
import { CauseException } from "effect-app/client/errors"
34
import { type Context } from "effect-app/Context"
4-
import { KnownFiberFailure } from "./query.js"
55

66
export function makeAppRuntime<A, E>(layer: Layer.Layer<A, E>) {
77
return Effect.gen(function*() {
@@ -32,12 +32,12 @@ export function initializeAsync<A, E>(layer: Layer.Layer<A, E, never>) {
3232
.runPromise(makeAppRuntime(layer))
3333
}
3434

35-
// we wrap into KnownFiberFailure because we want to keep the full cause of the failure.
35+
// we wrap into CauseException because we want to keep the full cause of the failure.
3636
export const makeRunPromise = <T>(services: Context<T>) =>
3737
flow(Effect.runPromiseExitWith(services), (_) =>
3838
_.then(
3939
Exit.match({
40-
onFailure: (cause) => Promise.reject(new KnownFiberFailure(cause)),
40+
onFailure: (cause) => Promise.reject(new CauseException(cause, "runPromise")),
4141
onSuccess: (value) => Promise.resolve(value)
4242
})
4343
))
@@ -47,7 +47,7 @@ export const makeRunSync = <T>(services: Context<T>) =>
4747
Effect.runSyncExitWith(services),
4848
Exit.match({
4949
onFailure: (cause) => {
50-
throw new KnownFiberFailure(cause)
50+
throw new CauseException(cause, "runSync")
5151
},
5252
onSuccess: (value) => value
5353
})

0 commit comments

Comments
 (0)