PHP 8.2.30
Preview: pkg.js Size: 3.56 KB
/proc/thread-self/root/proc/self/root/opt/alt/alt-nodejs20/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 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) {
        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.04 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.29 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.15 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
847 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
7.12 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
4.22 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
8.90 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
11.18 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.41 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.13 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
8.14 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.52 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
449 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
10.10 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.76 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.42 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.58 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.16 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
634 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
6.46 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
577 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.52 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.66 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.37 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
6.85 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
373 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
370 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.15 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.30 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
234 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.29 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.42 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
16.81 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
4.02 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
7.70 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.85 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.60 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
873 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.56 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
335 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
10.57 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
799 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
7.19 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.51 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.19 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.25 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
310 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
295 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
6.04 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
4.51 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.83 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
671 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.65 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.87 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.03 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
300 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
295 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
4.36 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
295 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
6.02 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.52 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.27 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
183 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.72 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.54 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
12.80 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
527 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download

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