diff --git a/package-lock.json b/package-lock.json index 761b7a99bb..ea2baedf2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -972,7 +972,7 @@ "@lerna/listable": { "version": "file:utils/listable", "requires": { - "@lerna/batch-packages": "file:utils/batch-packages", + "@lerna/query-graph": "file:utils/query-graph", "chalk": "^2.3.1", "columnify": "^1.5.4" } diff --git a/utils/listable/__tests__/listable-format.test.js b/utils/listable/__tests__/listable-format.test.js index 0eb6fd8ff7..93a091c690 100644 --- a/utils/listable/__tests__/listable-format.test.js +++ b/utils/listable/__tests__/listable-format.test.js @@ -1,12 +1,15 @@ "use strict"; const chalk = require("chalk"); -const path = require("path"); const tempy = require("tempy"); -const Package = require("@lerna/package"); +const Tacks = require("tacks"); + +const Project = require("@lerna/project"); const loggingOutput = require("@lerna-test/logging-output"); const listable = require(".."); +const { File, Dir } = Tacks; + // keep snapshots stable cross-platform chalk.enabled = false; @@ -30,24 +33,49 @@ describe("listable.format()", () => { const formatWithOptions = opts => listable.format(packages, Object.assign({ _: ["ls"] }, opts)); - beforeAll(() => { + const fixture = new Tacks( + Dir({ + "lerna.json": File({ + version: "independent", + packages: ["pkgs/*"], + }), + "package.json": File({ + name: "listable-format-test", + }), + pkgs: Dir({ + "pkg-1": Dir({ + "package.json": File({ + name: "pkg-1", + version: "1.0.0", + dependencies: { "pkg-2": "file:../pkg-2" }, + }), + }), + "pkg-2": Dir({ + "package.json": File({ + name: "pkg-2", + // version: "2.0.0", + devDependencies: { "pkg-3": "file:../pkg-3" }, + }), + }), + "pkg-3": Dir({ + "package.json": File({ + name: "pkg-3", + version: "3.0.0", + dependencies: { "pkg-2": "file:../pkg-2" }, + private: true, + }), + }), + }), + }) + ); + + beforeAll(async () => { const cwd = tempy.directory(); + + fixture.create(cwd); process.chdir(cwd); - packages = [ - new Package( - { name: "pkg-1", version: "1.0.0", dependencies: { "pkg-2": "file:../pkg-2" } }, - path.join(cwd, "/pkgs/pkg-1") - ), - new Package( - { name: "pkg-2", devDependencies: { "pkg-3": "file:../pkg-3" } }, - path.join(cwd, "/pkgs/pkg-2") - ), - new Package( - { name: "pkg-3", version: "3.0.0", dependencies: { "pkg-2": "file:../pkg-2" }, private: true }, - path.join(cwd, "/pkgs/pkg-3") - ), - ]; + packages = await Project.getPackages(cwd); }); describe("renders", () => { @@ -214,8 +242,8 @@ pkg-1 expect(loggingOutput("warn")).toContainEqual(expect.stringContaining("pkg-2 -> pkg-3 -> pkg-2")); expect(text).toMatchInlineSnapshot(` pkg-2 -pkg-3 (PRIVATE) pkg-1 +pkg-3 (PRIVATE) `); }); }); diff --git a/utils/listable/lib/listable-format.js b/utils/listable/lib/listable-format.js index 72b80c3eed..61fbd619e7 100644 --- a/utils/listable/lib/listable-format.js +++ b/utils/listable/lib/listable-format.js @@ -3,7 +3,7 @@ const chalk = require("chalk"); const columnify = require("columnify"); const path = require("path"); -const batchPackages = require("@lerna/batch-packages"); +const QueryGraph = require("@lerna/query-graph"); module.exports = listableFormat; @@ -40,18 +40,12 @@ function parseViewOptions(options) { }; } -function flatBatched(pkgList) { - // allow cycles, output needs to be usable for debugging circularity - const batches = batchPackages(pkgList, false, "allDependencies"); - - return batches.reduce((acc, batch) => acc.concat(batch), []); -} - function filterResultList(pkgList, viewOptions) { let result = viewOptions.showAll ? pkgList.slice() : pkgList.filter(pkg => !pkg.private); if (viewOptions.isTopological) { - result = flatBatched(result); + // allow cycles, output needs to be usable for debugging circularity + result = QueryGraph.toposort(result); } return result; diff --git a/utils/listable/package.json b/utils/listable/package.json index 8cdf8d90cc..2017272a56 100644 --- a/utils/listable/package.json +++ b/utils/listable/package.json @@ -29,7 +29,7 @@ "test": "echo \"Error: run tests from root\" && exit 1" }, "dependencies": { - "@lerna/batch-packages": "file:../batch-packages", + "@lerna/query-graph": "file:../query-graph", "chalk": "^2.3.1", "columnify": "^1.5.4" }