$46 GRAYBYTE WORDPRESS FILE MANAGER $13

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/alt/alt-nodejs19/root/usr/lib/node_modules/npm/lib/commands/

HOME
Current File : /opt/alt/alt-nodejs19/root/usr/lib/node_modules/npm/lib/commands//outdated.js
const os = require('os')
const { resolve } = require('path')
const pacote = require('pacote')
const table = require('text-table')
const npa = require('npm-package-arg')
const pickManifest = require('npm-pick-manifest')
const localeCompare = require('@isaacs/string-locale-compare')('en')

const Arborist = require('@npmcli/arborist')

const ansiTrim = require('../utils/ansi-trim.js')
const ArboristWorkspaceCmd = require('../arborist-cmd.js')

class Outdated extends ArboristWorkspaceCmd {
  static description = 'Check for outdated packages'
  static name = 'outdated'
  static usage = ['[<package-spec> ...]']
  static params = [
    'all',
    'json',
    'long',
    'parseable',
    'global',
    'workspace',
  ]

  async exec (args) {
    const global = resolve(this.npm.globalDir, '..')
    const where = this.npm.global
      ? global
      : this.npm.prefix

    const arb = new Arborist({
      ...this.npm.flatOptions,
      path: where,
    })

    this.edges = new Set()
    this.list = []
    this.tree = await arb.loadActual()

    if (this.workspaceNames && this.workspaceNames.length) {
      this.filterSet =
        arb.workspaceDependencySet(
          this.tree,
          this.workspaceNames,
          this.npm.flatOptions.includeWorkspaceRoot
        )
    } else if (!this.npm.flatOptions.workspacesEnabled) {
      this.filterSet =
        arb.excludeWorkspacesDependencySet(this.tree)
    }

    if (args.length !== 0) {
      // specific deps
      for (let i = 0; i < args.length; i++) {
        const nodes = this.tree.inventory.query('name', args[i])
        this.getEdges(nodes, 'edgesIn')
      }
    } else {
      if (this.npm.config.get('all')) {
        // all deps in tree
        const nodes = this.tree.inventory.values()
        this.getEdges(nodes, 'edgesOut')
      }
      // top-level deps
      this.getEdges()
    }

    await Promise.all(Array.from(this.edges).map((edge) => {
      return this.getOutdatedInfo(edge)
    }))

    // sorts list alphabetically
    const outdated = this.list.sort((a, b) => localeCompare(a.name, b.name))

    if (outdated.length > 0) {
      process.exitCode = 1
    }

    // return if no outdated packages
    if (outdated.length === 0 && !this.npm.config.get('json')) {
      return
    }

    // display results
    if (this.npm.config.get('json')) {
      this.npm.output(this.makeJSON(outdated))
    } else if (this.npm.config.get('parseable')) {
      this.npm.output(this.makeParseable(outdated))
    } else {
      const outList = outdated.map(x => this.makePretty(x))
      const outHead = ['Package',
        'Current',
        'Wanted',
        'Latest',
        'Location',
        'Depended by',
      ]

      if (this.npm.config.get('long')) {
        outHead.push('Package Type', 'Homepage')
      }
      const outTable = [outHead].concat(outList)

      outTable[0] = outTable[0].map(heading => this.npm.chalk.underline(heading))

      const tableOpts = {
        align: ['l', 'r', 'r', 'r', 'l'],
        stringLength: s => ansiTrim(s).length,
      }
      this.npm.output(table(outTable, tableOpts))
    }
  }

  getEdges (nodes, type) {
    // when no nodes are provided then it should only read direct deps
    // from the root node and its workspaces direct dependencies
    if (!nodes) {
      this.getEdgesOut(this.tree)
      this.getWorkspacesEdges()
      return
    }

    for (const node of nodes) {
      type === 'edgesOut'
        ? this.getEdgesOut(node)
        : this.getEdgesIn(node)
    }
  }

  getEdgesIn (node) {
    for (const edge of node.edgesIn) {
      this.trackEdge(edge)
    }
  }

  getEdgesOut (node) {
    // TODO: normalize usage of edges and avoid looping through nodes here
    if (this.npm.global) {
      for (const child of node.children.values()) {
        this.trackEdge(child)
      }
    } else {
      for (const edge of node.edgesOut.values()) {
        this.trackEdge(edge)
      }
    }
  }

  trackEdge (edge) {
    const filteredOut =
      edge.from
        && this.filterSet
        && this.filterSet.size > 0
        && !this.filterSet.has(edge.from.target)

    if (filteredOut) {
      return
    }

    this.edges.add(edge)
  }

  getWorkspacesEdges (node) {
    if (this.npm.global) {
      return
    }

    for (const edge of this.tree.edgesOut.values()) {
      const workspace = edge
        && edge.to
        && edge.to.target
        && edge.to.target.isWorkspace

      if (workspace) {
        this.getEdgesOut(edge.to.target)
      }
    }
  }

  async getPackument (spec) {
    const packument = await pacote.packument(spec, {
      ...this.npm.flatOptions,
      fullMetadata: this.npm.config.get('long'),
      preferOnline: true,
    })
    return packument
  }

