| 1234567891011121314151617181920212223 |
- import { Config, ConfigProvider, Effect, Layer, Schema } from "effect"
- import * as Context from "effect/Context"
- import { Resource } from "sst/resource"
- export class AppConfigValue extends Schema.Class<AppConfigValue>("AppConfigValue")({
- stage: Schema.NonEmptyString,
- publicUrl: Schema.NonEmptyString,
- }) {}
- const decodeAppConfigValue = Schema.decodeUnknownSync(AppConfigValue)
- const config = Config.all({
- stage: Config.succeed(Resource.App.stage),
- publicUrl: Config.string("PUBLIC_URL").pipe(Config.withDefault("http://localhost:3000")),
- }).pipe(Config.map(decodeAppConfigValue))
- export class AppConfig extends Context.Service<AppConfig, AppConfigValue>()("@kirincode/stats/AppConfig") {
- static readonly config = config
- static readonly layer: Layer.Layer<AppConfig, never, never> = Layer.effect(
- AppConfig,
- config.parse(ConfigProvider.fromEnv()).pipe(Effect.orDie),
- )
- }
|