PHP 8.3.31
Preview: get-workspaces.js Size: 1.71 KB
/opt/alt/alt-nodejs24/root/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: 35

Name Size Perms Modified Actions
1.05 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.21 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.88 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.56 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.85 KB lrwxr-xr-x 2026-04-24 15:56:02
Edit Download
1.12 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
16.37 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
15.41 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.56 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.52 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
624 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
4.80 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.09 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
797 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.71 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.10 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
583 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
177 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
7.68 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.02 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
7.20 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.49 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
788 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
265 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
9.39 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.05 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
753 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
6.32 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.52 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.16 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.43 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.07 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
997 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1023 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
12.21 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download

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