142 lines
2.6 KiB
Plaintext
142 lines
2.6 KiB
Plaintext
|
# pkg-types
|
||
|
|
||
|
> Node.js utilities and TypeScript definitions for `package.json` and `tsconfig.json`
|
||
|
|
||
|
```
|
||
|
\⍩⃝/
|
||
|
```
|
||
|
|
||
|
## Install
|
||
|
|
||
|
```sh
|
||
|
# npm
|
||
|
npm i pkg-types
|
||
|
|
||
|
# yarn
|
||
|
yarn add pkg-types
|
||
|
|
||
|
# pnpm
|
||
|
pnpm add pkg-types
|
||
|
```
|
||
|
|
||
|
## 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 tsconfig = 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
|
||
|
|
||
|
MIT - Made with 💛
|