@nx/devkit 17.3.0-beta.2 → 17.3.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/devkit",
3
- "version": "17.3.0-beta.2",
3
+ "version": "17.3.0-beta.4",
4
4
  "private": false,
5
5
  "description": "The Nx Devkit is used to customize Nx for different technologies and use cases. It contains many utility functions for reading and writing files, updating configuration, working with Abstract Syntax Trees(ASTs), and more. Learn more about [extending Nx by leveraging the Nx Devkit](https://nx.dev/extending-nx/intro/getting-started) on our docs.",
6
6
  "repository": {
@@ -34,7 +34,7 @@
34
34
  "tmp": "~0.2.1",
35
35
  "tslib": "^2.3.0",
36
36
  "semver": "7.5.3",
37
- "@nrwl/devkit": "17.3.0-beta.2"
37
+ "@nrwl/devkit": "17.3.0-beta.4"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "nx": ">= 16 <= 18"
@@ -13,9 +13,10 @@ import type { GeneratorCallback } from 'nx/src/config/misc-interfaces';
13
13
  * @param dependencies Dependencies to be added to the dependencies section of package.json
14
14
  * @param devDependencies Dependencies to be added to the devDependencies section of package.json
15
15
  * @param packageJsonPath Path to package.json
16
+ * @param keepExistingVersions If true, prevents existing dependencies from being bumped to newer versions
16
17
  * @returns Callback to install dependencies only if necessary, no-op otherwise
17
18
  */
18
- export declare function addDependenciesToPackageJson(tree: Tree, dependencies: Record<string, string>, devDependencies: Record<string, string>, packageJsonPath?: string): GeneratorCallback;
19
+ export declare function addDependenciesToPackageJson(tree: Tree, dependencies: Record<string, string>, devDependencies: Record<string, string>, packageJsonPath?: string, keepExistingVersions?: boolean): GeneratorCallback;
19
20
  /**
20
21
  * Remove Dependencies and Dev Dependencies from package.json
21
22
  *
@@ -86,9 +86,10 @@ function updateExistingDependenciesVersion(dependencies, existingDependencies =
86
86
  * @param dependencies Dependencies to be added to the dependencies section of package.json
87
87
  * @param devDependencies Dependencies to be added to the devDependencies section of package.json
88
88
  * @param packageJsonPath Path to package.json
89
+ * @param keepExistingVersions If true, prevents existing dependencies from being bumped to newer versions
89
90
  * @returns Callback to install dependencies only if necessary, no-op otherwise
90
91
  */
91
- function addDependenciesToPackageJson(tree, dependencies, devDependencies, packageJsonPath = 'package.json') {
92
+ function addDependenciesToPackageJson(tree, dependencies, devDependencies, packageJsonPath = 'package.json', keepExistingVersions) {
92
93
  const currentPackageJson = readJson(tree, packageJsonPath);
93
94
  /** Dependencies to install that are not met in dev dependencies */
94
95
  let filteredDependencies = filterExistingDependencies(dependencies, currentPackageJson.devDependencies);
@@ -96,6 +97,7 @@ function addDependenciesToPackageJson(tree, dependencies, devDependencies, packa
96
97
  let filteredDevDependencies = filterExistingDependencies(devDependencies, currentPackageJson.dependencies);
97
98
  // filtered dependencies should consist of:
98
99
  // - dependencies of the same type that are not present
100
+ // by default, filtered dependencies also include these (unless keepExistingVersions is true):
99
101
  // - dependencies of the same type that have greater version
100
102
  // - specified dependencies of the other type that have greater version and are already installed as current type
101
103
  filteredDependencies = {
@@ -106,8 +108,14 @@ function addDependenciesToPackageJson(tree, dependencies, devDependencies, packa
106
108
  ...updateExistingDependenciesVersion(filteredDevDependencies, currentPackageJson.devDependencies),
107
109
  ...updateExistingAltDependenciesVersion(dependencies, currentPackageJson.devDependencies),
108
110
  };
109
- filteredDependencies = removeLowerVersions(filteredDependencies, currentPackageJson.dependencies);
110
- filteredDevDependencies = removeLowerVersions(filteredDevDependencies, currentPackageJson.devDependencies);
111
+ if (keepExistingVersions) {
112
+ filteredDependencies = removeExistingDependencies(filteredDependencies, currentPackageJson.dependencies);
113
+ filteredDevDependencies = removeExistingDependencies(filteredDevDependencies, currentPackageJson.devDependencies);
114
+ }
115
+ else {
116
+ filteredDependencies = removeLowerVersions(filteredDependencies, currentPackageJson.dependencies);
117
+ filteredDevDependencies = removeLowerVersions(filteredDevDependencies, currentPackageJson.devDependencies);
118
+ }
111
119
  if (requiresAddingOfPackages(currentPackageJson, filteredDependencies, filteredDevDependencies)) {
112
120
  updateJson(tree, packageJsonPath, (json) => {
113
121
  json.dependencies = {
@@ -134,11 +142,19 @@ exports.addDependenciesToPackageJson = addDependenciesToPackageJson;
134
142
  **/
135
143
  function removeLowerVersions(incomingDeps, existingDeps) {
136
144
  return Object.keys(incomingDeps).reduce((acc, d) => {
137
- if (existingDeps?.[d] &&
138
- !isIncomingVersionGreater(incomingDeps[d], existingDeps[d])) {
139
- return acc;
145
+ if (!existingDeps?.[d] ||
146
+ isIncomingVersionGreater(incomingDeps[d], existingDeps[d])) {
147
+ acc[d] = incomingDeps[d];
148
+ }
149
+ return acc;
150
+ }, {});
151
+ }
152
+ function removeExistingDependencies(incomingDeps, existingDeps) {
153
+ return Object.keys(incomingDeps).reduce((acc, d) => {
154
+ if (!existingDeps?.[d]) {
155
+ acc[d] = incomingDeps[d];
140
156
  }
141
- return { ...acc, [d]: incomingDeps[d] };
157
+ return acc;
142
158
  }, {});
143
159
  }
144
160
  /**