JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 10958543
  • Score
    100M100P100Q212448F
  • License MIT

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

Package Exports

    Readme

    pkg-types

    npm version npm downloads codecov

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

    Install

    # ✨ 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

    import { readPackageJSON } from "pkg-types";
    const localPackageJson = await readPackageJSON();
    // or
    const packageJson = await readPackageJSON("/fully/resolved/path/to/folder");

    writePackageJSON

    import { writePackageJSON } from "pkg-types";
    
    await writePackageJSON("path/to/package.json", pkg);

    resolvePackageJSON

    import { resolvePackageJSON } from "pkg-types";
    const filename = await resolvePackageJSON();
    // or
    const packageJson = await resolvePackageJSON("/fully/resolved/path/to/folder");

    readTSConfig

    import { readTSConfig } from "pkg-types";
    const tsconfig = await readTSConfig();
    // or
    const tsconfig2 = await readTSConfig("/fully/resolved/path/to/folder");

    writeTSConfig

    import { writeTSConfig } from "pkg-types";
    
    await writeTSConfig("path/to/tsconfig.json", tsconfig);

    resolveTSConfig

    import { resolveTSConfig } from "pkg-types";
    const filename = await resolveTSConfig();
    // or
    const tsconfig = await resolveTSConfig("/fully/resolved/path/to/folder");

    resolveFile

    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.

    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.

    import { findWorkspaceDir } from "pkg-types";
    const workspaceDir = await findWorkspaceDir(".");

    resolveGitConfig

    Finds closest .git/config file.

    import { resolveGitConfig } from "pkg-types";
    
    const gitConfig = await resolveGitConfig(".")

    readGitConfig

    Finds and reads closest .git/config file into a JS object.

    import { resolveGitConfig } from "pkg-types";
    
    const gitConfigObj = await readGitConfig(".")

    writeGitConfig

    Stringifies git config object into INI text format and writes it to a file.

    import { writeGitConfig } from "pkg-types";
    
    await writeGitConfig(".git/config", gitConfigObj)

    parseGitConfig

    Parses a git config file in INI text format into a JavaScript object.

    import { parseGitConfig } from "pkg-types";
    
    const gitConfigObj = parseGitConfig(gitConfigINI)

    stringifyGitConfig

    Stringifies a git config object into a git config file INI text format.

    import { parseGitConfig } 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:

    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.

    import type { definePackageJSON } from 'pkg-types'
    
    const pkg = definePackageJSON({})
    import type { defineTSConfig } from 'pkg-types'
    
    const pkg = defineTSConfig({})
    import type { defineGitConfig } from 'pkg-types'
    
    const gitConfig = defineGitConfig({})

    Alternatives

    License

    Published under the MIT license. Made by @pi0, @danielroe and community 💛