mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-24 01:33:34 +00:00
23 lines
896 B
TypeScript
23 lines
896 B
TypeScript
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>()("@opencode/stats/AppConfig") {
|
|
static readonly config = config
|
|
static readonly layer: Layer.Layer<AppConfig, never, never> = Layer.effect(
|
|
AppConfig,
|
|
config.parse(ConfigProvider.fromEnv()).pipe(Effect.orDie),
|
|
)
|
|
}
|