https://github.com/unjs/pkg-types
Node.js utilities and TypeScript definitions for package.json and tsconfig.json
https://github.com/unjs/pkg-types
Last synced: 10 months ago
JSON representation
Node.js utilities and TypeScript definitions for package.json and tsconfig.json
- Host: GitHub
- URL: https://github.com/unjs/pkg-types
- Owner: unjs
- License: other
- Created: 2021-10-13T18:44:40.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-01-09T12:45:23.000Z (about 1 year ago)
- Last Synced: 2025-01-10T14:12:08.227Z (about 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 757 KB
- Stars: 253
- Watchers: 7
- Forks: 17
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-e18e - pkg-types - TypeScript types and utilities for package.json files. (Utilities / Data Structures)
README
# pkg-types
[](https://npmjs.com/package/pkg-types)
[](https://npm.chart.dev/pkg-types)
[](https://codecov.io/gh/unjs/pkg-types)
Node.js utilities and TypeScript definitions for `package.json` and `tsconfig.json`.
## Install
```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
```
## 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`, `bun.lockb`, `bun.lock`) or throws an error.
```js
import { resolveLockFile } from "pkg-types";
const lockfile = await resolveLockFile(".");
```
### `findWorkspaceDir`
Try to detect workspace dir by in order:
1. Farthest workspace file (`pnpm-workspace.yaml`, `lerna.json`, `turbo.json`, `rush.json`)
2. Closest `.git/config` file
3. Farthest lockfile
4. Farthest `package.json` file
If fails, throws an error.
```js
import { findWorkspaceDir } from "pkg-types";
const workspaceDir = await findWorkspaceDir(".");
```
### `resolveGitConfig`
Finds closest `.git/config` file.
```js
import { resolveGitConfig } from "pkg-types";
const gitConfig = await resolveGitConfig(".")
```
### `readGitConfig`
Finds and reads closest `.git/config` file into a JS object.
```js
import { readGitConfig } from "pkg-types";
const gitConfigObj = await readGitConfig(".")
```
### `writeGitConfig`
Stringifies git config object into INI text format and writes it to a file.
```js
import { writeGitConfig } from "pkg-types";
await writeGitConfig(".git/config", gitConfigObj)
```
### `parseGitConfig`
Parses a git config file in INI text format into a JavaScript object.
```js
import { parseGitConfig } from "pkg-types";
const gitConfigObj = parseGitConfig(gitConfigINI)
```
### `stringifyGitConfig`
Stringifies a git config object into a git config file INI text format.
```js
import { stringifyGitConfig } from "pkg-types";
const gitConfigINI = stringifyGitConfig(gitConfigObj)
```
## 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, GitConfig } 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({})
```
```js
import type { defineGitConfig } from 'pkg-types'
const gitConfig = defineGitConfig({})
```
## Alternatives
- [dominikg/tsconfck](https://github.com/dominikg/tsconfck)
## License
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) 💛