From f2c3a92fe41b6fdc5d11269f0f2c3e27761b4c85 Mon Sep 17 00:00:00 2001 From: Daniel Stockman Date: Sat, 5 Oct 2019 15:55:01 -0700 Subject: [PATCH] feat(filter-options): Rename `--include-filtered-*` options --- commands/add/README.md | 2 +- commands/add/__tests__/add-command.test.js | 4 +- commands/add/index.js | 4 +- commands/bootstrap/README.md | 2 +- core/filter-options/README.md | 8 ++-- .../__tests__/get-filtered-packages.test.js | 14 +++--- core/filter-options/index.js | 44 +++++++++++++++++-- .../lib/get-filtered-packages.js | 14 +++--- core/project/lib/deprecate-config.js | 12 +++++ 9 files changed, 77 insertions(+), 27 deletions(-) diff --git a/commands/add/README.md b/commands/add/README.md index 4668d88f7d..55b6c95260 100644 --- a/commands/add/README.md +++ b/commands/add/README.md @@ -21,7 +21,7 @@ If no `version` specifier is provided, it defaults to the `latest` dist-tag, jus ## Options -`lerna add` respects the `--ignore`, `--scope` and `--include-filtered-dependencies` flags (see [Filter Flags](https://www.npmjs.com/package/@lerna/filter-options)). +`lerna add` respects the `--ignore`, `--scope`, and `--include-dependencies` flags (see [Filter Flags](https://www.npmjs.com/package/@lerna/filter-options)). ### `--dev` diff --git a/commands/add/__tests__/add-command.test.js b/commands/add/__tests__/add-command.test.js index 3f8fc39ae3..c16a16665f 100644 --- a/commands/add/__tests__/add-command.test.js +++ b/commands/add/__tests__/add-command.test.js @@ -291,8 +291,8 @@ describe("AddCommand", () => { private: undefined, since: undefined, excludeDependents: undefined, - includeFilteredDependents: undefined, - includeFilteredDependencies: undefined, + includeDependents: undefined, + includeDependencies: undefined, }) ); }); diff --git a/commands/add/index.js b/commands/add/index.js index b75074189e..cc7fce392b 100644 --- a/commands/add/index.js +++ b/commands/add/index.js @@ -106,8 +106,8 @@ class AddCommand extends Command { private: undefined, since: undefined, excludeDependents: undefined, - includeFilteredDependents: undefined, - includeFilteredDependencies: undefined, + includeDependents: undefined, + includeDependencies: undefined, }); return bootstrap(argv); diff --git a/commands/bootstrap/README.md b/commands/bootstrap/README.md index b71832cc78..6063de9ec4 100644 --- a/commands/bootstrap/README.md +++ b/commands/bootstrap/README.md @@ -20,7 +20,7 @@ When run, this command will: 3. `npm run prepublish` in all bootstrapped packages (unless `--ignore-prepublish` is passed). 4. `npm run prepare` in all bootstrapped packages. -`lerna bootstrap` respects the `--ignore`, `--scope` and `--include-filtered-dependencies` flags (see [Filter Flags](https://www.npmjs.com/package/@lerna/filter-options)). +`lerna bootstrap` respects the `--ignore`, `--scope`, and `--include-dependencies` flags (see [Filter Flags](https://www.npmjs.com/package/@lerna/filter-options)). Pass extra arguments to npm client by placing them after `--`: diff --git a/core/filter-options/README.md b/core/filter-options/README.md index 016aa18044..570a9614de 100644 --- a/core/filter-options/README.md +++ b/core/filter-options/README.md @@ -57,11 +57,11 @@ Exclude all transitive dependents when running a command with `--since`, overrid This flag has no effect without `--since`, and will throw an error in that case. -### `--include-filtered-dependents` +### `--include-dependents` Include all transitive dependents when running a command regardless of `--scope`, `--ignore`, or `--since`. -### `--include-filtered-dependencies` +### `--include-dependencies` Include all transitive dependencies when running a command regardless of `--scope`, `--ignore`, or `--since`. @@ -75,12 +75,12 @@ Ensures that all dependencies (and dev dependencies) of any scoped packages (eit This is useful for situations where you want to "set up" a single package that relies on other packages being set up. ```sh -$ lerna bootstrap --scope my-component --include-filtered-dependencies +$ lerna bootstrap --scope my-component --include-dependencies # my-component and all of its dependencies will be bootstrapped ``` ```sh -$ lerna bootstrap --scope "package-*" --ignore "package-util-*" --include-filtered-dependencies +$ lerna bootstrap --scope "package-*" --ignore "package-util-*" --include-dependencies # all packages matching "package-util-*" will be ignored unless they are # depended upon by a package whose name matches "package-*" ``` diff --git a/core/filter-options/__tests__/get-filtered-packages.test.js b/core/filter-options/__tests__/get-filtered-packages.test.js index cdafdcaa6e..456abd8be1 100644 --- a/core/filter-options/__tests__/get-filtered-packages.test.js +++ b/core/filter-options/__tests__/get-filtered-packages.test.js @@ -184,21 +184,21 @@ test("--exclude-dependents", async () => { ); }); -test("--exclude-dependents conflicts with --include-filtered-dependents", async () => { +test("--exclude-dependents conflicts with --include-dependents", async () => { try { - parseOptions("--exclude-dependents", "--include-filtered-dependents"); + parseOptions("--exclude-dependents", "--include-dependents"); } catch (err) { expect(err.message).toMatch("exclude-dependents"); - expect(err.message).toMatch("include-filtered-dependents"); + expect(err.message).toMatch("include-dependents"); } expect.hasAssertions(); }); -test("--include-filtered-dependents", async () => { +test("--include-dependents", async () => { const packageGraph = await buildGraph(cwd); const execOpts = { cwd }; - const options = parseOptions("--scope", "package-1", "--include-filtered-dependents"); + const options = parseOptions("--scope", "package-1", "--include-dependents"); const result = await getFilteredPackages(packageGraph, execOpts, options); @@ -206,10 +206,10 @@ test("--include-filtered-dependents", async () => { expect(collectUpdates).not.toHaveBeenCalled(); }); -test("--include-filtered-dependencies", async () => { +test("--include-dependencies", async () => { const packageGraph = await buildGraph(cwd); const execOpts = { cwd }; - const options = parseOptions("--scope", "package-3", "--include-filtered-dependencies"); + const options = parseOptions("--scope", "package-3", "--include-dependencies"); const result = await getFilteredPackages(packageGraph, execOpts, options); diff --git a/core/filter-options/index.js b/core/filter-options/index.js index 16f027a3dc..9a5e9bd836 100644 --- a/core/filter-options/index.js +++ b/core/filter-options/index.js @@ -1,5 +1,6 @@ "use strict"; +const log = require("npmlog"); const dedent = require("dedent"); const getFilteredPackages = require("./lib/get-filtered-packages"); @@ -40,10 +41,10 @@ function filterOptions(yargs) { Exclude all transitive dependents when running a command with --since, overriding the default "changed" algorithm. `, - conflicts: "include-filtered-dependents", + conflicts: "include-dependents", type: "boolean", }, - "include-filtered-dependents": { + "include-dependents": { describe: dedent` Include all transitive dependents when running a command regardless of --scope, --ignore, or --since. @@ -51,7 +52,7 @@ function filterOptions(yargs) { conflicts: "exclude-dependents", type: "boolean", }, - "include-filtered-dependencies": { + "include-dependencies": { describe: dedent` Include all transitive dependencies when running a command regardless of --scope, --ignore, or --since. @@ -65,5 +66,40 @@ function filterOptions(yargs) { }, }; - return yargs.options(opts).group(Object.keys(opts), "Filter Options:"); + return yargs + .options(opts) + .group(Object.keys(opts), "Filter Options:") + .option("include-filtered-dependents", { + // TODO: remove in next major release + hidden: true, + conflicts: ["exclude-dependents", "include-dependents"], + type: "boolean", + }) + .option("include-filtered-dependencies", { + // TODO: remove in next major release + hidden: true, + conflicts: "include-dependencies", + type: "boolean", + }) + .check(argv => { + /* eslint-disable no-param-reassign */ + if (argv.includeFilteredDependents) { + argv.includeDependents = true; + argv["include-dependents"] = true; + delete argv.includeFilteredDependents; + delete argv["include-filtered-dependents"]; + log.warn("deprecated", "--include-filtered-dependents has been renamed --include-dependents"); + } + + if (argv.includeFilteredDependencies) { + argv.includeDependencies = true; + argv["include-dependencies"] = true; + delete argv.includeFilteredDependencies; + delete argv["include-filtered-dependencies"]; + log.warn("deprecated", "--include-filtered-dependencies has been renamed --include-dependencies"); + } + /* eslint-enable no-param-reassign */ + + return argv; + }); } diff --git a/core/filter-options/lib/get-filtered-packages.js b/core/filter-options/lib/get-filtered-packages.js index 1e8f65cea1..de6dfba54d 100644 --- a/core/filter-options/lib/get-filtered-packages.js +++ b/core/filter-options/lib/get-filtered-packages.js @@ -14,8 +14,10 @@ const FilterConfig = figgyPudding({ since: {}, continueIfNoMatch: {}, excludeDependents: {}, - includeFilteredDependents: {}, - includeFilteredDependencies: {}, + includeDependents: {}, + includeDependencies: {}, + includeFilteredDependents: "includeDependents", + includeFilteredDependencies: "includeDependencies", log: { default: npmlog }, }); @@ -58,14 +60,14 @@ function getFilteredPackages(packageGraph, execOpts, opts) { ); } - if (options.includeFilteredDependents) { - options.log.notice("filter", "including filtered dependents"); + if (options.includeDependents) { + options.log.notice("filter", "including dependents"); chain = chain.then(filteredPackages => packageGraph.addDependents(filteredPackages)); } - if (options.includeFilteredDependencies) { - options.log.notice("filter", "including filtered dependencies"); + if (options.includeDependencies) { + options.log.notice("filter", "including dependencies"); chain = chain.then(filteredPackages => packageGraph.addDependencies(filteredPackages)); } diff --git a/core/project/lib/deprecate-config.js b/core/project/lib/deprecate-config.js index e28a547226..c3865b87be 100644 --- a/core/project/lib/deprecate-config.js +++ b/core/project/lib/deprecate-config.js @@ -6,6 +6,18 @@ const path = require("path"); module.exports = compose( // add new predicates HERE + remap("command.add.includeFilteredDependencies", "command.add.includeDependencies", { alsoRoot: true }), + remap("command.add.includeFilteredDependents", "command.add.includeDependents", { alsoRoot: true }), + remap("command.bootstrap.includeFilteredDependencies", "command.bootstrap.includeDependencies"), + remap("command.bootstrap.includeFilteredDependents", "command.bootstrap.includeDependents"), + remap("command.clean.includeFilteredDependencies", "command.clean.includeDependencies"), + remap("command.clean.includeFilteredDependents", "command.clean.includeDependents"), + remap("command.exec.includeFilteredDependencies", "command.exec.includeDependencies"), + remap("command.exec.includeFilteredDependents", "command.exec.includeDependents"), + remap("command.list.includeFilteredDependencies", "command.list.includeDependencies"), + remap("command.list.includeFilteredDependents", "command.list.includeDependents"), + remap("command.run.includeFilteredDependencies", "command.run.includeDependencies"), + remap("command.run.includeFilteredDependents", "command.run.includeDependents"), remap("command.version.githubRelease", "command.version.createRelease", { toValue: value => value && "github", }),