diff --git a/packages/find-and-require-package-json/README.md b/packages/find-and-require-package-json/README.md index 05a685e..d47c552 100644 --- a/packages/find-and-require-package-json/README.md +++ b/packages/find-and-require-package-json/README.md @@ -13,7 +13,7 @@

-This TypeScript module provides a function to locate, read, and parse the `package.json` file from the current directory or any of its parent directories. +This TypeScript module provides a function to locate, read, and parse the `package.json` file starting from a specified directory and searching up through parent directories. ## install @@ -26,7 +26,21 @@ npm install find-and-require-package-json ```js import { findAndRequirePackageJson } from 'find-and-require-package-json'; -const packageJson = findAndRequirePackageJson(); +// Pass __dirname to find the package.json for your module +const packageJson = findAndRequirePackageJson(__dirname); console.log('Package name:', packageJson.name); console.log('Version:', packageJson.version); -``` \ No newline at end of file +``` + +### ESM Usage + +For ESM modules, you'll need to convert `import.meta.url` to a directory path: + +```js +import { findAndRequirePackageJson } from 'find-and-require-package-json'; +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const packageJson = findAndRequirePackageJson(__dirname); +``` diff --git a/packages/find-and-require-package-json/__tests__/find-pkg.test.ts b/packages/find-and-require-package-json/__tests__/find-pkg.test.ts index 5f3f9e0..9b2b8d8 100644 --- a/packages/find-and-require-package-json/__tests__/find-pkg.test.ts +++ b/packages/find-and-require-package-json/__tests__/find-pkg.test.ts @@ -38,7 +38,7 @@ describe('findAndRequirePackageJson', () => { jest.spyOn(process, 'cwd').mockReturnValue(mockCurrentDir); - const result = findAndRequirePackageJson(); + const result = findAndRequirePackageJson(mockCurrentDir); expect(result).toEqual(mockPackageJson); expect(existsSync).toHaveBeenCalledWith(mockFilePath); @@ -57,7 +57,7 @@ describe('findAndRequirePackageJson', () => { jest.spyOn(process, 'cwd').mockReturnValue(mockCurrentDir); - expect(() => findAndRequirePackageJson()).toThrow( + expect(() => findAndRequirePackageJson(mockCurrentDir)).toThrow( 'package.json not found in any parent directory' ); expect(existsSync).toHaveBeenCalledWith(mockFilePath); diff --git a/packages/find-and-require-package-json/package.json b/packages/find-and-require-package-json/package.json index 010752f..616626e 100644 --- a/packages/find-and-require-package-json/package.json +++ b/packages/find-and-require-package-json/package.json @@ -1,6 +1,6 @@ { "name": "find-and-require-package-json", - "version": "0.6.8", + "version": "0.7.0", "author": "Dan Lynch ", "description": "Find the package.json file from within a build/package", "main": "index.js", diff --git a/packages/find-and-require-package-json/src/package.ts b/packages/find-and-require-package-json/src/package.ts index e6c3e27..4f40005 100644 --- a/packages/find-and-require-package-json/src/package.ts +++ b/packages/find-and-require-package-json/src/package.ts @@ -36,9 +36,10 @@ function _findPackageJson(currentDir: string): string { return _findPackageJson(parentDir); } -export function findAndRequirePackageJson(): PackageJson { - // Start searching from the current directory - const pkgPath = _findPackageJson(__dirname); +export function findAndRequirePackageJson(callerDir: string): PackageJson { + // Start searching from the caller's directory + // The caller should pass __dirname (CJS) or dirname(fileURLToPath(import.meta.url)) (ESM) + const pkgPath = _findPackageJson(callerDir); // Read and parse the package.json const str = readFileSync(pkgPath, 'utf8'); diff --git a/packages/inquirerer/src/utils.ts b/packages/inquirerer/src/utils.ts index 87e8b5e..2063d1d 100644 --- a/packages/inquirerer/src/utils.ts +++ b/packages/inquirerer/src/utils.ts @@ -3,13 +3,13 @@ import { findAndRequirePackageJson } from "find-and-require-package-json"; // Function to display the version information export function displayVersion(): any { - const pkg = findAndRequirePackageJson(); + const pkg = findAndRequirePackageJson(__dirname); console.log(green(`Name: ${pkg.name}`)); console.log(blue(`Version: ${pkg.version}`)); } export function getVersion(): string { - const pkg = findAndRequirePackageJson(); + const pkg = findAndRequirePackageJson(__dirname); return pkg.version; }