JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q53450F
  • License MIT

Read a file based on the stack trace from any subdirectory in your project.

Package Exports

  • @mnrendra/read-stacked-file
  • @mnrendra/read-stacked-file/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@mnrendra/read-stacked-file) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@mnrendra/read-stacked-file

npm version types license

Read a file based on the stack trace from any subdirectory in your project.
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

npm i @mnrendra/read-stacked-file

Usage

  • readStackedFile(targetFile?, options?):
    Reads the stack-trace file asynchronously and returns the file data in a Promise<string>.
  • readStackedFileSync(targetFile?, options?):
    Reads the stack-trace file synchronously and returns the file data in a string.

Using CommonJS:

const { readStackedFile, readStackedFileSync } = require('@mnrendra/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:

import { readStackedFile, readStackedFileSync } from '@mnrendra/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:

{
  "name": "project-name",
  "version": "1.0.0"
}

This lets you read the ~/project-name/package.json file from any directory in your project.
Examples:

• Read from ~/project-name/src/index.js:
const { readStackedFileSync } = require('@mnrendra/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:
import { readStackedFile } from '@mnrendra/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:

{
  "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.
Here are some examples:

• Read from /consumer/node_modules/module-name/dist/index.js:
"use strict";

const { readStackedFileSync } = require('@mnrendra/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:
"use strict";

const { readStackedFile } = require('@mnrendra/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
A caller function to serve as the stack-trace target.

stackTraceLimit

Type: number
Default: 10
The Error.stackTraceLimit property specifies the number of stack frames to be collected by a stack trace.

Types

import type {
  Options // The Options interface for `readStackedFile` and `readStackedFileSync`.
} from '@mnrendra/read-stacked-file'

License

MIT

Author

@mnrendra