aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/vitest/dist/chunks/index.D3XRDfWc.js
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/vitest/dist/chunks/index.D3XRDfWc.js')
-rw-r--r--vanilla/node_modules/vitest/dist/chunks/index.D3XRDfWc.js213
1 files changed, 213 insertions, 0 deletions
diff --git a/vanilla/node_modules/vitest/dist/chunks/index.D3XRDfWc.js b/vanilla/node_modules/vitest/dist/chunks/index.D3XRDfWc.js
new file mode 100644
index 0000000..5a69ef7
--- /dev/null
+++ b/vanilla/node_modules/vitest/dist/chunks/index.D3XRDfWc.js
@@ -0,0 +1,213 @@
+import process from 'node:process';
+import fs from 'node:fs/promises';
+import path, { resolve } from 'node:path';
+import { existsSync } from 'node:fs';
+import { x } from 'tinyexec';
+
+const AGENTS = [
+ "npm",
+ "yarn",
+ "yarn@berry",
+ "pnpm",
+ "pnpm@6",
+ "bun",
+ "deno"
+];
+const LOCKS = {
+ "bun.lock": "bun",
+ "bun.lockb": "bun",
+ "deno.lock": "deno",
+ "pnpm-lock.yaml": "pnpm",
+ "pnpm-workspace.yaml": "pnpm",
+ "yarn.lock": "yarn",
+ "package-lock.json": "npm",
+ "npm-shrinkwrap.json": "npm"
+};
+const INSTALL_METADATA = {
+ "node_modules/.deno/": "deno",
+ "node_modules/.pnpm/": "pnpm",
+ "node_modules/.yarn-state.yml": "yarn",
+ // yarn v2+ (node-modules)
+ "node_modules/.yarn_integrity": "yarn",
+ // yarn v1
+ "node_modules/.package-lock.json": "npm",
+ ".pnp.cjs": "yarn",
+ // yarn v3+ (pnp)
+ ".pnp.js": "yarn",
+ // yarn v2 (pnp)
+ "bun.lock": "bun",
+ "bun.lockb": "bun"
+};
+
+async function pathExists(path2, type) {
+ try {
+ const stat = await fs.stat(path2);
+ return type === "file" ? stat.isFile() : stat.isDirectory();
+ } catch {
+ return false;
+ }
+}
+function* lookup(cwd = process.cwd()) {
+ let directory = path.resolve(cwd);
+ const { root } = path.parse(directory);
+ while (directory && directory !== root) {
+ yield directory;
+ directory = path.dirname(directory);
+ }
+}
+async function parsePackageJson(filepath, onUnknown) {
+ return !filepath || !pathExists(filepath, "file") ? null : await handlePackageManager(filepath, onUnknown);
+}
+async function detect(options = {}) {
+ const {
+ cwd,
+ strategies = ["lockfile", "packageManager-field", "devEngines-field"],
+ onUnknown
+ } = options;
+ let stopDir;
+ if (typeof options.stopDir === "string") {
+ const resolved = path.resolve(options.stopDir);
+ stopDir = (dir) => dir === resolved;
+ } else {
+ stopDir = options.stopDir;
+ }
+ for (const directory of lookup(cwd)) {
+ for (const strategy of strategies) {
+ switch (strategy) {
+ case "lockfile": {
+ for (const lock of Object.keys(LOCKS)) {
+ if (await pathExists(path.join(directory, lock), "file")) {
+ const name = LOCKS[lock];
+ const result = await parsePackageJson(path.join(directory, "package.json"), onUnknown);
+ if (result)
+ return result;
+ else
+ return { name, agent: name };
+ }
+ }
+ break;
+ }
+ case "packageManager-field":
+ case "devEngines-field": {
+ const result = await parsePackageJson(path.join(directory, "package.json"), onUnknown);
+ if (result)
+ return result;
+ break;
+ }
+ case "install-metadata": {
+ for (const metadata of Object.keys(INSTALL_METADATA)) {
+ const fileOrDir = metadata.endsWith("/") ? "dir" : "file";
+ if (await pathExists(path.join(directory, metadata), fileOrDir)) {
+ const name = INSTALL_METADATA[metadata];
+ const agent = name === "yarn" ? isMetadataYarnClassic(metadata) ? "yarn" : "yarn@berry" : name;
+ return { name, agent };
+ }
+ }
+ break;
+ }
+ }
+ }
+ if (stopDir?.(directory))
+ break;
+ }
+ return null;
+}
+function getNameAndVer(pkg) {
+ const handelVer = (version) => version?.match(/\d+(\.\d+){0,2}/)?.[0] ?? version;
+ if (typeof pkg.packageManager === "string") {
+ const [name, ver] = pkg.packageManager.replace(/^\^/, "").split("@");
+ return { name, ver: handelVer(ver) };
+ }
+ if (typeof pkg.devEngines?.packageManager?.name === "string") {
+ return {
+ name: pkg.devEngines.packageManager.name,
+ ver: handelVer(pkg.devEngines.packageManager.version)
+ };
+ }
+ return void 0;
+}
+async function handlePackageManager(filepath, onUnknown) {
+ try {
+ const pkg = JSON.parse(await fs.readFile(filepath, "utf8"));
+ let agent;
+ const nameAndVer = getNameAndVer(pkg);
+ if (nameAndVer) {
+ const name = nameAndVer.name;
+ const ver = nameAndVer.ver;
+ let version = ver;
+ if (name === "yarn" && ver && Number.parseInt(ver) > 1) {
+ agent = "yarn@berry";
+ version = "berry";
+ return { name, agent, version };
+ } else if (name === "pnpm" && ver && Number.parseInt(ver) < 7) {
+ agent = "pnpm@6";
+ return { name, agent, version };
+ } else if (AGENTS.includes(name)) {
+ agent = name;
+ return { name, agent, version };
+ } else {
+ return onUnknown?.(pkg.packageManager) ?? null;
+ }
+ }
+ } catch {
+ }
+ return null;
+}
+function isMetadataYarnClassic(metadataPath) {
+ return metadataPath.endsWith(".yarn_integrity");
+}
+
+// src/detect.ts
+async function detectPackageManager(cwd = process.cwd()) {
+ const result = await detect({
+ cwd,
+ onUnknown(packageManager) {
+ console.warn("[@antfu/install-pkg] Unknown packageManager:", packageManager);
+ return void 0;
+ }
+ });
+ return result?.agent || null;
+}
+async function installPackage(names, options = {}) {
+ const detectedAgent = options.packageManager || await detectPackageManager(options.cwd) || "npm";
+ const [agent] = detectedAgent.split("@");
+ if (!Array.isArray(names))
+ names = [names];
+ const args = (typeof options.additionalArgs === "function" ? options.additionalArgs(agent, detectedAgent) : options.additionalArgs) || [];
+ if (options.preferOffline) {
+ if (detectedAgent === "yarn@berry")
+ args.unshift("--cached");
+ else
+ args.unshift("--prefer-offline");
+ }
+ if (agent === "pnpm") {
+ args.unshift(
+ /**
+ * Prevent pnpm from removing installed devDeps while `NODE_ENV` is `production`
+ * @see https://pnpm.io/cli/install#--prod--p
+ */
+ "--prod=false"
+ );
+ if (existsSync(resolve(options.cwd ?? process.cwd(), "pnpm-workspace.yaml"))) {
+ args.unshift("-w");
+ }
+ }
+ return x(
+ agent,
+ [
+ agent === "yarn" ? "add" : "install",
+ options.dev ? "-D" : "",
+ ...args,
+ ...names
+ ].filter(Boolean),
+ {
+ nodeOptions: {
+ stdio: options.silent ? "ignore" : "inherit",
+ cwd: options.cwd
+ },
+ throwOnError: true
+ }
+ );
+}
+
+export { detectPackageManager, installPackage };