{"version":3,"file":"dev.mjs","names":[],"sources":["../../src/commands/dev.ts"],"sourcesContent":["import process from \"node:process\";\nimport { Context, Effect, References } from \"effect\";\nimport { MISSING_CONFIG_MESSAGE } from \"../config\";\nimport type { PhaseTiming } from \"../contract\";\nimport { type LogLevelEnv, resolveLogLevel, toEffectLogLevel } from \"../dev-log-pipeline\";\nimport { bootstrapLayers, devBootstrap, startBootstrap } from \"../dev-program\";\nimport { openResolution } from \"../resolution/session\";\nimport { type BosBuilder, BosDepsTag } from \"./shared\";\n\nexport function registerDev(builder: BosBuilder) {\n  return {\n    dev: builder.dev.handler(async ({ input, context }) => {\n      const deps = Context.get(context[\"effect/context\"], BosDepsTag);\n      const devTimings: PhaseTiming[] = [];\n\n      const outcome = await Effect.runPromise(\n        devBootstrap(deps, 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({ failed: \"No valid proxy URL configured in the authored config\" }),\n            DevPreflightFailed: (error) =>\n              Effect.succeed({ failed: `Infra preflight failed: ${error.messages.join(\"; \")}` }),\n          }),\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: builder.start.handler(async ({ input, context }) => {\n      const baseDeps = Context.get(context[\"effect/context\"], BosDepsTag);\n      let deps = baseDeps;\n      if (input.configPath) {\n        const override = await openResolution({ path: input.configPath });\n        if (!override) {\n          return {\n            status: \"error\" as const,\n            url: \"\",\n            error: `No config found at ${input.configPath}`,\n          };\n        }\n        deps = { ...baseDeps, session: override };\n      }\n\n      const outcome = await Effect.runPromise(\n        startBootstrap(deps, 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\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"],"mappings":";;;;;;;;;AASA,SAAgB,YAAY,SAAqB;CAC/C,OAAO;EACL,KAAK,QAAQ,IAAI,QAAQ,OAAO,EAAE,OAAO,cAAc;GACrD,MAAM,OAAO,QAAQ,IAAI,QAAQ,mBAAmB,UAAU;GAC9D,MAAM,aAA4B,CAAC;GAEnC,MAAM,UAAU,MAAM,OAAO,WAC3B,aAAa,MAAM,OAAO,UAAU,CAAC,CAAC,KACpC,OAAO,eACL,WAAW,iBACX,iBAAiB,gBAAgB,QAAQ,KAAoB,MAAM,QAAQ,CAAC,CAC9E,GACA,OAAO,QAAQ,eAAe,GAC9B,OAAO,UAAU;IACf,wBAAwB,OAAO,QAAQ,EAAE,QAAQ,uBAAuB,CAAC;IACzE,uBACE,OAAO,QAAQ,EAAE,QAAQ,uDAAuD,CAAC;IACnF,qBAAqB,UACnB,OAAO,QAAQ,EAAE,QAAQ,2BAA2B,MAAM,SAAS,KAAK,IAAI,IAAI,CAAC;GACrF,CAAC,CACH,CACF;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;EAED,OAAO,QAAQ,MAAM,QAAQ,OAAO,EAAE,OAAO,cAAc;GACzD,MAAM,WAAW,QAAQ,IAAI,QAAQ,mBAAmB,UAAU;GAClE,IAAI,OAAO;GACX,IAAI,MAAM,YAAY;IACpB,MAAM,WAAW,MAAM,eAAe,EAAE,MAAM,MAAM,WAAW,CAAC;IAChE,IAAI,CAAC,UACH,OAAO;KACL,QAAQ;KACR,KAAK;KACL,OAAO,sBAAsB,MAAM;IACrC;IAEF,OAAO;KAAE,GAAG;KAAU,SAAS;IAAS;GAC1C;GAEA,MAAM,UAAU,MAAM,OAAO,WAC3B,eAAe,MAAM,KAAK,CAAC,CAAC,KAC1B,OAAO,QAAQ,eAAe,GAC9B,OAAO,UAAU;IACf,2BAA2B,UAAU,OAAO,QAAQ,EAAE,QAAQ,MAAM,QAAQ,CAAC;IAC7E,mBAAmB,UAAU,OAAO,QAAQ,EAAE,QAAQ,MAAM,QAAQ,CAAC;IACrE,0BACE,OAAO,QAAQ,EACb,QACE,oIACJ,CAAC;IACH,aAAa,UAAU,OAAO,QAAQ,EAAE,QAAQ,GAAG,MAAM,MAAM,IAAI,MAAM,UAAU,CAAC;IACpF,eAAe,UACb,OAAO,QAAQ,EACb,QAAQ,GAAG,MAAM,MAAM,WACrB,MAAM,iBAAiB,QAAQ,MAAM,MAAM,UAAU,OAAO,MAAM,KAAK,IAE3E,CAAC;GACL,CAAC,CACH,CACF;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;CACH;AACF"}