  async getOutdatedInfo (edge) {
    let alias = false
    try {
      alias = npa(edge.spec).subSpec
    } catch (err) {
      // ignore errors, no alias
    }
    const spec = npa(alias ? alias.name : edge.name)
    const node = edge.to || edge
    const { path, location } = node
    const { version: current } = node.package || {}

    const type = edge.optional ? 'optionalDependencies'
      : edge.peer ? 'peerDependencies'
      : edge.dev ? 'devDependencies'
      : 'dependencies'

    for (const omitType of this.npm.flatOptions.omit) {
      if (node[omitType]) {
        return
      }
    }

    // deps different from prod not currently
    // on disk are not included in the output
    if (edge.error === 'MISSING' && type !== 'dependencies') {
      return
    }

    try {
      const packument = await this.getPackument(spec)
      const expected = alias ? alias.fetchSpec : edge.spec
      // if it's not a range, version, or tag, skip it
      try {
        if (!npa(`${edge.name}@${edge.spec}`).registry) {
          return null
        }
      } catch (err) {
        return null
      }
      const wanted = pickManifest(packument, expected, this.npm.flatOptions)
      const latest = pickManifest(packument, '*', this.npm.flatOptions)

      if (
        !current ||
        current !== wanted.version ||
        wanted.version !== latest.version
      ) {
        const dependent = edge.from ?
          this.maybeWorkspaceName(edge.from)
          : 'global'

        this.list.push({
          name: alias ? edge.spec.replace('npm', edge.name) : edge.name,
          path,
          type,
          current,
          location,
          wanted: wanted.version,
          latest: latest.version,
          dependent,
          homepage: packument.homepage,
        })
      }
    } catch (err) {
      // silently catch and ignore ETARGET, E403 &
      // E404 errors, deps are just skipped
      if (!(
        err.code === 'ETARGET' ||
        err.code === 'E403' ||
        err.code === 'E404')
      ) {
        throw err
      }
    }
  }

  maybeWorkspaceName (node) {
    if (!node.isWorkspace) {
      return node.name
    }

    const humanOutput =
      !this.npm.config.get('json') && !this.npm.config.get('parseable')

    const workspaceName =
      humanOutput
        ? node.pkgid
        : node.name

    return humanOutput
      ? this.npm.chalk.green(workspaceName)
      : workspaceName
  }

  // formatting functions
  makePretty (dep) {
    const {
      current = 'MISSING',
      location = '-',
      homepage = '',
      name,
      wanted,
      latest,
      type,
      dependent,
    } = dep

    const columns = [name, current, wanted, latest, location, dependent]

    if (this.npm.config.get('long')) {
      columns[6] = type
      columns[7] = homepage
    }

    columns[0] = this.npm.chalk[current === wanted ? 'yellow' : 'red'](columns[0]) // current
    columns[2] = this.npm.chalk.green(columns[2]) // wanted
    columns[3] = this.npm.chalk.magenta(columns[3]) // latest

    return columns
  }

  // --parseable creates output like this:
  // <fullpath>:<name@wanted>:<name@installed>:<name@latest>:<dependedby>
  makeParseable (list) {
    return list.map(dep => {
      const {
        name,
        current,
        wanted,
        latest,
        path,
        dependent,
        type,
        homepage,
      } = dep
      const out = [
        path,
        name + '@' + wanted,
        current ? (name + '@' + current) : 'MISSING',
        name + '@' + latest,
        dependent,
      ]
      if (this.npm.config.get('long')) {
        out.push(type, homepage)
      }

      return out.join(':')
    }).join(os.EOL)
  }

