Skip to content

Commit

Permalink
Add TypeScript definition (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
BendingBender authored and sindresorhus committed May 1, 2019
1 parent ddee7ea commit 0aae4d6
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 17 deletions.
60 changes: 60 additions & 0 deletions index.d.ts
@@ -0,0 +1,60 @@
declare namespace globalDirectories {
interface GlobalDirectories {
/**
Directory with globally installed packages.
Equivalent to `npm root --global`.
*/
readonly packages: string;

/**
Directory with globally installed binaries.
Equivalent to `npm bin --global`.
*/
readonly binaries: string;

/**
Directory with directories for packages and binaries. You probably want either of the above.
Equivalent to `npm prefix --global`.
*/
readonly prefix: string;
}
}

declare const globalDirectories: {
/**
Get the directory of globally installed packages and binaries.
@example
```
import * as globalDirectories from 'global-dirs';
console.log(globalDirectories.npm.prefix);
//=> '/usr/local'
console.log(globalDirectories.npm.packages);
//=> '/usr/local/lib/node_modules'
```
*/
readonly npm: globalDirectories.GlobalDirectories;

/**
Get the directory of globally installed packages and binaries.
@example
```
import * as globalDirectories from 'global-dirs';
console.log(globalDirectories.npm.binaries);
//=> '/usr/local/bin'
console.log(globalDirectories.yarn.packages);
//=> '/Users/sindresorhus/.config/yarn/global/node_modules'
```
*/
readonly yarn: globalDirectories.GlobalDirectories;
}

export = globalDirectories;
9 changes: 9 additions & 0 deletions index.test-d.ts
@@ -0,0 +1,9 @@
import {expectType} from 'tsd';
import globalDirectories = require('.');

expectType<string>(globalDirectories.npm.prefix);
expectType<string>(globalDirectories.npm.packages);
expectType<string>(globalDirectories.npm.binaries);
expectType<string>(globalDirectories.yarn.prefix);
expectType<string>(globalDirectories.yarn.packages);
expectType<string>(globalDirectories.yarn.binaries);
6 changes: 4 additions & 2 deletions package.json
Expand Up @@ -13,10 +13,11 @@
"node": ">=8"
},
"scripts": {
"test": "xo && ava"
"test": "xo && ava && tsd"
},
"files": [
"index.js"
"index.js",
"index.d.ts"
],
"keywords": [
"global",
Expand Down Expand Up @@ -47,6 +48,7 @@
"devDependencies": {
"ava": "^1.4.1",
"execa": "^1.0.0",
"tsd": "^0.7.2",
"xo": "^0.24.0"
}
}
12 changes: 6 additions & 6 deletions readme.md
Expand Up @@ -15,25 +15,25 @@ $ npm install global-dirs
## Usage

```js
const globalDirs = require('global-dirs');
const globalDirectories = require('global-dirs');

console.log(globalDirs.npm.prefix);
console.log(globalDirectories.npm.prefix);
//=> '/usr/local'

console.log(globalDirs.npm.packages);
console.log(globalDirectories.npm.packages);
//=> '/usr/local/lib/node_modules'

console.log(globalDirs.npm.binaries);
console.log(globalDirectories.npm.binaries);
//=> '/usr/local/bin'

console.log(globalDirs.yarn.packages);
console.log(globalDirectories.yarn.packages);
//=> '/Users/sindresorhus/.config/yarn/global/node_modules'
```


## API

### globalDirs
### globalDirectories

#### npm
#### yarn
Expand Down
18 changes: 9 additions & 9 deletions test.js
@@ -1,27 +1,27 @@
import test from 'ava';
import execa from 'execa';
import globalDirs from '.';
import globalDirectories from '.';

console.log(globalDirs);
console.log(globalDirectories);

const npm = arguments_ => execa.stdout('npm', arguments_);

test('npm.prefix', async t => {
t.is(globalDirs.npm.prefix, await npm(['prefix', '--global']));
t.is(globalDirectories.npm.prefix, await npm(['prefix', '--global']));
});

test('npm.packages', async t => {
t.is(globalDirs.npm.packages, await npm(['root', '--global']));
t.is(globalDirectories.npm.packages, await npm(['root', '--global']));
});

test('npm.binaries', async t => {
t.is(globalDirs.npm.binaries, await npm(['bin', '--global']));
t.is(globalDirectories.npm.binaries, await npm(['bin', '--global']));
});

test('yarn', async t => {
await npm(['install', '--global', 'yarn']);
t.truthy(globalDirs.yarn);
t.truthy(globalDirs.yarn.prefix);
t.truthy(globalDirs.yarn.packages);
t.truthy(globalDirs.yarn.binaries);
t.truthy(globalDirectories.yarn);
t.truthy(globalDirectories.yarn.prefix);
t.truthy(globalDirectories.yarn.packages);
t.truthy(globalDirectories.yarn.binaries);
});

0 comments on commit 0aae4d6

Please sign in to comment.