{"version":3,"file":"main.mjs","names":["bosPlugin"],"sources":["../../src/cli/main.ts"],"sourcesContent":["import { dirname } from \"node:path\";\nimport process from \"node:process\";\nimport { Data, Effect, Exit } from \"effect\";\nimport { findConfigPath } from \"../config\";\nimport { secretsRenderers } from \"../handlers/secrets\";\nimport bosPlugin from \"../plugin\";\nimport { createPluginRuntime } from \"../sdk\";\nimport { installBundleFetchFromEnv } from \"../services/resolution/resolver\";\nimport { printBanner } from \"../utils/banner\";\nimport { formatUnknownError } from \"../utils/errors\";\nimport { findCommandDescriptor } from \"./catalog\";\nimport type { CommandContext } from \"./commands/context\";\nimport { dbRenderers } from \"./commands/db\";\nimport { runDev, runStart } from \"./commands/dev\";\nimport { runInit } from \"./commands/init\";\nimport { inspectRenderers } from \"./commands/inspect\";\nimport { lifecycleRenderers } from \"./commands/lifecycle\";\nimport { publishRenderers, rollbackPreCall } from \"./commands/publish\";\nimport { scaffoldRenderers } from \"./commands/scaffold\";\nimport { resolveFrameworkPackage } from \"./framework-version\";\nimport { printCommandHelp, printHelp } from \"./help\";\nimport { parseCommandInput } from \"./parse\";\nimport { warnIfOutdated } from \"./status\";\n\nexport class CliError extends Data.TaggedError(\"CliError\")<{ message: string }> {}\n\nconst customRunners: Record<string, (ctx: CommandContext) => Promise<void>> = {\n  dev: runDev,\n  start: runStart,\n  init: runInit,\n};\n\nconst preCalls: Record<string, (ctx: CommandContext) => Promise<void>> = {\n  rollback: rollbackPreCall,\n};\n\nconst renderers = {\n  ...dbRenderers,\n  ...inspectRenderers,\n  ...lifecycleRenderers,\n  ...publishRenderers,\n  ...scaffoldRenderers,\n  ...secretsRenderers,\n};\n\nconst cliProgram: Effect.Effect<void, CliError> = Effect.tryPromise({\n  try: async (): Promise<void> => {\n    const args = process.argv.slice(2);\n\n    const helpIndex = args.indexOf(\"--help\") !== -1 ? args.indexOf(\"--help\") : args.indexOf(\"-h\");\n    if (helpIndex !== -1) {\n      const helpTarget = findCommandDescriptor(args.slice(0, helpIndex));\n      if (helpTarget) {\n        printCommandHelp(helpTarget.descriptor);\n        return;\n      }\n      printHelp();\n      return;\n    }\n\n    const invocationArgs = args.length > 0 ? args : [\"dev\"];\n    const command = invocationArgs[0] ?? \"dev\";\n\n    const commandMatch = findCommandDescriptor(invocationArgs);\n    if (!commandMatch) {\n      console.error(`Unknown command: ${command}`);\n      process.exit(1);\n    }\n\n    const { descriptor, consumed } = commandMatch;\n    const commandArgs = invocationArgs.slice(consumed);\n\n    // Parse before the plugin boot: `start --config-path` steers the whole CLI,\n    // not just the stack — the plugin initialize resolves and pin-validates the\n    // boot config, so it must be the config the command will actually run.\n    let parsedInput: unknown;\n    try {\n      parsedInput = parseCommandInput(descriptor, commandArgs);\n    } catch (error) {\n      throw new CliError({ message: formatUnknownError(error) });\n    }\n    const bootInput = parsedInput as { configPath?: string };\n\n    const cwdConfigPath = findConfigPath();\n    const configPath = bootInput.configPath ?? cwdConfigPath;\n    installBundleFetchFromEnv({ configPath });\n\n    const projectDir = cwdConfigPath ? dirname(cwdConfigPath) : undefined;\n    const edResolved = projectDir\n      ? resolveFrameworkPackage(projectDir, \"everything-dev\")\n      : undefined;\n    const displayVersion = edResolved?.installedVersion\n      ? `${edResolved.installedVersion}${edResolved.isLinked ? \" (linked)\" : \"\"}`\n      : undefined;\n    if (!process.env.BOS_NO_BANNER) {\n      printBanner(\"everything-dev\", displayVersion);\n    }\n\n    const runtime = createPluginRuntime({\n      registry: {\n        bos: { module: bosPlugin },\n      },\n      secrets: {},\n    });\n\n    const pluginRuntime: any = runtime;\n    const loadPlugin = pluginRuntime.usePlugin.bind(pluginRuntime);\n    const plugin = await loadPlugin(\"bos\", {\n      variables: {\n        configPath: configPath ?? undefined,\n        configDir: cwdConfigPath ? dirname(cwdConfigPath) : undefined,\n      },\n      secrets: {},\n    });\n\n    const client = plugin.createClient();\n\n    const outdatedWarning = warnIfOutdated(client, command);\n\n    try {\n      const input = parsedInput;\n      const ctx: CommandContext = {\n        client,\n        input,\n        descriptor,\n        projectDir,\n        configPath,\n        outdatedWarning,\n      };\n\n      await preCalls[descriptor.key]?.(ctx);\n\n      const custom = customRunners[descriptor.key];\n      if (custom) {\n        await custom(ctx);\n        return;\n      }\n\n      const result = await client[descriptor.key](input);\n\n      if (\n        result?.status === \"error\" &&\n        descriptor.key !== \"publish\" &&\n        descriptor.key !== \"deploy\"\n      ) {\n        console.error(`[CLI] ${formatUnknownError(result.error)}`);\n        process.exit(1);\n      }\n\n      await renderers[descriptor.key]?.(result, ctx);\n    } catch (error) {\n      throw new CliError({ message: formatUnknownError(error) });\n    }\n  },\n  catch: (error) => new CliError({ message: formatUnknownError(error) }),\n});\n\nexport const runCli = async (): Promise<void> => {\n  const exit = await Effect.runPromiseExit(cliProgram);\n  if (Exit.isFailure(exit)) {\n    const reasons = exit.cause.reasons ?? [];\n    for (const reason of reasons) {\n      if (reason?._tag !== \"Fail\") continue;\n      const failure = (reason as { error?: unknown }).error;\n      console.error(`[CLI] ${formatUnknownError(failure)}`);\n    }\n    process.exit(1);\n  }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAa,WAAb,cAA8B,KAAK,YAAY,UAAU,CAAC,CAAsB,CAAC;AAEjF,MAAM,gBAAwE;CAC5E,KAAK;CACL,OAAO;CACP,MAAM;AACR;AAEA,MAAM,WAAmE,EACvE,UAAU,gBACZ;AAEA,MAAM,YAAY;CAChB,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;AACL;AAEA,MAAM,aAA4C,OAAO,WAAW;CAClE,KAAK,YAA2B;EAC9B,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;EAEjC,MAAM,YAAY,KAAK,QAAQ,QAAQ,MAAM,KAAK,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,IAAI;EAC5F,IAAI,cAAc,IAAI;GACpB,MAAM,aAAa,sBAAsB,KAAK,MAAM,GAAG,SAAS,CAAC;GACjE,IAAI,YAAY;IACd,iBAAiB,WAAW,UAAU;IACtC;GACF;GACA,UAAU;GACV;EACF;EAEA,MAAM,iBAAiB,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK;EACtD,MAAM,UAAU,eAAe,MAAM;EAErC,MAAM,eAAe,sBAAsB,cAAc;EACzD,IAAI,CAAC,cAAc;GACjB,QAAQ,MAAM,oBAAoB,SAAS;GAC3C,QAAQ,KAAK,CAAC;EAChB;EAEA,MAAM,EAAE,YAAY,aAAa;EACjC,MAAM,cAAc,eAAe,MAAM,QAAQ;EAKjD,IAAI;EACJ,IAAI;GACF,cAAc,kBAAkB,YAAY,WAAW;EACzD,SAAS,OAAO;GACd,MAAM,IAAI,SAAS,EAAE,SAAS,mBAAmB,KAAK,EAAE,CAAC;EAC3D;EACA,MAAM,YAAY;EAElB,MAAM,gBAAgB,eAAe;EACrC,MAAM,aAAa,UAAU,cAAc;EAC3C,0BAA0B,EAAE,WAAW,CAAC;EAExC,MAAM,aAAa,gBAAgB,QAAQ,aAAa,IAAI;EAC5D,MAAM,aAAa,aACf,wBAAwB,YAAY,gBAAgB,IACpD;EACJ,MAAM,iBAAiB,YAAY,mBAC/B,GAAG,WAAW,mBAAmB,WAAW,WAAW,cAAc,OACrE;EACJ,IAAI,CAAC,QAAQ,IAAI,eACf,YAAY,kBAAkB,cAAc;EAU9C,MAAM,gBAPU,oBAAoB;GAClC,UAAU,EACR,KAAK,EAAE,QAAQA,eAAU,EAC3B;GACA,SAAS,CAAC;EACZ,CAEiC;EAUjC,MAAM,UAAS,MATI,cAAc,UAAU,KAAK,aAClB,CAAC,CAAC,OAAO;GACrC,WAAW;IACT,YAAY,cAAc;IAC1B,WAAW,gBAAgB,QAAQ,aAAa,IAAI;GACtD;GACA,SAAS,CAAC;EACZ,CAAC,EAEoB,CAAC,aAAa;EAEnC,MAAM,kBAAkB,eAAe,QAAQ,OAAO;EAEtD,IAAI;GACF,MAAM,QAAQ;GACd,MAAM,MAAsB;IAC1B;IACA;IACA;IACA;IACA;IACA;GACF;GAEA,MAAM,SAAS,WAAW,IAAI,GAAG,GAAG;GAEpC,MAAM,SAAS,cAAc,WAAW;GACxC,IAAI,QAAQ;IACV,MAAM,OAAO,GAAG;IAChB;GACF;GAEA,MAAM,SAAS,MAAM,OAAO,WAAW,IAAI,CAAC,KAAK;GAEjD,IACE,QAAQ,WAAW,WACnB,WAAW,QAAQ,aACnB,WAAW,QAAQ,UACnB;IACA,QAAQ,MAAM,SAAS,mBAAmB,OAAO,KAAK,GAAG;IACzD,QAAQ,KAAK,CAAC;GAChB;GAEA,MAAM,UAAU,WAAW,IAAI,GAAG,QAAQ,GAAG;EAC/C,SAAS,OAAO;GACd,MAAM,IAAI,SAAS,EAAE,SAAS,mBAAmB,KAAK,EAAE,CAAC;EAC3D;CACF;CACA,QAAQ,UAAU,IAAI,SAAS,EAAE,SAAS,mBAAmB,KAAK,EAAE,CAAC;AACvE,CAAC;AAED,MAAa,SAAS,YAA2B;CAC/C,MAAM,OAAO,MAAM,OAAO,eAAe,UAAU;CACnD,IAAI,KAAK,UAAU,IAAI,GAAG;EACxB,MAAM,UAAU,KAAK,MAAM,WAAW,CAAC;EACvC,KAAK,MAAM,UAAU,SAAS;GAC5B,IAAI,QAAQ,SAAS,QAAQ;GAC7B,MAAM,UAAW,OAA+B;GAChD,QAAQ,MAAM,SAAS,mBAAmB,OAAO,GAAG;EACtD;EACA,QAAQ,KAAK,CAAC;CAChB;AACF"}