@nx/devkit 19.2.0-beta.3 → 19.2.0-beta.5
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": "19.2.0-beta.
|
3
|
+
"version": "19.2.0-beta.5",
|
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": {
|
@@ -36,7 +36,7 @@
|
|
36
36
|
"semver": "^7.5.3",
|
37
37
|
"yargs-parser": "21.1.1",
|
38
38
|
"minimatch": "9.0.3",
|
39
|
-
"@nrwl/devkit": "19.2.0-beta.
|
39
|
+
"@nrwl/devkit": "19.2.0-beta.5"
|
40
40
|
},
|
41
41
|
"peerDependencies": {
|
42
42
|
"nx": ">= 17 <= 20"
|
@@ -1,9 +1,10 @@
|
|
1
|
-
import { ProjectGraph, TargetConfiguration, Tree, CreateNodes } from 'nx/src/devkit-exports';
|
1
|
+
import { ProjectGraph, TargetConfiguration, Tree, CreateNodes, CreateNodesV2 } from 'nx/src/devkit-exports';
|
2
2
|
type PluginOptionsBuilder<T> = (targetName: string) => T;
|
3
3
|
type PostTargetTransformer = (targetConfiguration: TargetConfiguration, tree: Tree, projectDetails: {
|
4
4
|
projectName: string;
|
5
5
|
root: string;
|
6
6
|
}, inferredTargetConfiguration: TargetConfiguration) => TargetConfiguration;
|
7
7
|
type SkipTargetFilter = (targetConfiguration: TargetConfiguration) => [boolean, string];
|
8
|
-
export declare function migrateExecutorToPlugin<T>(tree: Tree, projectGraph: ProjectGraph, executor: string, pluginPath: string, pluginOptionsBuilder: PluginOptionsBuilder<T>, postTargetTransformer: PostTargetTransformer, createNodes:
|
8
|
+
export declare function migrateExecutorToPlugin<T>(tree: Tree, projectGraph: ProjectGraph, executor: string, pluginPath: string, pluginOptionsBuilder: PluginOptionsBuilder<T>, postTargetTransformer: PostTargetTransformer, createNodes: CreateNodesV2<T>, specificProjectToMigrate?: string, skipTargetFilter?: SkipTargetFilter): Promise<Map<string, Set<string>>>;
|
9
|
+
export declare function migrateExecutorToPluginV1<T>(tree: Tree, projectGraph: ProjectGraph, executor: string, pluginPath: string, pluginOptionsBuilder: PluginOptionsBuilder<T>, postTargetTransformer: PostTargetTransformer, createNodes: CreateNodes<T>, specificProjectToMigrate?: string, skipTargetFilter?: SkipTargetFilter): Promise<Map<string, Set<string>>>;
|
9
10
|
export {};
|
@@ -1,15 +1,16 @@
|
|
1
1
|
"use strict";
|
2
|
-
var _ExecutorToPluginMigrator_instances, _ExecutorToPluginMigrator_projectGraph, _ExecutorToPluginMigrator_executor, _ExecutorToPluginMigrator_pluginPath, _ExecutorToPluginMigrator_pluginOptionsBuilder, _ExecutorToPluginMigrator_postTargetTransformer, _ExecutorToPluginMigrator_skipTargetFilter, _ExecutorToPluginMigrator_specificProjectToMigrate, _ExecutorToPluginMigrator_nxJson, _ExecutorToPluginMigrator_targetDefaultsForExecutor, _ExecutorToPluginMigrator_targetAndProjectsToMigrate, _ExecutorToPluginMigrator_pluginToAddForTarget, _ExecutorToPluginMigrator_createNodes,
|
2
|
+
var _ExecutorToPluginMigrator_instances, _ExecutorToPluginMigrator_projectGraph, _ExecutorToPluginMigrator_executor, _ExecutorToPluginMigrator_pluginPath, _ExecutorToPluginMigrator_pluginOptionsBuilder, _ExecutorToPluginMigrator_postTargetTransformer, _ExecutorToPluginMigrator_skipTargetFilter, _ExecutorToPluginMigrator_specificProjectToMigrate, _ExecutorToPluginMigrator_nxJson, _ExecutorToPluginMigrator_targetDefaultsForExecutor, _ExecutorToPluginMigrator_targetAndProjectsToMigrate, _ExecutorToPluginMigrator_pluginToAddForTarget, _ExecutorToPluginMigrator_createNodes, _ExecutorToPluginMigrator_createNodesV2, _ExecutorToPluginMigrator_createNodesResultsForTargets, _ExecutorToPluginMigrator_init, _ExecutorToPluginMigrator_migrateTarget, _ExecutorToPluginMigrator_migrateProject, _ExecutorToPluginMigrator_mergeInputs, _ExecutorToPluginMigrator_pluginRequiresIncludes, _ExecutorToPluginMigrator_addPlugins, _ExecutorToPluginMigrator_getTargetAndProjectsToMigrate, _ExecutorToPluginMigrator_getTargetDefaultsForExecutor, _ExecutorToPluginMigrator_getCreatedTargetForProjectRoot, _ExecutorToPluginMigrator_getCreateNodesResults;
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
4
|
-
exports.migrateExecutorToPlugin = void 0;
|
4
|
+
exports.migrateExecutorToPluginV1 = exports.migrateExecutorToPlugin = void 0;
|
5
5
|
const tslib_1 = require("tslib");
|
6
6
|
const minimatch_1 = require("minimatch");
|
7
|
+
const node_assert_1 = require("node:assert");
|
7
8
|
const executor_options_utils_1 = require("../executor-options-utils");
|
8
9
|
const plugin_migration_utils_1 = require("./plugin-migration-utils");
|
9
10
|
const devkit_exports_1 = require("nx/src/devkit-exports");
|
10
11
|
const devkit_internals_1 = require("nx/src/devkit-internals");
|
11
12
|
class ExecutorToPluginMigrator {
|
12
|
-
constructor(tree, projectGraph, executor, pluginPath, pluginOptionsBuilder, postTargetTransformer, createNodes, specificProjectToMigrate, skipTargetFilter) {
|
13
|
+
constructor(tree, projectGraph, executor, pluginPath, pluginOptionsBuilder, postTargetTransformer, createNodes, createNodesV2, specificProjectToMigrate, skipTargetFilter) {
|
13
14
|
_ExecutorToPluginMigrator_instances.add(this);
|
14
15
|
_ExecutorToPluginMigrator_projectGraph.set(this, void 0);
|
15
16
|
_ExecutorToPluginMigrator_executor.set(this, void 0);
|
@@ -23,7 +24,7 @@ class ExecutorToPluginMigrator {
|
|
23
24
|
_ExecutorToPluginMigrator_targetAndProjectsToMigrate.set(this, void 0);
|
24
25
|
_ExecutorToPluginMigrator_pluginToAddForTarget.set(this, void 0);
|
25
26
|
_ExecutorToPluginMigrator_createNodes.set(this, void 0);
|
26
|
-
|
27
|
+
_ExecutorToPluginMigrator_createNodesV2.set(this, void 0);
|
27
28
|
_ExecutorToPluginMigrator_createNodesResultsForTargets.set(this, void 0);
|
28
29
|
this.tree = tree;
|
29
30
|
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_projectGraph, projectGraph, "f");
|
@@ -32,6 +33,7 @@ class ExecutorToPluginMigrator {
|
|
32
33
|
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_pluginOptionsBuilder, pluginOptionsBuilder, "f");
|
33
34
|
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_postTargetTransformer, postTargetTransformer, "f");
|
34
35
|
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_createNodes, createNodes, "f");
|
36
|
+
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_createNodesV2, createNodesV2, "f");
|
35
37
|
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_specificProjectToMigrate, specificProjectToMigrate, "f");
|
36
38
|
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_skipTargetFilter, skipTargetFilter ?? ((...args) => [false, '']), "f");
|
37
39
|
}
|
@@ -46,7 +48,7 @@ class ExecutorToPluginMigrator {
|
|
46
48
|
return tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_targetAndProjectsToMigrate, "f");
|
47
49
|
}
|
48
50
|
}
|
49
|
-
_ExecutorToPluginMigrator_projectGraph = new WeakMap(), _ExecutorToPluginMigrator_executor = new WeakMap(), _ExecutorToPluginMigrator_pluginPath = new WeakMap(), _ExecutorToPluginMigrator_pluginOptionsBuilder = new WeakMap(), _ExecutorToPluginMigrator_postTargetTransformer = new WeakMap(), _ExecutorToPluginMigrator_skipTargetFilter = new WeakMap(), _ExecutorToPluginMigrator_specificProjectToMigrate = new WeakMap(), _ExecutorToPluginMigrator_nxJson = new WeakMap(), _ExecutorToPluginMigrator_targetDefaultsForExecutor = new WeakMap(), _ExecutorToPluginMigrator_targetAndProjectsToMigrate = new WeakMap(), _ExecutorToPluginMigrator_pluginToAddForTarget = new WeakMap(), _ExecutorToPluginMigrator_createNodes = new WeakMap(),
|
51
|
+
_ExecutorToPluginMigrator_projectGraph = new WeakMap(), _ExecutorToPluginMigrator_executor = new WeakMap(), _ExecutorToPluginMigrator_pluginPath = new WeakMap(), _ExecutorToPluginMigrator_pluginOptionsBuilder = new WeakMap(), _ExecutorToPluginMigrator_postTargetTransformer = new WeakMap(), _ExecutorToPluginMigrator_skipTargetFilter = new WeakMap(), _ExecutorToPluginMigrator_specificProjectToMigrate = new WeakMap(), _ExecutorToPluginMigrator_nxJson = new WeakMap(), _ExecutorToPluginMigrator_targetDefaultsForExecutor = new WeakMap(), _ExecutorToPluginMigrator_targetAndProjectsToMigrate = new WeakMap(), _ExecutorToPluginMigrator_pluginToAddForTarget = new WeakMap(), _ExecutorToPluginMigrator_createNodes = new WeakMap(), _ExecutorToPluginMigrator_createNodesV2 = new WeakMap(), _ExecutorToPluginMigrator_createNodesResultsForTargets = new WeakMap(), _ExecutorToPluginMigrator_instances = new WeakSet(), _ExecutorToPluginMigrator_init = async function _ExecutorToPluginMigrator_init() {
|
50
52
|
const nxJson = (0, devkit_exports_1.readNxJson)(this.tree);
|
51
53
|
nxJson.plugins ??= [];
|
52
54
|
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_nxJson, nxJson, "f");
|
@@ -74,6 +76,9 @@ _ExecutorToPluginMigrator_projectGraph = new WeakMap(), _ExecutorToPluginMigrato
|
|
74
76
|
projectTarget = (0, devkit_internals_1.mergeTargetConfigurations)(projectTarget, tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_targetDefaultsForExecutor, "f"));
|
75
77
|
delete projectTarget.executor;
|
76
78
|
(0, plugin_migration_utils_1.deleteMatchingProperties)(projectTarget, createdTarget);
|
79
|
+
if (projectTarget.inputs && createdTarget.inputs) {
|
80
|
+
tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_instances, "m", _ExecutorToPluginMigrator_mergeInputs).call(this, projectTarget, createdTarget);
|
81
|
+
}
|
77
82
|
projectTarget = tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_postTargetTransformer, "f").call(this, projectTarget, this.tree, { projectName, root: projectFromGraph.data.root }, createdTarget);
|
78
83
|
if (projectTarget.options &&
|
79
84
|
Object.keys(projectTarget.options).length === 0) {
|
@@ -90,8 +95,44 @@ _ExecutorToPluginMigrator_projectGraph = new WeakMap(), _ExecutorToPluginMigrato
|
|
90
95
|
}
|
91
96
|
(0, devkit_exports_1.updateProjectConfiguration)(this.tree, projectName, projectConfig);
|
92
97
|
return `${projectFromGraph.data.root}/**/*`;
|
98
|
+
}, _ExecutorToPluginMigrator_mergeInputs = function _ExecutorToPluginMigrator_mergeInputs(target, inferredTarget) {
|
99
|
+
const isInputInferred = (input) => {
|
100
|
+
return inferredTarget.inputs.some((inferredInput) => {
|
101
|
+
try {
|
102
|
+
(0, node_assert_1.deepStrictEqual)(input, inferredInput);
|
103
|
+
return true;
|
104
|
+
}
|
105
|
+
catch {
|
106
|
+
return false;
|
107
|
+
}
|
108
|
+
});
|
109
|
+
};
|
110
|
+
if (target.inputs.every(isInputInferred)) {
|
111
|
+
delete target.inputs;
|
112
|
+
return;
|
113
|
+
}
|
114
|
+
const inferredTargetExternalDependencyInput = inferredTarget.inputs.find((i) => typeof i !== 'string' && 'externalDependencies' in i);
|
115
|
+
if (!inferredTargetExternalDependencyInput) {
|
116
|
+
// plugins should normally have an externalDependencies input, but if it
|
117
|
+
// doesn't, there's nothing to merge
|
118
|
+
return;
|
119
|
+
}
|
120
|
+
const targetExternalDependencyInput = target.inputs.find((i) => typeof i !== 'string' && 'externalDependencies' in i);
|
121
|
+
if (!targetExternalDependencyInput) {
|
122
|
+
// the target doesn't have an externalDependencies input, so we can just
|
123
|
+
// add the inferred one
|
124
|
+
target.inputs.push(inferredTargetExternalDependencyInput);
|
125
|
+
}
|
126
|
+
else {
|
127
|
+
// the target has an externalDependencies input, so we need to merge them
|
128
|
+
targetExternalDependencyInput.externalDependencies = Array.from(new Set([
|
129
|
+
...targetExternalDependencyInput.externalDependencies,
|
130
|
+
...inferredTargetExternalDependencyInput.externalDependencies,
|
131
|
+
]));
|
132
|
+
}
|
93
133
|
}, _ExecutorToPluginMigrator_pluginRequiresIncludes = async function _ExecutorToPluginMigrator_pluginRequiresIncludes(targetName, plugin) {
|
94
134
|
const loadedPlugin = new devkit_internals_1.LoadedNxPlugin({
|
135
|
+
createNodesV2: tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_createNodesV2, "f"),
|
95
136
|
createNodes: tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_createNodes, "f"),
|
96
137
|
name: tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_pluginPath, "f"),
|
97
138
|
}, plugin);
|
@@ -188,6 +229,7 @@ _ExecutorToPluginMigrator_projectGraph = new WeakMap(), _ExecutorToPluginMigrato
|
|
188
229
|
}
|
189
230
|
for (const targetName of tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_targetAndProjectsToMigrate, "f").keys()) {
|
190
231
|
const loadedPlugin = new devkit_internals_1.LoadedNxPlugin({
|
232
|
+
createNodesV2: tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_createNodesV2, "f"),
|
191
233
|
createNodes: tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_createNodes, "f"),
|
192
234
|
name: tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_pluginPath, "f"),
|
193
235
|
}, {
|
@@ -206,15 +248,19 @@ _ExecutorToPluginMigrator_projectGraph = new WeakMap(), _ExecutorToPluginMigrato
|
|
206
248
|
throw e;
|
207
249
|
}
|
208
250
|
}
|
209
|
-
tslib_1.__classPrivateFieldSet(this, _ExecutorToPluginMigrator_configFiles, Array.from(projectConfigs.matchingProjectFiles), "f");
|
210
251
|
tslib_1.__classPrivateFieldGet(this, _ExecutorToPluginMigrator_createNodesResultsForTargets, "f").set(targetName, projectConfigs);
|
211
252
|
}
|
212
253
|
};
|
213
254
|
async function migrateExecutorToPlugin(tree, projectGraph, executor, pluginPath, pluginOptionsBuilder, postTargetTransformer, createNodes, specificProjectToMigrate, skipTargetFilter) {
|
214
|
-
const migrator = new ExecutorToPluginMigrator(tree, projectGraph, executor, pluginPath, pluginOptionsBuilder, postTargetTransformer, createNodes, specificProjectToMigrate, skipTargetFilter);
|
255
|
+
const migrator = new ExecutorToPluginMigrator(tree, projectGraph, executor, pluginPath, pluginOptionsBuilder, postTargetTransformer, undefined, createNodes, specificProjectToMigrate, skipTargetFilter);
|
215
256
|
return await migrator.run();
|
216
257
|
}
|
217
258
|
exports.migrateExecutorToPlugin = migrateExecutorToPlugin;
|
259
|
+
async function migrateExecutorToPluginV1(tree, projectGraph, executor, pluginPath, pluginOptionsBuilder, postTargetTransformer, createNodes, specificProjectToMigrate, skipTargetFilter) {
|
260
|
+
const migrator = new ExecutorToPluginMigrator(tree, projectGraph, executor, pluginPath, pluginOptionsBuilder, postTargetTransformer, createNodes, undefined, specificProjectToMigrate, skipTargetFilter);
|
261
|
+
return await migrator.run();
|
262
|
+
}
|
263
|
+
exports.migrateExecutorToPluginV1 = migrateExecutorToPluginV1;
|
218
264
|
// Checks if two objects are structurely equal, without caring
|
219
265
|
// about the order of the keys.
|
220
266
|
function deepEqual(a, b, logKey = '') {
|
@@ -1,7 +1,13 @@
|
|
1
|
-
import { CreateNodes, ProjectGraph, Tree } from 'nx/src/devkit-exports';
|
1
|
+
import { CreateNodes, CreateNodesV2, ProjectGraph, Tree } from 'nx/src/devkit-exports';
|
2
2
|
/**
|
3
3
|
* Iterates through various forms of plugin options to find the one which does not conflict with the current graph
|
4
4
|
|
5
5
|
*/
|
6
|
-
export declare function addPlugin<PluginOptions>(tree: Tree, graph: ProjectGraph, pluginName: string, createNodesTuple:
|
6
|
+
export declare function addPlugin<PluginOptions>(tree: Tree, graph: ProjectGraph, pluginName: string, createNodesTuple: CreateNodesV2<PluginOptions>, options: Partial<Record<keyof PluginOptions, PluginOptions[keyof PluginOptions][]>>, shouldUpdatePackageJsonScripts: boolean): Promise<void>;
|
7
|
+
/**
|
8
|
+
* @deprecated Use `addPlugin` instead
|
9
|
+
* Iterates through various forms of plugin options to find the one which does not conflict with the current graph
|
10
|
+
|
11
|
+
*/
|
12
|
+
export declare function addPluginV1<PluginOptions>(tree: Tree, graph: ProjectGraph, pluginName: string, createNodesTuple: CreateNodes<PluginOptions>, options: Partial<Record<keyof PluginOptions, PluginOptions[keyof PluginOptions][]>>, shouldUpdatePackageJsonScripts: boolean): Promise<void>;
|
7
13
|
export declare function generateCombinations<T>(input: Record<string, T[]>): Record<string, T>[];
|
package/src/utils/add-plugin.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.generateCombinations = exports.addPlugin = void 0;
|
3
|
+
exports.generateCombinations = exports.addPluginV1 = exports.addPlugin = void 0;
|
4
4
|
const yargs = require("yargs-parser");
|
5
5
|
const devkit_exports_1 = require("nx/src/devkit-exports");
|
6
6
|
const devkit_internals_1 = require("nx/src/devkit-internals");
|
@@ -9,6 +9,31 @@ const devkit_internals_1 = require("nx/src/devkit-internals");
|
|
9
9
|
|
10
10
|
*/
|
11
11
|
async function addPlugin(tree, graph, pluginName, createNodesTuple, options, shouldUpdatePackageJsonScripts) {
|
12
|
+
return _addPluginInternal(tree, graph, pluginName, (pluginOptions) => new devkit_internals_1.LoadedNxPlugin({
|
13
|
+
name: pluginName,
|
14
|
+
createNodesV2: createNodesTuple,
|
15
|
+
}, {
|
16
|
+
plugin: pluginName,
|
17
|
+
options: pluginOptions,
|
18
|
+
}), options, shouldUpdatePackageJsonScripts);
|
19
|
+
}
|
20
|
+
exports.addPlugin = addPlugin;
|
21
|
+
/**
|
22
|
+
* @deprecated Use `addPlugin` instead
|
23
|
+
* Iterates through various forms of plugin options to find the one which does not conflict with the current graph
|
24
|
+
|
25
|
+
*/
|
26
|
+
async function addPluginV1(tree, graph, pluginName, createNodesTuple, options, shouldUpdatePackageJsonScripts) {
|
27
|
+
return _addPluginInternal(tree, graph, pluginName, (pluginOptions) => new devkit_internals_1.LoadedNxPlugin({
|
28
|
+
name: pluginName,
|
29
|
+
createNodes: createNodesTuple,
|
30
|
+
}, {
|
31
|
+
plugin: pluginName,
|
32
|
+
options: pluginOptions,
|
33
|
+
}), options, shouldUpdatePackageJsonScripts);
|
34
|
+
}
|
35
|
+
exports.addPluginV1 = addPluginV1;
|
36
|
+
async function _addPluginInternal(tree, graph, pluginName, pluginFactory, options, shouldUpdatePackageJsonScripts) {
|
12
37
|
const graphNodes = Object.values(graph.nodes);
|
13
38
|
const nxJson = (0, devkit_exports_1.readNxJson)(tree);
|
14
39
|
let pluginOptions;
|
@@ -25,15 +50,7 @@ async function addPlugin(tree, graph, pluginName, createNodesTuple, options, sho
|
|
25
50
|
}
|
26
51
|
global.NX_GRAPH_CREATION = true;
|
27
52
|
try {
|
28
|
-
projConfigs = await (0, devkit_internals_1.retrieveProjectConfigurations)([
|
29
|
-
new devkit_internals_1.LoadedNxPlugin({
|
30
|
-
name: pluginName,
|
31
|
-
createNodes: createNodesTuple,
|
32
|
-
}, {
|
33
|
-
plugin: pluginName,
|
34
|
-
options: pluginOptions,
|
35
|
-
}),
|
36
|
-
], tree.root, nxJson);
|
53
|
+
projConfigs = await (0, devkit_internals_1.retrieveProjectConfigurations)([pluginFactory(pluginOptions)], tree.root, nxJson);
|
37
54
|
}
|
38
55
|
catch (e) {
|
39
56
|
// Errors are okay for this because we're only running 1 plugin
|
@@ -72,7 +89,6 @@ async function addPlugin(tree, graph, pluginName, createNodesTuple, options, sho
|
|
72
89
|
updatePackageScripts(tree, projConfigs);
|
73
90
|
}
|
74
91
|
}
|
75
|
-
exports.addPlugin = addPlugin;
|
76
92
|
function updatePackageScripts(tree, projectConfigurations) {
|
77
93
|
for (const projectConfig of Object.values(projectConfigurations.projects)) {
|
78
94
|
const projectRoot = projectConfig.root;
|