PHP 8.2.30
Preview: get-workspaces.js Size: 1.71 KB
/proc/thread-self/root/proc/self/root/opt/alt/alt-nodejs20/root/usr/lib/node_modules/npm/lib/utils/get-workspaces.js

const { resolve, relative } = require('node:path')
const mapWorkspaces = require('@npmcli/map-workspaces')
const { minimatch } = require('minimatch')
const pkgJson = require('@npmcli/package-json')

// minimatch wants forward slashes only for glob patterns
const globify = pattern => pattern.split('\\').join('/')

// Returns an Map of paths to workspaces indexed by workspace name
// { foo => '/path/to/foo' }
const getWorkspaces = async (filters, { path, includeWorkspaceRoot, relativeFrom }) => {
  // TODO we need a better error to be bubbled up here if this call fails
  const { content: pkg } = await pkgJson.normalize(path)
  const workspaces = await mapWorkspaces({ cwd: path, pkg })
  let res = new Map()
  if (includeWorkspaceRoot) {
    res.set(pkg.name, path)
  }

  if (!filters.length) {
    res = new Map([...res, ...workspaces])
  }

  for (const filterArg of filters) {
    for (const [workspaceName, workspacePath] of workspaces.entries()) {
      let relativePath = relative(relativeFrom, workspacePath)
      if (filterArg.startsWith('./')) {
        relativePath = `./${relativePath}`
      }
      const relativeFilter = relative(path, filterArg)
      if (filterArg === workspaceName
        || resolve(relativeFrom, filterArg) === workspacePath
        || minimatch(relativePath, `${globify(relativeFilter)}/*`)
        || minimatch(relativePath, `${globify(filterArg)}/*`)
      ) {
        res.set(workspaceName, workspacePath)
      }
    }
  }

  if (!res.size) {
    let msg = '!'
    if (filters.length) {
      msg = `:\n ${filters.reduce(
        (acc, filterArg) => `${acc} --workspace=${filterArg}`, '')}`
    }

    throw new Error(`No workspaces found${msg}`)
  }

  return res
}

module.exports = getWorkspaces

Directory Contents

Dirs: 0 × Files: 34

Name Size Perms Modified Actions
1.02 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.21 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.89 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.56 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.85 KB lrwxr-xr-x 2026-02-23 03:24:41
Edit Download
1.16 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
15.38 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
14.60 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.03 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.56 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
629 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
4.70 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.91 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
802 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.71 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.10 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
583 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
177 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
7.78 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.02 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.36 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
767 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
252 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
9.56 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1.91 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
886 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.65 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
5.21 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
4.59 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
3.47 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
2.07 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1013 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
1023 B lrw-r--r-- 2026-02-23 03:24:41
Edit Download
11.92 KB lrw-r--r-- 2026-02-23 03:24:41
Edit Download

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