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 💛
|