UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

71 lines (69 loc) • 3.14 kB
import { MISSING_CONFIG_MESSAGE } from "../resolution/load.mjs"; import { openResolution } from "../resolution/session.mjs"; import { ProjectEnvLive } from "../../env/project-env.mjs"; import { PortAllocatorLive } from "../../infra/ports.mjs"; import { resolveLogLevel, toEffectLogLevel } from "./logs.mjs"; import { devBootstrap } from "./boot.mjs"; import { startBootstrap } from "../start/boot.mjs"; import { Context, Effect, Layer, References } from "effect"; import process from "node:process"; //#region src/services/dev/flow.ts const bootstrapLayers = Layer.mergeAll(ProjectEnvLive, PortAllocatorLive); var DevFlowService = class DevFlowService extends Context.Service()("bos/DevFlowService") { static Live = Layer.succeed(DevFlowService, DevFlowService.of({ dev: (session, input) => Effect.gen(function* () { const devTimings = []; const outcome = yield* devBootstrap({ session }, input, devTimings).pipe(Effect.provideService(References.MinimumLogLevel, toEffectLogLevel(resolveLogLevel(process.env, input.logLevel))), Effect.provide(bootstrapLayers), Effect.catchTags({ DevConfigMissing: () => Effect.succeed({ failed: MISSING_CONFIG_MESSAGE }), DevProxyMissing: () => Effect.succeed({ failed: "No valid proxy URL configured in the authored config" }), DevPreflightFailed: (error) => Effect.succeed({ failed: `Infra preflight failed: ${error.messages.join("; ")}` }) })); if ("failed" in outcome) return { status: "error", description: outcome.failed, processes: [], timings: devTimings }; return { status: "started", description: outcome.description, processes: outcome.processes, timings: devTimings, session: outcome.session }; }), start: (session, input) => Effect.gen(function* () { let activeSession = session; if (input.configPath) { const override = yield* Effect.promise(() => openResolution({ path: input.configPath })); if (!override) return { status: "error", url: "", error: `No config found at ${input.configPath}` }; activeSession = override; } const outcome = yield* startBootstrap({ session: activeSession }, input).pipe(Effect.provide(bootstrapLayers), Effect.catchTags({ StartRemoteConfigMissing: (error) => Effect.succeed({ failed: error.message }), StartFetchFailed: (error) => Effect.succeed({ failed: error.message }), StartConfigMissing: () => Effect.succeed({ failed: "No configuration found. Provide --account and --gateway flags, or create a local authored config (bos.app.ts or bos.config.json)." }), InfraError: (error) => Effect.succeed({ failed: `${error.phase}: ${error.message}` }), DevStepError: (error) => Effect.succeed({ failed: `${error.phase} failed: ${error.cause instanceof Error ? error.cause.message : String(error.cause)}` }) })); if ("failed" in outcome) return { status: "error", url: "", error: outcome.failed }; return { status: "running", url: outcome.url, session: outcome.session, summary: outcome.summary }; }) })); }; //#endregion export { DevFlowService }; //# sourceMappingURL=flow.mjs.map