From 95674a8465452a82ab5d7304b4de6a85e00b8b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Tue, 22 Jul 2025 23:32:20 +0200 Subject: [PATCH] Fix --- packages/effect-fc/src/Component.ts | 42 +++++++++++++++++++---------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/effect-fc/src/Component.ts b/packages/effect-fc/src/Component.ts index e860189..2827d84 100644 --- a/packages/effect-fc/src/Component.ts +++ b/packages/effect-fc/src/Component.ts @@ -43,6 +43,11 @@ const ComponentProto = Object.freeze({ }, } as const) +const defaultOptions = { + finalizerExecutionMode: "sync", + finalizerExecutionStrategy: ExecutionStrategy.sequential, +} as const + const makeWithDefaults = (): Component => Object.assign( Object.setPrototypeOf(function() {}, ComponentProto), { finalizerExecutionMode: "sync", @@ -290,29 +295,38 @@ export const make: ( ) = (spanNameOrBody: Function | string, ...pipeables: any[]): any => { if (typeof spanNameOrBody !== "string") { const displayName = displayNameFromBody(spanNameOrBody) - return Object.assign(makeWithDefaults(), { - body: displayName - ? Effect.fn(displayName)(spanNameOrBody as any, ...pipeables as []) - : Effect.fn(spanNameOrBody as any, ...pipeables), - displayName, - }) + return Object.setPrototypeOf( + Object.assign(function() {}, { + body: displayName + ? Effect.fn(displayName)(spanNameOrBody as any, ...pipeables as []) + : Effect.fn(spanNameOrBody as any, ...pipeables), + displayName, + }), + ComponentProto, + ) } else { const spanOptions = pipeables[0] - return (body: any, ...pipeables: any[]) => Object.assign(makeWithDefaults(), { - body: Effect.fn(spanNameOrBody, spanOptions)(body, ...pipeables as []), - displayName: displayNameFromBody(body) ?? spanNameOrBody, - }) + return (body: any, ...pipeables: any[]) => Object.setPrototypeOf( + Object.assign(function() {}, { + body: Effect.fn(spanNameOrBody, spanOptions)(body, ...pipeables as []), + displayName: displayNameFromBody(body) ?? spanNameOrBody, + }), + ComponentProto, + ) } } export const makeUntraced: make.Gen & make.NonGen = ( body: Function, ...pipeables: any[] -) => Object.assign(makeWithDefaults(), { - body: Effect.fnUntraced(body as any, ...pipeables as []), - displayName: displayNameFromBody(body), -}, ComponentProto) +) => Object.setPrototypeOf( + Object.assign(function() {}, { + body: Effect.fnUntraced(body as any, ...pipeables as []), + displayName: displayNameFromBody(body), + }), + ComponentProto, +) const displayNameFromBody = (body: Function) => !String.isEmpty(body.name) ? body.name : undefined