diff --git a/src/Context.ts b/src/Context.ts new file mode 100644 index 000000000..7ef365223 --- /dev/null +++ b/src/Context.ts @@ -0,0 +1,13 @@ +import { Context } from 'effect' +import type { Express as ExpressServer } from 'express' +import type { Redis as IoRedis } from 'ioredis' +import type { LoggerEnv } from 'logger-fp-ts' +import type { EnvVars } from './env.js' + +export class DeprecatedEnvVars extends Context.Tag('DeprecatedEnvVars')() {} + +export class DeprecatedLoggerEnv extends Context.Tag('DeprecatedLoggerEnv')() {} + +export class Express extends Context.Tag('Express')() {} + +export class Redis extends Context.Tag('Redis')() {} diff --git a/src/ExpressServer.ts b/src/ExpressServer.ts index cf975feed..799309566 100644 --- a/src/ExpressServer.ts +++ b/src/ExpressServer.ts @@ -1,19 +1,17 @@ import KeyvRedis from '@keyv/redis' import { SystemClock } from 'clock-ts' -import { Context, Effect } from 'effect' +import { Effect } from 'effect' import * as C from 'fp-ts/lib/Console.js' import { pipe } from 'fp-ts/lib/function.js' -import type { Redis as IoRedis } from 'ioredis' import Keyv from 'keyv' import * as L from 'logger-fp-ts' import fetch from 'make-fetch-happen' import nodemailer from 'nodemailer' import { P, match } from 'ts-pattern' import { app } from './app.js' +import { Redis } from './Context.js' import { decodeEnv } from './env.js' -export class Redis extends Context.Tag('Redis')() {} - export const expressServer = Effect.gen(function* () { const redis = yield* Redis diff --git a/src/Redis.ts b/src/Redis.ts index a6d7e227e..95a77be77 100644 --- a/src/Redis.ts +++ b/src/Redis.ts @@ -1,10 +1,8 @@ -import { Context, Effect } from 'effect' +import { Effect } from 'effect' import { toError } from 'fp-ts/lib/Either.js' import { Redis as IoRedis } from 'ioredis' import * as L from 'logger-fp-ts' -import { DeprecatedEnvVars } from './env.js' - -export class DeprecatedLoggerEnv extends Context.Tag('DeprecatedLoggerEnv')() {} +import { DeprecatedEnvVars, DeprecatedLoggerEnv } from './Context.js' const makeRedis = Effect.gen(function* () { const env = yield* DeprecatedEnvVars diff --git a/src/env.ts b/src/env.ts index 87e11be9c..147f75d90 100644 --- a/src/env.ts +++ b/src/env.ts @@ -1,4 +1,3 @@ -import { Context } from 'effect' import * as C from 'fp-ts/lib/Console.js' import * as E from 'fp-ts/lib/Either.js' import * as IOE from 'fp-ts/lib/IOEither.js' @@ -9,7 +8,7 @@ import { isOrcid } from 'orcid-id-ts' import { v4 } from 'uuid-ts' import { type NonEmptyString, NonEmptyStringC } from './types/string.js' -export class DeprecatedEnvVars extends Context.Tag('DeprecatedEnvVars')>() {} +export type EnvVars = D.TypeOf export function decodeEnv(process: NodeJS.Process) { return pipe( diff --git a/src/index.ts b/src/index.ts index 425fdd580..bd5e1c7fa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,16 +2,16 @@ import { NodeRuntime } from '@effect/platform-node' import cacache from 'cacache' import { SystemClock } from 'clock-ts' import * as dns from 'dns' -import { Context, Effect, Layer } from 'effect' +import { Effect, Layer } from 'effect' import * as C from 'fp-ts/lib/Console.js' import * as E from 'fp-ts/lib/Either.js' import { pipe } from 'fp-ts/lib/function.js' import type { JsonRecord } from 'fp-ts/lib/Json.js' import * as L from 'logger-fp-ts' -import type { app } from './app.js' -import { decodeEnv, DeprecatedEnvVars } from './env.js' -import { expressServer, Redis } from './ExpressServer.js' -import { DeprecatedLoggerEnv, redisLifecycle } from './Redis.js' +import { DeprecatedEnvVars, DeprecatedLoggerEnv, Express, Redis } from './Context.js' +import { decodeEnv } from './env.js' +import { expressServer } from './ExpressServer.js' +import { redisLifecycle } from './Redis.js' const env = decodeEnv(process)() @@ -32,8 +32,6 @@ if (env.VERIFY_CACHE) { .catch((error: unknown) => L.errorP('Failed to verify cache')({ error: E.toError(error).message })(loggerEnv)()) } -class Express extends Context.Tag('Express')>() {} - const expressServerLifecycle = Effect.acquireRelease( Effect.gen(function* () { const app = yield* Express