  makeJSON (list) {
    const out = {}
    list.forEach(dep => {
      const {
        name,
        current,
        wanted,
        latest,
        path,
        type,
        dependent,
        homepage,
      } = dep
      out[name] = {
        current,
        wanted,
        latest,
        dependent,
        location: path,
      }
      if (this.npm.config.get('long')) {
        out[name].type = type
        out[name].homepage = homepage
      }
    })
    return JSON.stringify(out, null, 2)
  }
}
module.exports = Outdated

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
31 Aug 2024 8.02 AM
root / root
0755
access.js
6.079 KB
7 Dec 2023 1.07 AM
root / root
0644
adduser.js
1.318 KB
7 Dec 2023 1.07 AM
root / root
0644
audit.js
13.863 KB
7 Dec 2023 1.07 AM
root / root
0644
bugs.js
0.796 KB
7 Dec 2023 1.07 AM
root / root
0644
cache.js
7.072 KB
7 Dec 2023 1.07 AM
root / root
0644
ci.js
3.509 KB
7 Dec 2023 1.07 AM
root / root
0644
completion.js
8.734 KB
7 Dec 2023 1.07 AM
root / root
0644
config.js
10.037 KB
7 Dec 2023 1.07 AM
root / root
0644
dedupe.js
1.396 KB
7 Dec 2023 1.07 AM
root / root
0644
deprecate.js
2.029 KB
7 Dec 2023 1.07 AM
root / root
0644
diff.js
8.123 KB
7 Dec 2023 1.07 AM
root / root
0644
dist-tag.js
5.451 KB
7 Dec 2023 1.07 AM
root / root
0644
docs.js
0.437 KB
7 Dec 2023 1.07 AM
root / root
0644
doctor.js
11.512 KB
7 Dec 2023 1.07 AM
root / root
0644
edit.js
1.997 KB
7 Dec 2023 1.07 AM
root / root
0644
exec.js
2.542 KB
7 Dec 2023 1.07 AM
root / root
0644
explain.js
3.554 KB
7 Dec 2023 1.07 AM
root / root
0644
explore.js
2.305 KB
7 Dec 2023 1.07 AM
root / root
0644
find-dupes.js
0.607 KB
7 Dec 2023 1.07 AM
root / root
0644
fund.js
6.513 KB
7 Dec 2023 1.07 AM
root / root
0644
get.js
0.512 KB
7 Dec 2023 1.07 AM
root / root
0644
help-search.js
5.494 KB
7 Dec 2023 1.07 AM
root / root
0644
help.js
3.535 KB
7 Dec 2023 1.07 AM
root / root
0644
hook.js
3.77 KB
7 Dec 2023 1.07 AM
root / root
0644
init.js
6.902 KB
7 Dec 2023 1.07 AM
root / root
0644
install-ci-test.js
0.364 KB
7 Dec 2023 1.07 AM
root / root
0644
install-test.js
0.361 KB
7 Dec 2023 1.07 AM
root / root
0644
install.js
5.108 KB
7 Dec 2023 1.07 AM
root / root
0644
link.js
5.154 KB
7 Dec 2023 1.07 AM
root / root
0644
ll.js
0.229 KB
7 Dec 2023 1.07 AM
root / root
0644
login.js
1.315 KB
7 Dec 2023 1.07 AM
root / root
0644
logout.js
1.305 KB
7 Dec 2023 1.07 AM
root / root
0644
ls.js
16.729 KB
7 Dec 2023 1.07 AM
root / root
0644
org.js
4.144 KB
7 Dec 2023 1.07 AM
root / root
0644
outdated.js
8.762 KB
7 Dec 2023 1.07 AM
root / root
0644
owner.js
5.906 KB
7 Dec 2023 1.07 AM
root / root
0644
pack.js
2.373 KB
7 Dec 2023 1.07 AM
root / root
0644
ping.js
0.896 KB
7 Dec 2023 1.07 AM
root / root
0644
pkg.js
3.499 KB
7 Dec 2023 1.07 AM
root / root
0644
prefix.js
0.296 KB
7 Dec 2023 1.07 AM
root / root
0644
profile.js
11.188 KB
7 Dec 2023 1.07 AM
root / root
0644
prune.js
0.761 KB
7 Dec 2023 1.07 AM
root / root
0644
publish.js
6.503 KB
7 Dec 2023 1.07 AM
root / root
0644
query.js
2.9 KB
7 Dec 2023 1.07 AM
root / root
0644
rebuild.js
2.141 KB
7 Dec 2023 1.07 AM
root / root
0644
repo.js
1.242 KB
7 Dec 2023 1.07 AM
root / root
0644
restart.js
0.303 KB
7 Dec 2023 1.07 AM
root / root
0644
root.js
0.252 KB
7 Dec 2023 1.07 AM
root / root
0644
run-script.js
6.814 KB
7 Dec 2023 1.07 AM
root / root
0644
search.js
2.677 KB
7 Dec 2023 1.07 AM
root / root
0644
set.js
0.559 KB
7 Dec 2023 1.07 AM
root / root
0644
shrinkwrap.js
2.642 KB
7 Dec 2023 1.07 AM
root / root
0644
star.js
1.866 KB
7 Dec 2023 1.07 AM
root / root
0644
stars.js
1.027 KB
7 Dec 2023 1.07 AM
root / root
0644
start.js
0.293 KB
7 Dec 2023 1.07 AM
root / root
0644
stop.js
0.288 KB
7 Dec 2023 1.07 AM
root / root
0644
team.js
4.438 KB
7 Dec 2023 1.07 AM
root / root
0644
test.js
0.288 KB
7 Dec 2023 1.07 AM
root / root
0644
token.js
6.642 KB
7 Dec 2023 1.07 AM
root / root
0644
uninstall.js
1.506 KB
7 Dec 2023 1.07 AM
root / root
0644
unpublish.js
4.544 KB
7 Dec 2023 1.07 AM
root / root
0644
unstar.js
0.178 KB
7 Dec 2023 1.07 AM
root / root
0644
update.js
1.709 KB
7 Dec 2023 1.07 AM
root / root
0644
version.js
3.576 KB
7 Dec 2023 1.07 AM
root / root
0644
view.js
14.375 KB
7 Dec 2023 1.07 AM
root / root
0644
whoami.js
0.463 KB
7 Dec 2023 1.07 AM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF