@mnrendra/read-stacked-file
Version:
Read a file based on the stack trace from any subdirectory in your project.
172 lines (132 loc) • 4.75 kB
Markdown
# /read-stacked-file



Read a file based on the stack trace from any subdirectory in your project.<br/>
*Useful for reading files relative to the original caller — even when deeply nested. Ideal for accessing config files like `package.json`, `.env`, and more.*
## Install
```bash
npm i /read-stacked-file
```
## Usage
- **`readStackedFile(targetFile?, options?)`**:<br/>
Reads the stack-trace file asynchronously and returns the file data in a `Promise<string>`.
- **`readStackedFileSync(targetFile?, options?)`**:<br/>
Reads the stack-trace file synchronously and returns the file data in a `string`.
### Using **CommonJS**:
```javascript
const { readStackedFile, readStackedFileSync } = require('/read-stacked-file')
// Asynchronously
const readAsync = async () => {
const data = await readStackedFile('package.json')
console.log('asynchronously:', data)
}
readAsync()
// Synchronously
const readSync = () => {
const data = readStackedFileSync('package.json')
console.log('synchronously:', data)
}
readSync()
```
### Using **ES Modules**:
```javascript
import { readStackedFile, readStackedFileSync } from '/read-stacked-file'
// Asynchronously
const readAsync = async () => {
const data = await readStackedFile('package.json')
console.log('asynchronously:', data)
}
readAsync()
// Synchronously
const readSync = () => {
const data = readStackedFileSync('package.json')
console.log('synchronously:', data)
}
readSync()
```
### Examples
#### 1. Read the `package.json` file in your development project:
Assuming your project's `~/project-name/package.json` file is as follows:
```json
{
"name": "project-name",
"version": "1.0.0"
}
```
This lets you read the `~/project-name/package.json` file from any directory in your project.<br/>
Examples:<br/>
##### • Read from `~/project-name/src/index.js`:
```javascript
const { readStackedFileSync } = require('/read-stacked-file')
// Synchronously
const main = () => {
const data = readStackedFileSync('package.json')
const { name, version } = JSON.parse(data)
console.log('synchronously:', name, version) // Output: synchronously: project-name 1.0.0
}
main()
```
##### • Read from `~/project-name/src/any-directory/index.mjs`:
```javascript
import { readStackedFile } from '/read-stacked-file'
// Asynchronously
const main = async () => {
const data = await readStackedFile('package.json')
const { name, version } = JSON.parse(data)
console.log('asynchronously:', name, version) // Output: asynchronously: project-name 1.0.0
}
main()
```
#### 2. Read the `package.json` file in your published module:
Assuming your module is installed in the `/consumer/node_modules/module-name/` directory and the `package.json` file for your module located at `/consumer/node_modules/module-name/package.json` is as follows:
```json
{
"name": "module-name",
"version": "1.0.0"
}
```
This lets you access and read your module’s `package.json` file from any directory within the module itself.<br/>
Here are some examples:<br/>
##### • Read from `/consumer/node_modules/module-name/dist/index.js`:
```javascript
"use strict";
const { readStackedFileSync } = require('/read-stacked-file');
// Synchronously
const main = () => {
const data = readStackedFileSync('package.json');
const { name, version } = JSON.parse(data);
console.log('synchronously:', name, version); // Output: synchronously: module-name 1.0.0
}
main();
```
##### • Read from `/consumer/node_modules/module-name/dist/any-directory/index.js`:
```javascript
"use strict";
const { readStackedFile } = require('/read-stacked-file');
// Asynchronously
const main = async () => {
const data = await readStackedFile('package.json');
const { name, version } = JSON.parse(data);
console.log('asynchronously:', name, version); // Output: asynchronously: module-name 1.0.0
}
main();
```
## Options
### • `caller`
**Type:** `(...args: any) => any`<br/>
A caller function to serve as the stack-trace target.
### • `stackTraceLimit`
**Type:** `number`<br/>
**Default:** `10`<br/>
The `Error.stackTraceLimit` property specifies the number of stack frames to be collected by a stack trace.
## Types
```typescript
import type {
Options // The Options interface for `readStackedFile` and `readStackedFileSync`.
} from '/read-stacked-file'
```
## License
[MIT](https://github.com/mnrendra/read-stacked-file/blob/HEAD/LICENSE)
## Author
[ ](https://github.com/mnrendra)