UNPKG

@strapi/strapi

Version:

An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite

1 lines 5.38 kB
{"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;;;;"}