# node-rootpath

> Node.js project/package root path detection.

Latest version **0.1.1** (published 2019-12-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install node-rootpath
pnpm add node-rootpath
yarn add node-rootpath
bun add node-rootpath
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.1 |
| Published | 2019-12-28 |
| First published | 2019-12-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 15 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Jonas Grimfelt |
| Maintainers | grimen |

## Links

- npm: https://www.npmjs.com/package/node-rootpath
- Repository: https://github.com/grimen/node-rootpath
- Homepage: https://github.com/grimen/node-rootpath#readme
- Issues: https://github.com/grimen/node-rootpath/issues
- npm.io page: https://npm.io/package/node-rootpath

## Dependencies (4)

- [chalk](https://npm.io/package/chalk.md) ^3.0.0
- [debug](https://npm.io/package/debug.md) ^4.1.1
- [fs-extra](https://npm.io/package/fs-extra.md) ^8.1.0
- [@grimen/mybad](https://npm.io/package/@grimen/mybad.md) ^0.2.1

## Recent versions

- 0.1.1 (latest) — 2019-12-28

## README

# `node-rootpath` [![NPM version](https://badge.fury.io/js/%40grimen%2Frootpath.svg)](https://badge.fury.io/js/%40grimen%2Frootpath) [![Build Status](https://travis-ci.com/grimen/node-rootpath.svg?token=sspjPRWbecBSpceU8Jyn&branch=master)](https://travis-ci.com/grimen/node-rootpath) [![Coverage Status](https://codecov.io/gh/grimen/node-rootpath/branch/master/graph/badge.svg)](https://codecov.io/gh/grimen/node-rootpath)

*Node.js project/package root path detection.*


## Introduction

Auto-magic project/package root path detection - from a child module file for Node.js libraries/projects.

It does this by detecting typical package/project root files/folders (e.g. `.git`, `package.json`, etc.), but it can also be overriden easily if needed.


## Install

Install using **npm**:

```bash
$ npm install @grimen/rootpath
```

Install using **yarn**:

```bash
$ yarn add @grimen/rootpath
```


# Use

Detect a project/package root path:

**1.** Assuming we have a **Node.js** library/application project...

```
/home/me/projects
    └── node-foo
            └── foo
                └── utils
                    └── __init__.js
                    └── baz.js
                    └── say.js
                └── __init__.js
                └── bar.js
            README.md
            package.json
            setup.js
```

`foo/bar.js` - top level package module

```javascript
const assert = require('assert')

const rootpath = require('@grimen/rootpath')

async function bar () {
    const path = await rootpath.detect()

    assert(path === '/home/me/projects/node-foo')

    console.log('---')
    console.log('FILE:', __filename)
    console.log('ROOT:', path)
    console.log('---')
}

if (require.main === module) {
    bar()
}
```

`foo/utils/baz.js` - nested level package module (dependency)

```javascript
const assert = require('assert')

const rootpath = require('@grimen/rootpath')

async function baz () {
    const path = await rootpath.detect()

    assert(path === '/home/me/projects/node-foo')

    console.log('---')
    console.log('FILE:', __filename)
    console.log('ROOT:', path)
    console.log('---')
}

if (require.main === module) {
    baz()
}
```

`foo/utils/say.js` - nested level package module (dependency)

```javascript
const assert = require('assert')

const rootpath = require('@grimen/rootpath')

async function say () {
    const path = rootpath.detect()

    console.log('---')
    console.log(`SAY: ${path}`)
    console.log('---')
}

if (require.main === module) {
    say()
}
```

**2.** Let's run the files individually - they should both with successful assertions and output accurately detected root paths...

```sh
$ cd /home/me/projects/node-foo

$ node ./foo/bar.js

---
FILE: /home/me/projects/node-foo/foo/bar.js
ROOT: /home/me/projects/node-foo
---

$ node ./foo/utils/baz.js

---
FILE: /home/me/projects/node-foo/foo/utils/baz.js
ROOT: /home/me/projects/node-foo
---

$ node ./foo/utils/say.js

---
SAY: /home/me/projects/node-foo
---

```


## Test

Clone down source code:

```sh
$ make install
```

Run **colorful tests** using **jest**:

```sh
$ make test
```


## Related

- [**`python-rootpath`**](https://github.com/grimen/python-rootpath) - *"Python project/package root path detection."*


## About

This project was mainly initiated - in lack of solid existing alternatives - to be used at our work at **[Markable.ai](https://markable.ai)** to have common code conventions between various programming environments where **Node.js** (for I/O heavy operations) is heavily used.


## License

Released under the MIT license.

---
_Source: https://npm.io/package/node-rootpath · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
