{"version":3,"file":"status.mjs","names":[],"sources":["../../src/cli/status.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { StatusResult } from \"../contract\";\nimport { fetchBosConfigFromFastKv } from \"../fastkv\";\nimport { fetchJsonOrNull } from \"../http-client\";\nimport { readInstalledFrameworkVersion } from \"./framework-version\";\nimport { readSnapshot } from \"./snapshot\";\n\nconst FRAMEWORK_PACKAGES = [\"everything-dev\", \"every-plugin\"];\n\nconst CATALOG_TOOL_PACKAGES = [\n  \"@rspack/core\",\n  \"@rspack/cli\",\n  \"@rsbuild/core\",\n  \"@rsbuild/plugin-react\",\n  \"@module-federation/enhanced\",\n  \"@module-federation/node\",\n  \"@module-federation/rsbuild-plugin\",\n  \"@module-federation/runtime-core\",\n  \"@module-federation/sdk\",\n  \"@module-federation/dts-plugin\",\n] as const;\n\nasync function fetchLatestNpmVersion(packageName: string): Promise<string | null> {\n  return fetchJsonOrNull<{ version: string }>(`https://registry.npmjs.org/${packageName}/latest`, {\n    headers: { Accept: \"application/json\" },\n    retries: 0,\n  }).then((data) => data?.version ?? null);\n}\n\nfunction readInstalledVersion(projectDir: string, packageName: string): string | undefined {\n  return readInstalledFrameworkVersion(projectDir, packageName);\n}\n\nfunction checkEnvFile(projectDir: string): \"found\" | \"missing\" | \"example-only\" {\n  if (existsSync(join(projectDir, \".env\"))) return \"found\";\n  if (existsSync(join(projectDir, \".env.example\"))) return \"example-only\";\n  return \"missing\";\n}\n\nasync function checkParentReachable(extendsRef: string | undefined): Promise<boolean | undefined> {\n  if (!extendsRef?.startsWith(\"bos://\")) return undefined;\n  try {\n    const config = await fetchBosConfigFromFastKv(extendsRef);\n    return config !== null;\n  } catch {\n    return false;\n  }\n}\n\nexport async function getStatus(projectDir: string): Promise<StatusResult> {\n  const configPath = join(projectDir, \"bos.config.json\");\n  if (!existsSync(configPath)) {\n    return {\n      status: \"error\",\n      error: \"No bos.config.json found in current directory\",\n      packages: [],\n      envFile: \"missing\",\n    };\n  }\n\n  const config = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n\n  const packageNames = [...FRAMEWORK_PACKAGES];\n  for (const name of CATALOG_TOOL_PACKAGES) {\n    if (readInstalledVersion(projectDir, name)) {\n      packageNames.push(name);\n    }\n  }\n\n  const packages = await Promise.all(\n    packageNames.map(async (name) => {\n      const installed = readInstalledVersion(projectDir, name);\n      const latest = await fetchLatestNpmVersion(name);\n      return { name, installed, latest: latest ?? undefined };\n    }),\n  );\n\n  const snapshot = await readSnapshot(projectDir);\n\n  const extendsRef = config.extends as string | undefined;\n  const parentReachable = await checkParentReachable(extendsRef);\n\n  return {\n    status: \"ok\",\n    extends: extendsRef,\n    account: config.account as string | undefined,\n    domain: config.domain as string | undefined,\n    packages,\n    lastSync: snapshot?.timestamp,\n    envFile: checkEnvFile(projectDir),\n    parentReachable,\n  };\n}\n"],"mappings":";;;;;;;;AAQA,MAAM,qBAAqB,CAAC,kBAAkB,eAAe;AAE7D,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,eAAe,sBAAsB,aAA6C;AAChF,QAAO,gBAAqC,8BAA8B,YAAY,UAAU;EAC9F,SAAS,EAAE,QAAQ,oBAAoB;EACvC,SAAS;EACV,CAAC,CAAC,MAAM,SAAS,MAAM,WAAW,KAAK;;AAG1C,SAAS,qBAAqB,YAAoB,aAAyC;AACzF,QAAO,8BAA8B,YAAY,YAAY;;AAG/D,SAAS,aAAa,YAA0D;AAC9E,KAAI,WAAW,KAAK,YAAY,OAAO,CAAC,CAAE,QAAO;AACjD,KAAI,WAAW,KAAK,YAAY,eAAe,CAAC,CAAE,QAAO;AACzD,QAAO;;AAGT,eAAe,qBAAqB,YAA8D;AAChG,KAAI,CAAC,YAAY,WAAW,SAAS,CAAE,QAAO;AAC9C,KAAI;AAEF,SAAO,MADc,yBAAyB,WAAW,KACvC;SACZ;AACN,SAAO;;;AAIX,eAAsB,UAAU,YAA2C;CACzE,MAAM,aAAa,KAAK,YAAY,kBAAkB;AACtD,KAAI,CAAC,WAAW,WAAW,CACzB,QAAO;EACL,QAAQ;EACR,OAAO;EACP,UAAU,EAAE;EACZ,SAAS;EACV;CAGH,MAAM,SAAS,KAAK,MAAM,aAAa,YAAY,QAAQ,CAAC;CAE5D,MAAM,eAAe,CAAC,GAAG,mBAAmB;AAC5C,MAAK,MAAM,QAAQ,sBACjB,KAAI,qBAAqB,YAAY,KAAK,CACxC,cAAa,KAAK,KAAK;CAI3B,MAAM,WAAW,MAAM,QAAQ,IAC7B,aAAa,IAAI,OAAO,SAAS;AAG/B,SAAO;GAAE;GAAM,WAFG,qBAAqB,YAAY,KAE3B;GAAE,QAAQ,MADb,sBAAsB,KAAK,IACJ;GAAW;GACvD,CACH;CAED,MAAM,WAAW,MAAM,aAAa,WAAW;CAE/C,MAAM,aAAa,OAAO;CAC1B,MAAM,kBAAkB,MAAM,qBAAqB,WAAW;AAE9D,QAAO;EACL,QAAQ;EACR,SAAS;EACT,SAAS,OAAO;EAChB,QAAQ,OAAO;EACf;EACA,UAAU,UAAU;EACpB,SAAS,aAAa,WAAW;EACjC;EACD"}