{"version":3,"file":"ensure-admin-dependencies.mjs","sources":["../../../../src/node/core/ensure-admin-dependencies.ts"],"sourcesContent":["import os from 'node:os';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport {\n  findUndeclaredAdminPeerDeps,\n  hashPackageJson,\n  installAdminPeerDeps,\n  MissingAdminPeerDepsError,\n  readCachedHash,\n  reexecCurrentCommand,\n  reportMissingAdminPeerDeps,\n  validateDeclaredAdminPeerDeps,\n  writeCachedHash,\n} from './dependencies';\n\ninterface EnsureAdminDependenciesOptions {\n  cwd: string;\n  logger: Logger;\n  installIfMissing: boolean;\n}\n\ninterface EnsureAdminDependenciesResult {\n  didInstall: boolean;\n}\n\n/**\n * Ensures admin peer dependencies are declared (and optionally auto-installed).\n *\n * Policy (`installIfMissing`) is decided by the caller — e.g. build vs develop CLI flags.\n * Checking and installation are command-agnostic.\n */\nconst ensureAdminDependencies = async ({\n  cwd,\n  logger,\n  installIfMissing,\n}: EnsureAdminDependenciesOptions): Promise<EnsureAdminDependenciesResult> => {\n  if (process.env.USE_EXPERIMENTAL_DEPENDENCIES === 'true') {\n    logger.warn('You are using experimental dependencies that may not be compatible with Strapi.');\n    return { didInstall: false };\n  }\n\n  // Hash-cache: skip the full check when package.json hasn't changed since\n  // the last successful pass. The cache lives under node_modules so it's\n  // already gitignored and disposable (a `yarn install` wipe re-runs it).\n  const currentHash = await hashPackageJson(cwd);\n  if (currentHash) {\n    const cachedHash = await readCachedHash(cwd);\n    if (cachedHash === currentHash) {\n      return { didInstall: false };\n    }\n  }\n\n  const missing = await findUndeclaredAdminPeerDeps(cwd);\n\n  if (missing.length > 0) {\n    if (installIfMissing) {\n      logger.info(\n        'The Strapi admin needs to install the following dependencies:',\n        os.EOL,\n        missing.map(({ name, wantedVersion }) => `  - ${name}@${wantedVersion}`).join(os.EOL)\n      );\n\n      await installAdminPeerDeps(missing, { cwd, logger });\n      await reexecCurrentCommand(cwd);\n\n      return { didInstall: true };\n    }\n\n    reportMissingAdminPeerDeps(logger, missing);\n    throw new MissingAdminPeerDepsError(missing);\n  }\n\n  await validateDeclaredAdminPeerDeps(cwd, logger);\n\n  if (currentHash) {\n    await writeCachedHash(cwd, currentHash);\n  }\n\n  return { didInstall: false };\n};\n\n/**\n * Runs {@link ensureAdminDependencies} and exits the process on failure.\n *\n * @returns `true` when the caller should continue, `false` when a re-exec was triggered.\n */\nconst handleAdminDependencies = async (\n  options: EnsureAdminDependenciesOptions\n): Promise<boolean> => {\n  try {\n    const { didInstall } = await ensureAdminDependencies(options);\n\n    return !didInstall;\n  } catch (err) {\n    options.logger.error(err instanceof Error ? err.message : String(err));\n    process.exit(1);\n  }\n};\n\nexport { ensureAdminDependencies, handleAdminDependencies };\nexport type { EnsureAdminDependenciesOptions, EnsureAdminDependenciesResult };\n"],"names":["ensureAdminDependencies","cwd","logger","installIfMissing","process","env","USE_EXPERIMENTAL_DEPENDENCIES","warn","didInstall","currentHash","hashPackageJson","cachedHash","readCachedHash","missing","findUndeclaredAdminPeerDeps","length","info","os","EOL","map","name","wantedVersion","join","installAdminPeerDeps","reexecCurrentCommand","reportMissingAdminPeerDeps","MissingAdminPeerDepsError","validateDeclaredAdminPeerDeps","writeCachedHash","handleAdminDependencies","options","err","error","Error","message","String","exit"],"mappings":";;;AAyBA;;;;;IAMA,MAAMA,0BAA0B,OAAO,EACrCC,GAAG,EACHC,MAAM,EACNC,gBAAgB,EACe,GAAA;AAC/B,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,6BAA6B,KAAK,MAAA,EAAQ;AACxDJ,QAAAA,MAAAA,CAAOK,IAAI,CAAC,iFAAA,CAAA;QACZ,OAAO;YAAEC,UAAAA,EAAY;AAAM,SAAA;AAC7B,IAAA;;;;IAKA,MAAMC,WAAAA,GAAc,MAAMC,eAAAA,CAAgBT,GAAAA,CAAAA;AAC1C,IAAA,IAAIQ,WAAAA,EAAa;QACf,MAAME,UAAAA,GAAa,MAAMC,cAAAA,CAAeX,GAAAA,CAAAA;AACxC,QAAA,IAAIU,eAAeF,WAAAA,EAAa;YAC9B,OAAO;gBAAED,UAAAA,EAAY;AAAM,aAAA;AAC7B,QAAA;AACF,IAAA;IAEA,MAAMK,OAAAA,GAAU,MAAMC,2BAAAA,CAA4Bb,GAAAA,CAAAA;IAElD,IAAIY,OAAAA,CAAQE,MAAM,GAAG,CAAA,EAAG;AACtB,QAAA,IAAIZ,gBAAAA,EAAkB;YACpBD,MAAAA,CAAOc,IAAI,CACT,+DAAA,EACAC,EAAAA,CAAGC,GAAG,EACNL,OAAAA,CAAQM,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAK,CAAC,IAAI,EAAED,IAAAA,CAAK,CAAC,EAAEC,aAAAA,CAAAA,CAAe,CAAA,CAAEC,IAAI,CAACL,EAAAA,CAAGC,GAAG,CAAA,CAAA;AAGtF,YAAA,MAAMK,qBAAqBV,OAAAA,EAAS;AAAEZ,gBAAAA,GAAAA;AAAKC,gBAAAA;AAAO,aAAA,CAAA;AAClD,YAAA,MAAMsB,oBAAAA,CAAqBvB,GAAAA,CAAAA;YAE3B,OAAO;gBAAEO,UAAAA,EAAY;AAAK,aAAA;AAC5B,QAAA;AAEAiB,QAAAA,0BAAAA,CAA2BvB,MAAAA,EAAQW,OAAAA,CAAAA;AACnC,QAAA,MAAM,IAAIa,yBAAAA,CAA0Bb,OAAAA,CAAAA;AACtC,IAAA;AAEA,IAAA,MAAMc,8BAA8B1B,GAAAA,EAAKC,MAAAA,CAAAA;AAEzC,IAAA,IAAIO,WAAAA,EAAa;AACf,QAAA,MAAMmB,gBAAgB3B,GAAAA,EAAKQ,WAAAA,CAAAA;AAC7B,IAAA;IAEA,OAAO;QAAED,UAAAA,EAAY;AAAM,KAAA;AAC7B;AAEA;;;;IAKA,MAAMqB,0BAA0B,OAC9BC,OAAAA,GAAAA;IAEA,IAAI;AACF,QAAA,MAAM,EAAEtB,UAAU,EAAE,GAAG,MAAMR,uBAAAA,CAAwB8B,OAAAA,CAAAA;AAErD,QAAA,OAAO,CAACtB,UAAAA;AACV,IAAA,CAAA,CAAE,OAAOuB,GAAAA,EAAK;QACZD,OAAAA,CAAQ5B,MAAM,CAAC8B,KAAK,CAACD,eAAeE,KAAAA,GAAQF,GAAAA,CAAIG,OAAO,GAAGC,MAAAA,CAAOJ,GAAAA,CAAAA,CAAAA;AACjE3B,QAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AACF;;;;"}