diff --git a/src/packageUtils/dependencies.spec.ts b/src/packageUtils/dependencies.spec.ts index f48b136..fdaaf9c 100644 --- a/src/packageUtils/dependencies.spec.ts +++ b/src/packageUtils/dependencies.spec.ts @@ -1,5 +1,5 @@ import { describe, it, expect } from "vitest"; -import { buildDependencyArray } from "./dependencies"; +import { buildDependencyArray, getPackageMeta } from "./dependencies"; import type { PackageJson, PackageMeta } from "./types"; @@ -32,14 +32,14 @@ describe("buildDependencyArray", () => { isAncestorDevDependency, ); - expect(result).toEqual([ + expect(result).toStrictEqual([ { name: "dep1", type: "dependencies", version: "1.0.0", isPeerDevDependency: false, isPeerOptionalDependency: true, - depender, + depender: { ...depender }, }, { name: "dep2", @@ -47,7 +47,7 @@ describe("buildDependencyArray", () => { version: "2.0.0", isPeerDevDependency: true, isPeerOptionalDependency: false, - depender, + depender: { ...depender }, }, ]); }); @@ -92,3 +92,80 @@ describe("buildDependencyArray", () => { ]); }); }); + +describe("getPackageMeta", () => { + it("returns a PackageMeta object", () => { + const packagePath = "/path/to/package"; + const packageJson: PackageJson = { + name: "test-package", + version: "1.0.0", + dependencies: { + "dep-package": "^1.0.0", + }, + devDependencies: { + "dev-package": "^2.0.0", + }, + optionalDependencies: { + "opt-package": "^3.0.0", + }, + peerDependencies: { + "peer-package": "^4.0.0", + }, + peerDependenciesMeta: { + "peer-package": { + optional: true, + }, + }, + peerDevDependencies: [], + }; + const isAncestorDevDependency = false; + + const packageMeta = getPackageMeta( + packagePath, + packageJson, + isAncestorDevDependency, + ); + + expect(packageMeta).toMatchObject({ + name: "test-package", + version: "1.0.0", + packagePath: "/path/to/package", + dependencies: [ + { + type: "dependencies", + name: "dep-package", + version: "^1.0.0", + isPeerDevDependency: false, + isPeerOptionalDependency: false, + }, + ], + devDependencies: [ + { + type: "devDependencies", + name: "dev-package", + version: "^2.0.0", + isPeerDevDependency: false, + isPeerOptionalDependency: false, + }, + ], + optionalDependencies: [ + { + type: "optionalDependencies", + name: "opt-package", + version: "^3.0.0", + isPeerDevDependency: false, + isPeerOptionalDependency: false, + }, + ], + peerDependencies: [ + { + type: "peerDependencies", + name: "peer-package", + version: "^4.0.0", + isPeerDevDependency: false, + isPeerOptionalDependency: true, + }, + ], + }); + }); +}); diff --git a/src/packageUtils/dependencies.ts b/src/packageUtils/dependencies.ts index 20bdc8e..5a0251a 100644 --- a/src/packageUtils/dependencies.ts +++ b/src/packageUtils/dependencies.ts @@ -30,3 +30,38 @@ export function buildDependencyArray( }; }); } + +export function getPackageMeta( + packagePath: string, + packageJson: PackageJson, + isAncestorDevDependency: boolean, +): PackageMeta { + const { name, version } = packageJson; + const packageMeta: PackageMeta = { + name, + version, + packagePath, + dependencies: [], + devDependencies: [], + optionalDependencies: [], + peerDependencies: [], + }; + + const dependencyTypes: Array = [ + "dependencies", + "devDependencies", + "optionalDependencies", + "peerDependencies", + ]; + + for (const type of dependencyTypes) { + packageMeta[type] = buildDependencyArray( + type, + packageJson, + packageMeta, + isAncestorDevDependency, + ); + } + + return packageMeta; +}