Saltearse al contenido

Effect

Si no has oído hablar de él antes, Effect^ es una potente biblioteca TypeScript diseñada para ayudar a los desarrolladores a crear fácilmente programas complejos, sincronizados y asincrónicos.

StudioCMS utiliza Effect para gestionar la mayor parte de nuestro código, aportando simplicidad y facilidad de reutilización de funciones. También nos ha ayudado a optimizar los tiempos de carga del panel de control mediante un enfoque completamente nuevo al código asincrónico.

Mientras trabajas con StudioCMS y Effect, en lugar de necesitar instalarlo por tu cuenta, StudioCMS proporciona las herramientas Effect mediante la siguiente exportación

example.ts
import {
import Effect

@since2.0.0

@since2.0.0

@since2.0.0

Effect
,
import Context

@since2.0.0

@since2.0.0

Context
,
import Schema
Schema
,
import Data
Data
} from 'studiocms/effect';

Incluye todas las exportaciones base de la exportación por defecto de Effect import {} from 'effect'; así como algunas otras utilidades útiles de effect/Function y personalizadas de StudioCMS.

custom-utils.ts
import {
const runEffect: <A, E>(effect: Effect<A, E, never>) => Promise<A>

Executes an Effect asynchronously and returns a promise of its result.

@parameffect - The effect to run.

@returnsA promise that resolves with the result of the effect.

runEffect
,
function genLogger(label: string): <Eff extends YieldWrap<Effect<any, any, any>>, AEff>(f: (resume: Adapter) => Generator<Eff, AEff, never>) => Effect<AEff, [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer E, infer _R>>] ? ConfigError | E : never, [Eff] extends [never] ? never : [Eff] extends [YieldWrap<Effect<infer _A, infer _E, infer R>>] ? R : never>

Generates a logger function that wraps an effectful generator function with logging capabilities.

@paramlabel - A string label used to identify the logger.

@returns

A function that takes a generator function f and returns an Effect.Effect instance.

The returned function accepts a generator function f that yields wrapped effects (YieldWrap<Effect.Effect>). It logs the execution of the generator function and its effects using the provided label.

genLogger
,
const pipeLogger: ((label: string) => <A, E, R>(effect: Effect<A, E, R>) => Effect<A, E, R>) & (<A, E, R>(effect: Effect<A, E, R>, label: string) => Effect<A, E, R>)

Wraps an Effect with additional logging functionality.

This function applies a runtime logger and a log span to the provided Effect, enabling detailed logging for debugging and monitoring purposes.

@paramlabel - A string label used to identify the log entries and span.

@parameffect - The Effect to be wrapped with logging functionality.

@returnsA new Effect that includes runtime logging and a log span.

pipeLogger
,
const runtimeLogger: ((label: string) => <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>) & (<A, E, R>(self: Effect<A, E, R>, label: string) => Effect<A, E, R>)

Creates a runtime logger effect transformer that applies a specific label to log messages and configures the logging behavior based on the provided log level.

@paramlabel - A string label to associate with the logger for identifying log messages.

@returnsA higher-order function that takes an Effect and returns a new Effect with the logger configuration applied.

runtimeLogger
} from 'studiocms/effect';
¿Quieres aprender más sobre Effect? Echa un vistazo a la documentación de Effect^