File size: 3,837 Bytes
5befefa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# pkg-types

<!-- automd:badges color=yellow codecov -->

[![npm version](https://img.shields.io/npm/v/pkg-types?color=yellow)](https://npmjs.com/package/pkg-types)
[![npm downloads](https://img.shields.io/npm/dm/pkg-types?color=yellow)](https://npm.chart.dev/pkg-types)
[![codecov](https://img.shields.io/codecov/c/gh/unjs/pkg-types?color=yellow)](https://codecov.io/gh/unjs/pkg-types)

<!-- /automd -->

Node.js utilities and TypeScript definitions for `package.json` and `tsconfig.json`.

## Install

<!-- automd:pm-i -->

```sh

# ✨ Auto-detect

npx nypm install pkg-types



# npm

npm install pkg-types



# yarn

yarn add pkg-types



# pnpm

pnpm install pkg-types



# bun

bun install pkg-types



# deno

deno install pkg-types

```

<!-- /automd -->

## Usage

### `readPackageJSON`

```js

import { readPackageJSON } from "pkg-types";

const localPackageJson = await readPackageJSON();

// or

const packageJson = await readPackageJSON("/fully/resolved/path/to/folder");

```

### `writePackageJSON`

```js

import { writePackageJSON } from "pkg-types";



await writePackageJSON("path/to/package.json", pkg);

```

### `resolvePackageJSON`

```js

import { resolvePackageJSON } from "pkg-types";

const filename = await resolvePackageJSON();

// or

const packageJson = await resolvePackageJSON("/fully/resolved/path/to/folder");

```

### `readTSConfig`

```js

import { readTSConfig } from "pkg-types";

const tsconfig = await readTSConfig();

// or

const tsconfig2 = await readTSConfig("/fully/resolved/path/to/folder");

```

### `writeTSConfig`

```js

import { writeTSConfig } from "pkg-types";



await writeTSConfig("path/to/tsconfig.json", tsconfig);

```

### `resolveTSConfig`

```js

import { resolveTSConfig } from "pkg-types";

const filename = await resolveTSConfig();

// or

const tsconfig = await resolveTSConfig("/fully/resolved/path/to/folder");

```

### `resolveFile`

```js

import { resolveFile } from "pkg-types";

const filename = await resolveFile("README.md", {

  startingFrom: id,

  rootPattern: /^node_modules$/,

  matcher: (filename) => filename.endsWith(".md"),

});

```

### `resolveLockFile`

Find path to the lock file (`yarn.lock`, `package-lock.json`, `pnpm-lock.yaml`, `npm-shrinkwrap.json`) or throws an error.

```js

import { resolveLockFile } from "pkg-types";

const lockfile = await resolveLockFile(".");

```

### `findWorkspaceDir`

Try to detect workspace dir by in order:

1. Nearest `.git` directory
2. Farthest lockfile
3. Farthest `package.json` file

If fails, throws an error.

```js

import { findWorkspaceDir } from "pkg-types";

const workspaceDir = await findWorkspaceDir(".");

```

## Types

**Note:** In order to make types working, you need to install `typescript` as a devDependency.

You can directly use typed interfaces:

```ts

import type { TSConfig, PackageJSON } from "pkg-types";

```

You can also use define utils for type support for using in plain `.js` files and auto-complete in IDE.

```js

import type { definePackageJSON } from 'pkg-types'



const pkg = definePackageJSON({})

```

```js

import type { defineTSConfig } from 'pkg-types'



const pkg = defineTSConfig({})

```

## Alternatives

- [dominikg/tsconfck](https://github.com/dominikg/tsconfck)

## License

<!-- automd:contributors license=MIT author="pi0,danielroe" -->

Published under the [MIT](https://github.com/unjs/pkg-types/blob/main/LICENSE) license.
Made by [@pi0](https://github.com/pi0), [@danielroe](https://github.com/danielroe) and [community](https://github.com/unjs/pkg-types/graphs/contributors) 💛
<br><br>
<a href="https://github.com/unjs/pkg-types/graphs/contributors">
<img src="https://contrib.rocks/image?repo=unjs/pkg-types" />
</a>

<!-- /automd -->