{"version":3,"file":"flow.cjs","names":["Layer","ProjectEnvLive","PortAllocatorLive","Context","Effect","devBootstrap","References","toEffectLogLevel","resolveLogLevel","process","MISSING_CONFIG_MESSAGE","openResolution","startBootstrap"],"sources":["../../../src/services/dev/flow.ts"],"sourcesContent":["import process from \"node:process\";\nimport { Context, Effect, Layer, References } from \"effect\";\nimport { MISSING_CONFIG_MESSAGE } from \"../../config\";\nimport type { DevOptions, DevResult, PhaseTiming, StartOptions, StartResult } from \"../../contract\";\nimport { ProjectEnvLive } from \"../../env/project-env\";\nimport { PortAllocatorLive } from \"../../infra/ports\";\nimport { openResolution, type ResolutionSession } from \"../resolution/session\";\nimport { startBootstrap } from \"../start/boot\";\nimport { devBootstrap } from \"./boot\";\nimport { type LogLevelEnv, resolveLogLevel, toEffectLogLevel } from \"./logs\";\n\nconst bootstrapLayers = Layer.mergeAll(ProjectEnvLive, PortAllocatorLive);\n\nexport class DevFlowService extends Context.Service<\n  DevFlowService,\n  {\n    dev: (\n      session: ResolutionSession | null,\n      input: DevOptions,\n    ) => Effect.Effect<DevResult, unknown>;\n    start: (\n      session: ResolutionSession | null,\n      input: StartOptions,\n    ) => Effect.Effect<StartResult, unknown>;\n  }\n>()(\"bos/DevFlowService\") {\n  static Live = Layer.succeed(\n    DevFlowService,\n    DevFlowService.of({\n      dev: (session, input) =>\n        Effect.gen(function* () {\n          const devTimings: PhaseTiming[] = [];\n\n          const outcome = yield* devBootstrap({ session }, input, devTimings).pipe(\n            Effect.provideService(\n              References.MinimumLogLevel,\n              toEffectLogLevel(resolveLogLevel(process.env as LogLevelEnv, input.logLevel)),\n            ),\n            Effect.provide(bootstrapLayers),\n            Effect.catchTags({\n              DevConfigMissing: () => Effect.succeed({ failed: MISSING_CONFIG_MESSAGE }),\n              DevProxyMissing: () =>\n                Effect.succeed({\n                  failed: \"No valid proxy URL configured in the authored config\",\n                }),\n              DevPreflightFailed: (error) =>\n                Effect.succeed({ failed: `Infra preflight failed: ${error.messages.join(\"; \")}` }),\n            }),\n          );\n\n          if (\"failed\" in outcome) {\n            return {\n              status: \"error\" as const,\n              description: outcome.failed,\n              processes: [],\n              timings: devTimings,\n            };\n          }\n\n          return {\n            status: \"started\" as const,\n            description: outcome.description,\n            processes: outcome.processes,\n            timings: devTimings,\n            session: outcome.session,\n          };\n        }),\n\n      start: (session, input) =>\n        Effect.gen(function* () {\n          let activeSession = session;\n          if (input.configPath) {\n            const override = yield* Effect.promise(() =>\n              openResolution({ path: input.configPath }),\n            );\n            if (!override) {\n              return {\n                status: \"error\" as const,\n                url: \"\",\n                error: `No config found at ${input.configPath}`,\n              };\n            }\n            activeSession = override;\n          }\n\n          const outcome = yield* startBootstrap({ session: activeSession }, input).pipe(\n            Effect.provide(bootstrapLayers),\n            Effect.catchTags({\n              StartRemoteConfigMissing: (error) => Effect.succeed({ failed: error.message }),\n              StartFetchFailed: (error) => Effect.succeed({ failed: error.message }),\n              StartConfigMissing: () =>\n                Effect.succeed({\n                  failed:\n                    \"No configuration found. Provide --account and --gateway flags, or create a local authored config (bos.app.ts or bos.config.json).\",\n                }),\n              InfraError: (error) => Effect.succeed({ failed: `${error.phase}: ${error.message}` }),\n              DevStepError: (error) =>\n                Effect.succeed({\n                  failed: `${error.phase} failed: ${\n                    error.cause instanceof Error ? error.cause.message : String(error.cause)\n                  }`,\n                }),\n            }),\n          );\n\n          if (\"failed\" in outcome) {\n            return {\n              status: \"error\" as const,\n              url: \"\",\n              error: outcome.failed,\n            };\n          }\n\n          return {\n            status: \"running\" as const,\n            url: outcome.url,\n            session: outcome.session,\n            summary: outcome.summary,\n          };\n        }),\n    }),\n  );\n}\n"],"mappings":";;;;;;;;;;;;;AAWA,MAAM,kBAAkBA,aAAM,SAASC,oCAAgBC,+BAAiB;AAExE,IAAa,iBAAb,MAAa,uBAAuBC,eAAQ,QAY1C,CAAC,CAAC,oBAAoB,CAAC,CAAC;CACxB,OAAO,OAAOH,aAAM,QAClB,gBACA,eAAe,GAAG;EAChB,MAAM,SAAS,UACbI,cAAO,IAAI,aAAa;GACtB,MAAM,aAA4B,CAAC;GAEnC,MAAM,UAAU,OAAOC,0BAAa,EAAE,QAAQ,GAAG,OAAO,UAAU,CAAC,CAAC,KAClED,cAAO,eACLE,kBAAW,iBACXC,8BAAiBC,6BAAgBC,qBAAQ,KAAoB,MAAM,QAAQ,CAAC,CAC9E,GACAL,cAAO,QAAQ,eAAe,GAC9BA,cAAO,UAAU;IACf,wBAAwBA,cAAO,QAAQ,EAAE,QAAQM,oCAAuB,CAAC;IACzE,uBACEN,cAAO,QAAQ,EACb,QAAQ,uDACV,CAAC;IACH,qBAAqB,UACnBA,cAAO,QAAQ,EAAE,QAAQ,2BAA2B,MAAM,SAAS,KAAK,IAAI,IAAI,CAAC;GACrF,CAAC,CACH;GAEA,IAAI,YAAY,SACd,OAAO;IACL,QAAQ;IACR,aAAa,QAAQ;IACrB,WAAW,CAAC;IACZ,SAAS;GACX;GAGF,OAAO;IACL,QAAQ;IACR,aAAa,QAAQ;IACrB,WAAW,QAAQ;IACnB,SAAS;IACT,SAAS,QAAQ;GACnB;EACF,CAAC;EAEH,QAAQ,SAAS,UACfA,cAAO,IAAI,aAAa;GACtB,IAAI,gBAAgB;GACpB,IAAI,MAAM,YAAY;IACpB,MAAM,WAAW,OAAOA,cAAO,cAC7BO,mDAAe,EAAE,MAAM,MAAM,WAAW,CAAC,CAC3C;IACA,IAAI,CAAC,UACH,OAAO;KACL,QAAQ;KACR,KAAK;KACL,OAAO,sBAAsB,MAAM;IACrC;IAEF,gBAAgB;GAClB;GAEA,MAAM,UAAU,OAAOC,8BAAe,EAAE,SAAS,cAAc,GAAG,KAAK,CAAC,CAAC,KACvER,cAAO,QAAQ,eAAe,GAC9BA,cAAO,UAAU;IACf,2BAA2B,UAAUA,cAAO,QAAQ,EAAE,QAAQ,MAAM,QAAQ,CAAC;IAC7E,mBAAmB,UAAUA,cAAO,QAAQ,EAAE,QAAQ,MAAM,QAAQ,CAAC;IACrE,0BACEA,cAAO,QAAQ,EACb,QACE,oIACJ,CAAC;IACH,aAAa,UAAUA,cAAO,QAAQ,EAAE,QAAQ,GAAG,MAAM,MAAM,IAAI,MAAM,UAAU,CAAC;IACpF,eAAe,UACbA,cAAO,QAAQ,EACb,QAAQ,GAAG,MAAM,MAAM,WACrB,MAAM,iBAAiB,QAAQ,MAAM,MAAM,UAAU,OAAO,MAAM,KAAK,IAE3E,CAAC;GACL,CAAC,CACH;GAEA,IAAI,YAAY,SACd,OAAO;IACL,QAAQ;IACR,KAAK;IACL,OAAO,QAAQ;GACjB;GAGF,OAAO;IACL,QAAQ;IACR,KAAK,QAAQ;IACb,SAAS,QAAQ;IACjB,SAAS,QAAQ;GACnB;EACF,CAAC;CACL,CAAC,CACH;AACF"}