From 745551ada7e0835994ee9e343fc7a280aefc8474 Mon Sep 17 00:00:00 2001 From: gcanti Date: Mon, 11 Dec 2023 09:18:32 +0100 Subject: [PATCH] update effect --- package.json | 4 ++-- pages/docs/configuration.mdx | 10 +++++----- pages/docs/observability/logging.mdx | 6 +++--- pnpm-lock.yaml | 20 +++++++++---------- src/configuration/App-gen.ts | 2 +- src/configuration/App.ts | 2 +- src/configuration/primitives-gen.ts | 4 ++-- src/configuration/primitives-pipe.ts | 5 +---- src/configuration/secret.ts | 2 +- src/configuration/withDefault-gen.ts | 6 ++---- src/configuration/withDefault-pipe.ts | 4 ++-- .../load-log-level-from-configuration.ts | 2 +- 12 files changed, 31 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 49798f5d1..1d45fab6f 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@effect/language-service": "^0.0.21", - "@effect/opentelemetry": "^0.26.0", + "@effect/opentelemetry": "^0.27.0", "@mdx-js/mdx": "^2.3.0", "@opentelemetry/exporter-trace-otlp-http": "0.43.0", "@opentelemetry/sdk-trace-base": "^1.17.1", @@ -34,7 +34,7 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "autoprefixer": "^10.4.14", - "effect": "2.0.0-next.59", + "effect": "2.0.0-next.60", "eslint": "^8.38.0", "eslint-config-next": "^13.3.0", "eslint-config-prettier": "^8.8.0", diff --git a/pages/docs/configuration.mdx b/pages/docs/configuration.mdx index abf1b7e92..137875a7e 100644 --- a/pages/docs/configuration.mdx +++ b/pages/docs/configuration.mdx @@ -10,11 +10,11 @@ Effect comes bundled with a straightforward default `ConfigProvider` that retrie To make our application configurable, we need to understand three essential elements: -- **Config Description**: We describe the configuration data using an instance of `Config`. If the configuration data is simple, such as a `string`, `number`, or `boolean`, we can use the built-in functions provided by the `Config` module. For more complex data types like `HostPort`, we can combine primitive configs to create a custom configuration description. +- **Config Description**: We describe the configuration data using an instance of `Config`. If the configuration data is simple, such as a `string`, `number`, or `boolean`, we can use the built-in functions provided by the `Config` module. For more complex data types like [`HostPort`](#custom-configurations), we can combine primitive configs to create a custom configuration description. -- **Config Frontend**: We use `Effect.config` to load the configuration data described by a `Config` instance. This function leverages the current `ConfigProvider` to retrieve the configuration. +- **Config Frontend**: We utilize the instance of `Config` to load the configuration data described by the instance (a `Config` is, in itself, an effect). This process leverages the current `ConfigProvider` to retrieve the configuration. -- **Config Backend**: The `ConfigProvider` is the underlying engine that powers `Effect.config` and handles the loading of configurations. Effect comes with a default config provider as part of its default services. This default provider reads the configuration data from environment variables. If we want to use a custom config provider, we can utilize the `Effect.setConfigProvider` layer to configure the Effect runtime accordingly. +- **Config Backend**: The `ConfigProvider` serves as the underlying engine that manages the configuration loading process. Effect comes with a default config provider as part of its default services. This default provider reads the configuration data from environment variables. If we want to use a custom config provider, we can utilize the `Effect.setConfigProvider` layer to configure the Effect runtime accordingly. ## Primitives @@ -117,14 +117,14 @@ If we use this customized configuration in our application: -```ts filename="App.ts" /Effect.config(HostPort.config)/ file=/src/configuration/App-gen.ts +```ts filename="App.ts" /HostPort.config/ file=/src/configuration/App-gen.ts ``` -```ts filename="App.ts" /Effect.config(HostPort.config)/ file=/src/configuration/App.ts +```ts filename="App.ts" /HostPort.config/ file=/src/configuration/App.ts ``` diff --git a/pages/docs/observability/logging.mdx b/pages/docs/observability/logging.mdx index 2d46b5520..ed6011164 100644 --- a/pages/docs/observability/logging.mdx +++ b/pages/docs/observability/logging.mdx @@ -32,7 +32,7 @@ The log message contains the following information: - `timestamp`: The timestamp when the log message was generated. - `level`: The log level at which the message is logged. -- `fiber`: The identifier of the [fiber](../concurrency/fibers#what-is-a-fiber) executing the program. +- `fiber`: The identifier of the [fiber](../concurrency/fibers.mdx#what-is-a-fiber) executing the program. - `message`: The content of the log message. - `span`: (Optional) The duration of the span in milliseconds. @@ -210,13 +210,13 @@ In this approach, you create a custom runtime that incorporates the configuratio ## Loading the Log Level from Configuration -To retrieve the log level from a [configuration](../configuration) and incorporate it into your program, utilize the layer produced by `Logger.minimumLogLevel`: +To retrieve the log level from a [configuration](../configuration.mdx) and incorporate it into your program, utilize the layer produced by `Logger.minimumLogLevel`: ```ts file=/src/logging/load-log-level-from-configuration.ts ``` -To evaluate the configured program, you can utilize `ConfigProvider.fromMap` for testing (refer to [Testing Services](../configuration#testing-services) for more details). +To evaluate the configured program, you can utilize `ConfigProvider.fromMap` for testing (refer to [Testing Services](../configuration.mdx#testing-services) for more details). ## Custom loggers diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 568cd1857..8848411cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,8 +29,8 @@ devDependencies: specifier: ^0.0.21 version: 0.0.21 '@effect/opentelemetry': - specifier: ^0.26.0 - version: 0.26.0(@opentelemetry/api@1.6.0)(@opentelemetry/resources@1.17.1)(@opentelemetry/sdk-trace-base@1.17.1)(@opentelemetry/semantic-conventions@1.17.1)(effect@2.0.0-next.59) + specifier: ^0.27.0 + version: 0.27.0(@opentelemetry/api@1.6.0)(@opentelemetry/resources@1.17.1)(@opentelemetry/sdk-trace-base@1.17.1)(@opentelemetry/semantic-conventions@1.17.1)(effect@2.0.0-next.60) '@mdx-js/mdx': specifier: ^2.3.0 version: 2.3.0 @@ -62,8 +62,8 @@ devDependencies: specifier: ^10.4.14 version: 10.4.14(postcss@8.4.23) effect: - specifier: 2.0.0-next.59 - version: 2.0.0-next.59 + specifier: 2.0.0-next.60 + version: 2.0.0-next.60 eslint: specifier: ^8.38.0 version: 8.39.0 @@ -162,8 +162,8 @@ packages: resolution: {integrity: sha512-e8vfKbjnbYiyneBincEFS0tzXluopGK77OkVFbPRtUbNDS5tJfb+jiwOQEiqASDsadcZmd+9J9+Q6v/z7GuN2g==} dev: true - /@effect/opentelemetry@0.26.0(@opentelemetry/api@1.6.0)(@opentelemetry/resources@1.17.1)(@opentelemetry/sdk-trace-base@1.17.1)(@opentelemetry/semantic-conventions@1.17.1)(effect@2.0.0-next.59): - resolution: {integrity: sha512-vDgDAmk1gNwYi5UmOHe1kOR+3qQfLV+zdg5A4hU1YlZwvkqmO2IW4NCYGxMFYgRHXRafiu/kTTiLw27ja92aUA==} + /@effect/opentelemetry@0.27.0(@opentelemetry/api@1.6.0)(@opentelemetry/resources@1.17.1)(@opentelemetry/sdk-trace-base@1.17.1)(@opentelemetry/semantic-conventions@1.17.1)(effect@2.0.0-next.60): + resolution: {integrity: sha512-qJGRWKEjG7Nseeb+gKq3NfAXNgqeWi8Q3F2u24LtA/2unwzu7cgMiCQ7Xi5r513CVbO870mwEDHdCfAVRlte0g==} peerDependencies: '@opentelemetry/api': ^1.6 '@opentelemetry/resources': ^1.17 @@ -172,7 +172,7 @@ packages: '@opentelemetry/sdk-trace-node': ^1.17 '@opentelemetry/sdk-trace-web': ^1.17 '@opentelemetry/semantic-conventions': ^1.17 - effect: 2.0.0-next.59 + effect: 2.0.0-next.60 peerDependenciesMeta: '@opentelemetry/sdk-metrics': optional: true @@ -187,7 +187,7 @@ packages: '@opentelemetry/resources': 1.17.1(@opentelemetry/api@1.6.0) '@opentelemetry/sdk-trace-base': 1.17.1(@opentelemetry/api@1.6.0) '@opentelemetry/semantic-conventions': 1.17.1 - effect: 2.0.0-next.59 + effect: 2.0.0-next.60 dev: true /@eslint-community/eslint-utils@4.4.0(eslint@8.39.0): @@ -2075,8 +2075,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /effect@2.0.0-next.59: - resolution: {integrity: sha512-EE87vFl0/zIN5lKDtFccU3YCnbPqjxg9rY72obNN65/GE4JOJsXciyX8XC4pIDr3lE6KeJ0le8IXf+A7d92ntQ==} + /effect@2.0.0-next.60: + resolution: {integrity: sha512-23KhlVACgrg5UPFu9i4szybSU4cCU4T/7CX4pe0jV84QBZX0zm96WzwCtg6dqOnmUzBL7hm6S+iiPW2Rab13Uw==} dev: true /electron-to-chromium@1.4.369: diff --git a/src/configuration/App-gen.ts b/src/configuration/App-gen.ts index c22013f27..c9f61f924 100644 --- a/src/configuration/App-gen.ts +++ b/src/configuration/App-gen.ts @@ -3,6 +3,6 @@ import * as HostPort from "./HostPort" // $ExpectType Effect export const program = Effect.gen(function* (_) { - const hostPort = yield* _(Effect.config(HostPort.config)) + const hostPort = yield* _(HostPort.config) console.log(`Application started: ${hostPort.url}`) }) diff --git a/src/configuration/App.ts b/src/configuration/App.ts index cea0aa1f1..3923908a2 100644 --- a/src/configuration/App.ts +++ b/src/configuration/App.ts @@ -2,7 +2,7 @@ import { Effect, Console } from "effect" import * as HostPort from "./HostPort" // $ExpectType Effect -export const program = Effect.config(HostPort.config).pipe( +export const program = HostPort.config.pipe( Effect.flatMap((hostPort) => Console.log(`Application started: ${hostPort.url}`) ) diff --git a/src/configuration/primitives-gen.ts b/src/configuration/primitives-gen.ts index 8eb789be9..1baf9743a 100644 --- a/src/configuration/primitives-gen.ts +++ b/src/configuration/primitives-gen.ts @@ -2,8 +2,8 @@ import { Effect, Config } from "effect" // $ExpectType Effect const program = Effect.gen(function* (_) { - const host = yield* _(Effect.config(Config.string("HOST"))) - const port = yield* _(Effect.config(Config.string("PORT"))) + const host = yield* _(Config.string("HOST")) + const port = yield* _(Config.string("PORT")) console.log(`Application started: ${host}:${port}`) }) diff --git a/src/configuration/primitives-pipe.ts b/src/configuration/primitives-pipe.ts index 7533d2ff9..a9740ef80 100644 --- a/src/configuration/primitives-pipe.ts +++ b/src/configuration/primitives-pipe.ts @@ -1,10 +1,7 @@ import { Effect, Config, Console } from "effect" // $ExpectType Effect -const program = Effect.all([ - Effect.config(Config.string("HOST")), - Effect.config(Config.number("PORT")) -]).pipe( +const program = Effect.all([Config.string("HOST"), Config.number("PORT")]).pipe( Effect.flatMap(([host, port]) => Console.log(`Application started: ${host}:${port}`) ) diff --git a/src/configuration/secret.ts b/src/configuration/secret.ts index f66c79361..f636abb05 100644 --- a/src/configuration/secret.ts +++ b/src/configuration/secret.ts @@ -1,6 +1,6 @@ import { Effect, Config, ConfigProvider, Layer, Console, Secret } from "effect" -const program = Effect.config(Config.secret("API_KEY")).pipe( +const program = Config.secret("API_KEY").pipe( Effect.tap((secret) => Console.log(`console.log: ${secret}`)), Effect.tap((secret) => Console.log(`Secret.value: ${Secret.value(secret)}`)) ) diff --git a/src/configuration/withDefault-gen.ts b/src/configuration/withDefault-gen.ts index 1632e84d7..8d6179a7d 100644 --- a/src/configuration/withDefault-gen.ts +++ b/src/configuration/withDefault-gen.ts @@ -1,10 +1,8 @@ import { Effect, Config } from "effect" const program = Effect.gen(function* (_) { - const host = yield* _(Effect.config(Config.string("HOST"))) - const port = yield* _( - Effect.config(Config.withDefault(Config.number("PORT"), 8080)) - ) + const host = yield* _(Config.string("HOST")) + const port = yield* _(Config.withDefault(Config.number("PORT"), 8080)) console.log(`Application started: ${host}:${port}`) }) diff --git a/src/configuration/withDefault-pipe.ts b/src/configuration/withDefault-pipe.ts index 20b5b4b1d..a3fc71207 100644 --- a/src/configuration/withDefault-pipe.ts +++ b/src/configuration/withDefault-pipe.ts @@ -1,8 +1,8 @@ import { Effect, Config, Console } from "effect" const program = Effect.all([ - Effect.config(Config.string("HOST")), - Effect.config(Config.withDefault(Config.number("PORT"), 8080)) + Config.string("HOST"), + Config.withDefault(Config.number("PORT"), 8080) ]).pipe( Effect.flatMap(([host, port]) => Console.log(`Application started: ${host}:${port}`) diff --git a/src/logging/load-log-level-from-configuration.ts b/src/logging/load-log-level-from-configuration.ts index b29c2e015..fac1a9a35 100644 --- a/src/logging/load-log-level-from-configuration.ts +++ b/src/logging/load-log-level-from-configuration.ts @@ -9,7 +9,7 @@ const program = Effect.gen(function* (_) { }) // Load the log level from the configuration as a layer -const LogLevelLive = Effect.config(Config.logLevel("LOG_LEVEL")).pipe( +const LogLevelLive = Config.logLevel("LOG_LEVEL").pipe( Effect.map((level) => Logger.minimumLogLevel(level)), Layer.unwrapEffect )