PHP 8.2.30
Preview: pkg.js Size: 3.60 KB
/proc/thread-self/root/opt/alt/alt-nodejs24/root/lib/node_modules/npm/lib/commands/pkg.js

const { output } = require('proc-log')
const PackageJson = require('@npmcli/package-json')
const BaseCommand = require('../base-cmd.js')
const Queryable = require('../utils/queryable.js')

class Pkg extends BaseCommand {
  static description = 'Manages your package.json'
  static name = 'pkg'
  static usage = [
    'set <key>=<value> [<key>=<value> ...]',
    'get [<key> [<key> ...]]',
    'delete <key> [<key> ...]',
    'set [<array>[<index>].<key>=<value> ...]',
    'set [<array>[].<key>=<value> ...]',
    'fix',
  ]

  static params = [
    'force',
    'json',
    'workspace',
    'workspaces',
  ]

  static workspaces = true
  static ignoreImplicitWorkspace = false

  async exec (args, { path = this.npm.localPrefix, workspace } = {}) {
    if (this.npm.global) {
      throw Object.assign(
        new Error(`There's no package.json file to manage on global mode`),
        { code: 'EPKGGLOBAL' }
      )
    }

    const [cmd, ..._args] = args
    switch (cmd) {
      case 'get':
        return this.get(_args, { path, workspace })
      case 'set':
        return this.set(_args, { path, workspace }).then(p => p.save())
      case 'delete':
        return this.delete(_args, { path, workspace }).then(p => p.save())
      case 'fix':
        return PackageJson.fix(path).then(p => p.save())
      default:
        throw this.usageError()
    }
  }

  async execWorkspaces (args) {
    await this.setWorkspaces()
    for (const [workspace, path] of this.workspaces.entries()) {
      await this.exec(args, { path, workspace })
    }
  }

  async get (args, { path, workspace }) {
    this.npm.config.set('json', true)
    const pkgJson = await PackageJson.load(path)

    let result = pkgJson.content

    if (args.length) {
      result = new Queryable(result).query(args)
      // in case there's only a single argument and a single result from the query
      // just prints that one element to stdout.
      // TODO(BREAKING_CHANGE): much like other places where we unwrap single
      // item arrays this should go away. it makes the behavior unknown for users
      // who don't already know the shape of the data.
      if (Object.keys(result).length === 1 && args.length === 1) {
        result = result[args]
      }
    }

    // The display layer is responsible for calling JSON.stringify on the result
    // TODO: https://github.com/npm/cli/issues/5508 a raw mode has been requested similar
    // to jq -r. If that was added then this method should no longer set `json:true` all the time
    output.buffer(workspace ? { [workspace]: result } : result)
  }

  async set (args, { path }) {
    const setError = () =>
      this.usageError('npm pkg set expects a key=value pair of args.')

    if (!args.length) {
      throw setError()
    }

    const force = this.npm.config.get('force')
    const json = this.npm.config.get('json')
    const pkgJson = await PackageJson.load(path)
    const q = new Queryable(pkgJson.content)
    for (const arg of args) {
      const [key, ...rest] = arg.split('=')
      const value = rest.join('=')
      if (!key || !value) {
        throw setError()
      }

      q.set(key, json ? JSON.parse(value) : value, { force })
    }

    return pkgJson.update(q.toJSON())
  }

  async delete (args, { path }) {
    const setError = () =>
      this.usageError('npm pkg delete expects key args.')

    if (!args.length) {
      throw setError()
    }

    const pkgJson = await PackageJson.load(path)
    const q = new Queryable(pkgJson.content)
    for (const key of args) {
      if (!key) {
        throw setError()
      }

      q.delete(key)
    }

    return pkgJson.update(q.toJSON())
  }
}

module.exports = Pkg

Directory Contents

Dirs: 0 × Files: 67

Name Size Perms Modified Actions
6.17 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.29 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.14 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
847 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
11.52 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
4.24 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
8.90 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
11.49 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.43 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
2.43 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
8.01 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
5.52 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
449 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
10.06 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.76 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.42 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.58 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
2.16 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
634 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
6.46 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
577 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
5.53 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.67 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
7.07 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
373 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
370 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
5.12 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
5.27 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
234 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.29 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.42 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
16.80 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.98 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
7.95 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
5.95 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
2.73 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
873 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.60 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
309 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
10.45 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
799 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
9.52 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.75 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
2.19 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.24 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
303 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
295 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
6.27 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
4.48 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.83 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
671 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
2.65 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.88 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.03 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
293 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
288 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
4.36 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
288 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
7.96 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
302 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.52 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
5.40 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
183 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download
1.74 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
3.54 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
13.58 KB lrw-r--r-- 2026-03-17 12:21:19
Edit Download
527 B lrw-r--r-- 2026-03-17 12:21:19
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).