| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 'use strict';
- const fs = require('node:fs');
- const fsPromises = require('node:fs/promises');
- const path = require('node:path');
- const process = require('node:process');
- const constants = require('./constants.cjs');
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
- const fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
- const fsPromises__default = /*#__PURE__*/_interopDefaultCompat(fsPromises);
- const path__default = /*#__PURE__*/_interopDefaultCompat(path);
- const process__default = /*#__PURE__*/_interopDefaultCompat(process);
- async function detect(options = {}) {
- const { cwd, onUnknown } = options;
- for (const directory of lookup(cwd)) {
- for (const lock of Object.keys(constants.LOCKS)) {
- if (await fileExists(path__default.join(directory, lock))) {
- const name = constants.LOCKS[lock];
- const result2 = await parsePackageJson(path__default.join(directory, "package.json"), onUnknown);
- if (result2)
- return result2;
- else
- return { name, agent: name };
- }
- }
- const result = await parsePackageJson(path__default.join(directory, "package.json"), onUnknown);
- if (result)
- return result;
- }
- return null;
- }
- function detectSync(options = {}) {
- const { cwd, onUnknown } = options;
- for (const directory of lookup(cwd)) {
- for (const lock of Object.keys(constants.LOCKS)) {
- if (fileExistsSync(path__default.join(directory, lock))) {
- const name = constants.LOCKS[lock];
- const result2 = parsePackageJsonSync(path__default.join(directory, "package.json"), onUnknown);
- if (result2)
- return result2;
- else
- return { name, agent: name };
- }
- }
- const result = parsePackageJsonSync(path__default.join(directory, "package.json"), onUnknown);
- if (result)
- return result;
- }
- return null;
- }
- function getUserAgent() {
- const userAgent = process__default.env.npm_config_user_agent;
- if (!userAgent) {
- return null;
- }
- const name = userAgent.split("/")[0];
- return constants.AGENTS.includes(name) ? name : null;
- }
- function* lookup(cwd = process__default.cwd()) {
- let directory = path__default.resolve(cwd);
- const { root } = path__default.parse(directory);
- while (directory && directory !== root) {
- yield directory;
- directory = path__default.dirname(directory);
- }
- }
- async function parsePackageJson(filepath, onUnknown) {
- return !filepath || !await fileExists(filepath) ? null : handlePackageManager(filepath, onUnknown);
- }
- function parsePackageJsonSync(filepath, onUnknown) {
- return !filepath || !fileExistsSync(filepath) ? null : handlePackageManager(filepath, onUnknown);
- }
- function handlePackageManager(filepath, onUnknown) {
- try {
- const pkg = JSON.parse(fs__default.readFileSync(filepath, "utf8"));
- let agent;
- if (typeof pkg.packageManager === "string") {
- const [name, ver] = pkg.packageManager.replace(/^\^/, "").split("@");
- let version = ver;
- if (name === "yarn" && Number.parseInt(ver) > 1) {
- agent = "yarn@berry";
- version = "berry";
- return { name, agent, version };
- } else if (name === "pnpm" && Number.parseInt(ver) < 7) {
- agent = "pnpm@6";
- return { name, agent, version };
- } else if (constants.AGENTS.includes(name)) {
- agent = name;
- return { name, agent, version };
- } else {
- return onUnknown?.(pkg.packageManager) ?? null;
- }
- }
- } catch {
- }
- return null;
- }
- async function fileExists(filePath) {
- try {
- const stats = await fsPromises__default.stat(filePath);
- if (stats.isFile()) {
- return true;
- }
- } catch {
- }
- return false;
- }
- function fileExistsSync(filePath) {
- try {
- const stats = fs__default.statSync(filePath);
- if (stats.isFile()) {
- return true;
- }
- } catch {
- }
- return false;
- }
- exports.detect = detect;
- exports.detectSync = detectSync;
- exports.getUserAgent = getUserAgent;
|