From 004d0aaa7b5afded6b1ec34fda98e2ce181ac7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Egill=20Sveinbj=C3=B6rnsson?= Date: Tue, 15 Sep 2020 15:17:20 +0200 Subject: [PATCH] fix: support nohoist in yarn workspaces --- packages/utils/src/index.js | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/utils/src/index.js b/packages/utils/src/index.js index 577e6b17..37aa3011 100644 --- a/packages/utils/src/index.js +++ b/packages/utils/src/index.js @@ -9,11 +9,41 @@ const minimatch = require("minimatch"); const isCI = !!process.env.CI; +// Supports workspaces using nohoist +// https://classic.yarnpkg.com/blog/2018/02/15/nohoist/ +const getYarnPackages = (workspaces) => { + // No workspaces + if (!workspaces) { + return []; + } + + try { + // "workspaces": ["packages/*"], + if (Array.isArray(workspaces)) { + return workspaces; + } + + // "workspaces": { + // "packages": ["packages/*"], + // }, + if (Array.isArray(workspaces.packages)) { + return workspaces.packages; + } + } catch (e) { + // Ignore, returns empty array below + } + + // Invalid format + return []; +}; + const pkg = importCwd("./package.json"); const findPkgs = (g) => globby.sync(`${g}/package.json`); const reducePkgs = (acc, curr) => acc.concat(curr.map((c) => c.slice(0, -13))); const lerna = importCwd.silent("./lerna.json"); -const workspaces = (pkg.workspaces || []).map(findPkgs).reduce(reducePkgs, []); +const workspaces = getYarnPackages(pkg.workspaces) + .map(findPkgs) + .reduce(reducePkgs, []); const lernaPackages = ((lerna && lerna.packages) || []) .map(findPkgs) .reduce(reducePkgs, []);