+28
-5
@@ -11,3 +11,3 @@ #!/usr/bin/env node | ||
| var name = "nypm"; | ||
| var version = "0.6.4"; | ||
| var version = "0.6.5"; | ||
| var description = "Unified Package Manager for Node.js"; | ||
@@ -90,8 +90,29 @@ const packageManagers = [ | ||
| } | ||
| async function readPackageJSON(cwd) { | ||
| async function readPackageJSON(cwd, options = {}) { | ||
| return findup(cwd, (p) => { | ||
| const pkgPath = join$1(p, "package.json"); | ||
| if (existsSync(pkgPath)) return readFile(pkgPath, "utf8").then((data) => JSON.parse(data)); | ||
| }); | ||
| }, options); | ||
| } | ||
| async function readInstalledPackageJSON(pkgName, cwd) { | ||
| const pkgJSONPath = await findup(cwd, (p) => { | ||
| const candidate = join$1(p, "node_modules", pkgName, "package.json"); | ||
| if (existsSync(candidate)) return candidate; | ||
| }, { includeParentDirs: true }); | ||
| if (!pkgJSONPath) return null; | ||
| try { | ||
| return JSON.parse(await readFile(pkgJSONPath, "utf8")); | ||
| } catch { | ||
| return null; | ||
| } | ||
| } | ||
| async function readPackageJSONFromResolver(requireFn, pkgName) { | ||
| let resolved; | ||
| try { | ||
| resolved = requireFn.resolve(pkgName); | ||
| } catch { | ||
| return null; | ||
| } | ||
| return readPackageJSON(resolved, { includeParentDirs: true }); | ||
| } | ||
| function cached(fn) { | ||
@@ -227,4 +248,6 @@ let v; | ||
| const pkgName = _name.match(/^(.[^@]+)/)?.[0]; | ||
| const pkg = await readPackageJSON(_require.resolve(pkgName)); | ||
| if (!pkg?.peerDependencies || pkg?.name !== pkgName) continue; | ||
| if (!pkgName) continue; | ||
| let pkg = await readPackageJSONFromResolver(_require, pkgName); | ||
| if (pkg?.name !== pkgName) pkg = await readInstalledPackageJSON(pkgName, resolvedOptions.cwd); | ||
| if (!pkg?.peerDependencies) continue; | ||
| for (const [peerDependency, version] of Object.entries(pkg.peerDependencies)) { | ||
@@ -231,0 +254,0 @@ if (pkg.peerDependenciesMeta?.[peerDependency]?.optional) continue; |
+0
-8
@@ -1,2 +0,1 @@ | ||
| //#region src/types.d.ts | ||
| type PackageManagerName = "npm" | "yarn" | "pnpm" | "bun" | "deno"; | ||
@@ -30,4 +29,2 @@ type PackageManager = { | ||
| }; | ||
| //#endregion | ||
| //#region src/package-manager.d.ts | ||
| type DetectPackageManagerOptions = { | ||
@@ -68,4 +65,2 @@ /** | ||
| }) | undefined>; | ||
| //#endregion | ||
| //#region src/api.d.ts | ||
| /** | ||
@@ -177,4 +172,2 @@ * Installs project dependencies. | ||
| }): Promise<OperationResult>; | ||
| //#endregion | ||
| //#region src/cmd.d.ts | ||
| /** | ||
@@ -211,3 +204,2 @@ * Get the command to install dependencies with the package manager. | ||
| }): string; | ||
| //#endregion | ||
| export { DetectPackageManagerOptions, OperationOptions, OperationResult, PackageManager, PackageManagerName, addDependency, addDependencyCommand, addDevDependency, dedupeDependencies, detectPackageManager, dlx, dlxCommand, ensureDependencyInstalled, installDependencies, installDependenciesCommand, packageManagers, removeDependency, runScript, runScriptCommand }; |
+27
-4
@@ -16,8 +16,29 @@ import { createRequire } from "node:module"; | ||
| } | ||
| async function readPackageJSON(cwd) { | ||
| async function readPackageJSON(cwd, options = {}) { | ||
| return findup(cwd, (p) => { | ||
| const pkgPath = join$1(p, "package.json"); | ||
| if (existsSync(pkgPath)) return readFile(pkgPath, "utf8").then((data) => JSON.parse(data)); | ||
| }); | ||
| }, options); | ||
| } | ||
| async function readInstalledPackageJSON(pkgName, cwd) { | ||
| const pkgJSONPath = await findup(cwd, (p) => { | ||
| const candidate = join$1(p, "node_modules", pkgName, "package.json"); | ||
| if (existsSync(candidate)) return candidate; | ||
| }, { includeParentDirs: true }); | ||
| if (!pkgJSONPath) return null; | ||
| try { | ||
| return JSON.parse(await readFile(pkgJSONPath, "utf8")); | ||
| } catch { | ||
| return null; | ||
| } | ||
| } | ||
| async function readPackageJSONFromResolver(requireFn, pkgName) { | ||
| let resolved; | ||
| try { | ||
| resolved = requireFn.resolve(pkgName); | ||
| } catch { | ||
| return null; | ||
| } | ||
| return readPackageJSON(resolved, { includeParentDirs: true }); | ||
| } | ||
| function cached(fn) { | ||
@@ -311,4 +332,6 @@ let v; | ||
| const pkgName = _name.match(/^(.[^@]+)/)?.[0]; | ||
| const pkg = await readPackageJSON(_require.resolve(pkgName)); | ||
| if (!pkg?.peerDependencies || pkg?.name !== pkgName) continue; | ||
| if (!pkgName) continue; | ||
| let pkg = await readPackageJSONFromResolver(_require, pkgName); | ||
| if (pkg?.name !== pkgName) pkg = await readInstalledPackageJSON(pkgName, resolvedOptions.cwd); | ||
| if (!pkg?.peerDependencies) continue; | ||
| for (const [peerDependency, version] of Object.entries(pkg.peerDependencies)) { | ||
@@ -315,0 +338,0 @@ if (pkg.peerDependenciesMeta?.[peerDependency]?.optional) continue; |
+12
-12
| { | ||
| "name": "nypm", | ||
| "version": "0.6.5", | ||
| "version": "0.6.6", | ||
| "description": "Unified Package Manager for Node.js", | ||
@@ -21,21 +21,21 @@ "license": "MIT", | ||
| "dependencies": { | ||
| "citty": "^0.2.0", | ||
| "citty": "^0.2.2", | ||
| "pathe": "^2.0.3", | ||
| "tinyexec": "^1.0.2" | ||
| "tinyexec": "^1.1.1" | ||
| }, | ||
| "devDependencies": { | ||
| "@types/node": "^25.2.1", | ||
| "@typescript/native-preview": "^7.0.0-dev.20260205.1", | ||
| "@vitest/coverage-v8": "^4.0.18", | ||
| "@types/node": "^25.6.0", | ||
| "@typescript/native-preview": "^7.0.0-dev.20260424.1", | ||
| "@vitest/coverage-v8": "^4.1.5", | ||
| "automd": "^0.4.3", | ||
| "changelogen": "^0.6.2", | ||
| "eslint-config-unjs": "^0.6.2", | ||
| "obuild": "^0.4.22", | ||
| "oxfmt": "^0.28.0", | ||
| "oxlint": "^1.43.0", | ||
| "obuild": "^0.4.33", | ||
| "oxfmt": "^0.46.0", | ||
| "oxlint": "^1.61.0", | ||
| "pkg-types": "^2.3.0", | ||
| "std-env": "^3.10.0", | ||
| "typescript": "^5.9.3", | ||
| "std-env": "^4.1.0", | ||
| "typescript": "^6.0.3", | ||
| "ufo": "^1.6.3", | ||
| "vitest": "^4.0.18" | ||
| "vitest": "^4.1.5" | ||
| }, | ||
@@ -42,0 +42,0 @@ "engines": { |
47475
2.83%929
5.21%Updated
Updated