{"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, resolveFrameworkPackage } 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 resolved = resolveFrameworkPackage(projectDir, name);\n      const latest = await fetchLatestNpmVersion(name);\n      return {\n        name,\n        installed: resolved.installedVersion,\n        latest: latest ?? undefined,\n        isLinked: resolved.isLinked,\n        specifier: resolved.specifier,\n      };\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,cAAc;AAE5D,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,eAAe,sBAAsB,aAA6C;CAChF,OAAO,gBAAqC,8BAA8B,YAAY,UAAU;EAC9F,SAAS,EAAE,QAAQ,mBAAmB;EACtC,SAAS;CACX,CAAC,CAAC,CAAC,MAAM,SAAS,MAAM,WAAW,IAAI;AACzC;AAEA,SAAS,qBAAqB,YAAoB,aAAyC;CACzF,OAAO,8BAA8B,YAAY,WAAW;AAC9D;AAEA,SAAS,aAAa,YAA0D;CAC9E,IAAI,WAAW,KAAK,YAAY,MAAM,CAAC,GAAG,OAAO;CACjD,IAAI,WAAW,KAAK,YAAY,cAAc,CAAC,GAAG,OAAO;CACzD,OAAO;AACT;AAEA,eAAe,qBAAqB,YAA8D;CAChG,IAAI,CAAC,YAAY,WAAW,QAAQ,GAAG,OAAO;CAC9C,IAAI;EAEF,OAAO,MADc,yBAAyB,UAAU,MACtC;CACpB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,eAAsB,UAAU,YAA2C;CACzE,MAAM,aAAa,KAAK,YAAY,iBAAiB;CACrD,IAAI,CAAC,WAAW,UAAU,GACxB,OAAO;EACL,QAAQ;EACR,OAAO;EACP,UAAU,CAAC;EACX,SAAS;CACX;CAGF,MAAM,SAAS,KAAK,MAAM,aAAa,YAAY,OAAO,CAAC;CAE3D,MAAM,eAAe,CAAC,GAAG,kBAAkB;CAC3C,KAAK,MAAM,QAAQ,uBACjB,IAAI,qBAAqB,YAAY,IAAI,GACvC,aAAa,KAAK,IAAI;CAI1B,MAAM,WAAW,MAAM,QAAQ,IAC7B,aAAa,IAAI,OAAO,SAAS;EAC/B,MAAM,WAAW,wBAAwB,YAAY,IAAI;EACzD,MAAM,SAAS,MAAM,sBAAsB,IAAI;EAC/C,OAAO;GACL;GACA,WAAW,SAAS;GACpB,QAAQ,UAAU;GAClB,UAAU,SAAS;GACnB,WAAW,SAAS;EACtB;CACF,CAAC,CACH;CAEA,MAAM,WAAW,MAAM,aAAa,UAAU;CAE9C,MAAM,aAAa,OAAO;CAC1B,MAAM,kBAAkB,MAAM,qBAAqB,UAAU;CAE7D,OAAO;EACL,QAAQ;EACR,SAAS;EACT,SAAS,OAAO;EAChB,QAAQ,OAAO;EACf;EACA,UAAU,UAAU;EACpB,SAAS,aAAa,UAAU;EAChC;CACF;AACF"}