{"version":3,"file":"code-artifacts.cjs","names":["Schema","CORE_UI_PLUGIN_KEY","existsSync","join","Effect","writeResolvedConfig","openResolution","syncApiContractBridge","emitCoreUiStubs","generateUiManifest"],"sources":["../src/code-artifacts.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Effect, Schema } from \"effect\";\nimport { emitCoreUiStubs } from \"every-plugin/build/ui\";\nimport { CORE_UI_PLUGIN_KEY } from \"every-plugin/ui/manifest\";\nimport { generateUiManifest } from \"every-plugin/ui/manifest-generator\";\nimport { type ContractBridgeStatus, syncApiContractBridge } from \"./api-contract\";\nimport { writeResolvedConfig } from \"./config\";\nimport type { BosEnv } from \"./merge\";\nimport { openResolution } from \"./resolution/session\";\nimport type { BosConfig, RuntimeConfig } from \"./types\";\n\nexport class ArtifactGenError extends Schema.TaggedError<ArtifactGenError>()(\"ArtifactGenError\", {\n  phase: Schema.String,\n  cause: Schema.optional(Schema.Unknown),\n}) {}\n\ninterface GeneratedArtifacts {\n  resolvedConfigPath?: string;\n  contractBridgePath: string;\n}\n\ninterface UiManifestTarget {\n  workspaceRoot: string;\n  pluginName: string;\n  emitRouteTree: boolean;\n}\n\nfunction uiManifestTargets(runtimeConfig: RuntimeConfig): UiManifestTarget[] {\n  const targets: UiManifestTarget[] = [];\n  const ui = runtimeConfig.ui;\n  // The core ui is always a manifest target when local — with no authored\n  // rsbuild.config.ts the every-plugin build synthesizes one, so the\n  // config's existence no longer gates manifest generation.\n  if (ui?.source === \"local\" && ui.localPath) {\n    targets.push({\n      workspaceRoot: ui.localPath,\n      pluginName: CORE_UI_PLUGIN_KEY,\n      emitRouteTree: !existsSync(join(ui.localPath, \"src/routeTree.gen.ts\")),\n    });\n  }\n  for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) {\n    const uiPath = plugin.ui?.localPath;\n    if (plugin.ui?.source === \"local\" && uiPath && existsSync(join(uiPath, \"rsbuild.config.ts\"))) {\n      targets.push({ workspaceRoot: uiPath, pluginName: key, emitRouteTree: false });\n    }\n  }\n  return targets;\n}\n\nexport const generateCodeArtifactsEffect = Effect.fn(\"generateCodeArtifacts\")(function* (\n  configDir: string,\n  config: BosConfig,\n  opts?: {\n    env?: BosEnv;\n    extendsChain?: string[];\n    runtimeConfig?: RuntimeConfig;\n  },\n): Effect.fn.Return<\n  (GeneratedArtifacts & { contractStatus: ContractBridgeStatus[] }) | null,\n  ArtifactGenError\n> {\n  const env = opts?.env;\n  if (env) {\n    yield* Effect.try({\n      try: () => writeResolvedConfig(configDir, config, env, opts?.extendsChain),\n      catch: (cause) => new ArtifactGenError({ phase: \"write resolved config\", cause }),\n    });\n  }\n\n  const runtimeConfig =\n    opts?.runtimeConfig ??\n    (yield* Effect.tryPromise({\n      try: () => openResolution({ cwd: configDir }),\n      catch: (cause) => new ArtifactGenError({ phase: \"load resolved config\", cause }),\n    }))?.runtime;\n  if (!runtimeConfig) return null;\n\n  const bridge = yield* Effect.tryPromise({\n    try: () =>\n      syncApiContractBridge({\n        configDir,\n        runtimeConfig,\n        apiBaseUrl: runtimeConfig.api.url,\n      }),\n    catch: (cause) => new ArtifactGenError({ phase: \"sync api contract bridge\", cause }),\n  });\n\n  for (const target of uiManifestTargets(runtimeConfig)) {\n    if (target.pluginName === CORE_UI_PLUGIN_KEY) {\n      yield* Effect.try({\n        try: () => emitCoreUiStubs(target.workspaceRoot),\n        catch: (cause) =>\n          new ArtifactGenError({ phase: `emit ui stubs (${target.pluginName})`, cause }),\n      });\n    }\n    yield* Effect.tryPromise({\n      try: () => generateUiManifest(target),\n      catch: (cause) =>\n        new ArtifactGenError({ phase: `generate ui manifest (${target.pluginName})`, cause }),\n    });\n  }\n\n  return {\n    resolvedConfigPath: env ? join(configDir, \".bos/bos.resolved-config.json\") : undefined,\n    contractBridgePath: bridge.bridgePath,\n    contractStatus: bridge.status,\n  };\n});\n\nexport async function generateCodeArtifacts(\n  configDir: string,\n  config: BosConfig,\n  opts?: {\n    env?: BosEnv;\n    extendsChain?: string[];\n    runtimeConfig?: RuntimeConfig;\n  },\n): Promise<(GeneratedArtifacts & { contractStatus: ContractBridgeStatus[] }) | null> {\n  return Effect.runPromise(generateCodeArtifactsEffect(configDir, config, opts));\n}\n"],"mappings":";;;;;;;;;;;AAYA,IAAa,mBAAb,cAAsCA,cAAO,YAA8B,CAAC,CAAC,oBAAoB;CAC/F,OAAOA,cAAO;CACd,OAAOA,cAAO,SAASA,cAAO,OAAO;AACvC,CAAC,CAAC,CAAC,CAAC;AAaJ,SAAS,kBAAkB,eAAkD;CAC3E,MAAM,UAA8B,CAAC;CACrC,MAAM,KAAK,cAAc;CAIzB,IAAI,IAAI,WAAW,WAAW,GAAG,WAC/B,QAAQ,KAAK;EACX,eAAe,GAAG;EAClB,YAAYC;EACZ,eAAe,KAACC,wBAAWC,gBAAK,GAAG,WAAW,sBAAsB,CAAC;CACvE,CAAC;CAEH,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,cAAc,WAAW,CAAC,CAAC,GAAG;EACvE,MAAM,SAAS,OAAO,IAAI;EAC1B,IAAI,OAAO,IAAI,WAAW,WAAW,cAAUD,wBAAWC,gBAAK,QAAQ,mBAAmB,CAAC,GACzF,QAAQ,KAAK;GAAE,eAAe;GAAQ,YAAY;GAAK,eAAe;EAAM,CAAC;CAEjF;CACA,OAAO;AACT;AAEA,MAAa,8BAA8BC,cAAO,GAAG,uBAAuB,CAAC,CAAC,WAC5E,WACA,QACA,MAQA;CACA,MAAM,MAAM,MAAM;CAClB,IAAI,KACF,OAAOA,cAAO,IAAI;EAChB,WAAWC,mCAAoB,WAAW,QAAQ,KAAK,MAAM,YAAY;EACzE,QAAQ,UAAU,IAAI,iBAAiB;GAAE,OAAO;GAAyB;EAAM,CAAC;CAClF,CAAC;CAGH,MAAM,gBACJ,MAAM,kBACL,OAAOD,cAAO,WAAW;EACxB,WAAWE,0CAAe,EAAE,KAAK,UAAU,CAAC;EAC5C,QAAQ,UAAU,IAAI,iBAAiB;GAAE,OAAO;GAAwB;EAAM,CAAC;CACjF,CAAC,EAAC,EAAG;CACP,IAAI,CAAC,eAAe,OAAO;CAE3B,MAAM,SAAS,OAAOF,cAAO,WAAW;EACtC,WACEG,2CAAsB;GACpB;GACA;GACA,YAAY,cAAc,IAAI;EAChC,CAAC;EACH,QAAQ,UAAU,IAAI,iBAAiB;GAAE,OAAO;GAA4B;EAAM,CAAC;CACrF,CAAC;CAED,KAAK,MAAM,UAAU,kBAAkB,aAAa,GAAG;EACrD,IAAI,OAAO,eAAeN,6CACxB,OAAOG,cAAO,IAAI;GAChB,eAAWI,uCAAgB,OAAO,aAAa;GAC/C,QAAQ,UACN,IAAI,iBAAiB;IAAE,OAAO,kBAAkB,OAAO,WAAW;IAAI;GAAM,CAAC;EACjF,CAAC;EAEH,OAAOJ,cAAO,WAAW;GACvB,eAAWK,uDAAmB,MAAM;GACpC,QAAQ,UACN,IAAI,iBAAiB;IAAE,OAAO,yBAAyB,OAAO,WAAW;IAAI;GAAM,CAAC;EACxF,CAAC;CACH;CAEA,OAAO;EACL,oBAAoB,UAAMN,gBAAK,WAAW,+BAA+B,IAAI;EAC7E,oBAAoB,OAAO;EAC3B,gBAAgB,OAAO;CACzB;AACF,CAAC;AAED,eAAsB,sBACpB,WACA,QACA,MAKmF;CACnF,OAAOC,cAAO,WAAW,4BAA4B,WAAW,QAAQ,IAAI,CAAC;AAC/E"}