Skip to content

Commit

Permalink
feat(core): rework metadata recording when merging configurations
Browse files Browse the repository at this point in the history
  • Loading branch information
MaxKless committed Nov 7, 2023
1 parent 0709566 commit 7bc3d4e
Show file tree
Hide file tree
Showing 2 changed files with 284 additions and 55 deletions.
142 changes: 128 additions & 14 deletions packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,8 @@ describe('project-configuration-utils', () => {
],
}
`);
});

describe('source map', () => {
it('should add new project info', () => {
const rootMap = new RootMapBuilder().getRootMap();
Expand Down Expand Up @@ -568,31 +570,63 @@ describe('project-configuration-utils', () => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.targets" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.tags" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.implicitDependencies" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.tags.a" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.tags.b" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.implicitDependencies.lib-b" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.targets.build" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.targets.build.executor" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.targets.build.options" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.targets.build.options.command" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.targets.build.configurations.dev.command" => {
"libs/lib-a.targets.build.configurations" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.targets.build.configurations.production.command" => {
"libs/lib-a.targets.build.configurations.dev" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.tags.a" => {
"libs/lib-a.targets.build.configurations.dev.command" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.tags.b" => {
"libs/lib-a.targets.build.configurations.production" => {
"file": "dummy.ts",
"plugin": "dummy",
},
"libs/lib-a.implicitDependencies.lib-b" => {
"libs/lib-a.targets.build.configurations.production.command" => {
"file": "dummy.ts",
"plugin": "dummy",
},
Expand Down Expand Up @@ -636,7 +670,7 @@ describe('project-configuration-utils', () => {
);
});

it('should merge target properties', () => {
it('should merge target properties for compatible targets', () => {
const rootMap = new RootMapBuilder().getRootMap();
const sourceMap: Map<string, { plugin: string; file: string }> =
new Map();
Expand Down Expand Up @@ -696,13 +730,15 @@ describe('project-configuration-utils', () => {

assertCorrectKeysInSourceMap(
sourceMap,
['libs/lib-a.targets.build', 'dummy2'],
['libs/lib-a.targets.build.executor', 'dummy'],
['libs/lib-a.targets.build.inputs.input1', 'dummy'],
['libs/lib-a.targets.build.inputs.input2', 'dummy2'],
['libs/lib-a.targets.build.outputs.output2', 'dummy2'],
['libs/lib-a.targets.build.inputs', 'dummy2'],
['libs/lib-a.targets.build.outputs', 'dummy2'],
['libs/lib-a.targets.build.options', 'dummy2'],
['libs/lib-a.targets.build.options.command', 'dummy'],
['libs/lib-a.targets.build.options.oldOption', 'dummy2'],
['libs/lib-a.targets.build.options.newOption', 'dummy2'],
['libs/lib-a.targets.build.configurations', 'dummy2'],
['libs/lib-a.targets.build.configurations.dev.command', 'dummy2'],
['libs/lib-a.targets.build.configurations.dev.oldOption', 'dummy'],
['libs/lib-a.targets.build.configurations.dev.newOption', 'dummy2'],
Expand All @@ -713,6 +749,79 @@ describe('project-configuration-utils', () => {
);
});

it('should override target properties for incompatible targets', () => {
const rootMap = new RootMapBuilder().getRootMap();
const sourceMap: Map<string, { plugin: string; file: string }> =
new Map();
mergeProjectConfigurationIntoRootMap(
rootMap,
{
root: 'libs/lib-a',
name: 'lib-a',
targets: {
build: {
executor: 'nx:run-commands',
inputs: ['input1'],
options: {
command: 'echo hello',
oldOption: 'value',
},
configurations: {
dev: {
command: 'echo dev',
oldOption: 'old option',
},
},
},
},
},
sourceMap,
{ plugin: 'dummy', file: 'dummy' }
);
mergeProjectConfigurationIntoRootMap(
rootMap,
{
root: 'libs/lib-a',
name: 'lib-a',
targets: {
build: {
executor: 'other-executor',
inputs: ['input1'],
options: {
option1: 'option1',
},
configurations: {
prod: {
command: 'echo dev',
},
},
},
},
},
sourceMap,
{ plugin: 'dummy2', file: 'dummy2.ts' }
);
assertCorrectKeysInSourceMap(
sourceMap,
['libs/lib-a.targets.build', 'dummy2'],
['libs/lib-a.targets.build.executor', 'dummy2'],
['libs/lib-a.targets.build.inputs', 'dummy2'],
['libs/lib-a.targets.build.options', 'dummy2'],
['libs/lib-a.targets.build.options.option1', 'dummy2'],
['libs/lib-a.targets.build.configurations', 'dummy2'],
['libs/lib-a.targets.build.configurations.prod', 'dummy2'],
['libs/lib-a.targets.build.configurations.prod.command', 'dummy2']
);

expect(
sourceMap.has('libs/lib-a.targets.build.configurations.dev')
).toBe(false);
expect(sourceMap.has('libs/lib-a.targets.build.outputs')).toBe(false);
expect(sourceMap.has('libs/lib-a.targets.build.options.command')).toBe(
false
);
});

it('should merge generator property', () => {
const rootMap = new RootMapBuilder().getRootMap();
const sourceMap: Map<string, { plugin: string; file: string }> =
Expand Down Expand Up @@ -754,10 +863,7 @@ describe('project-configuration-utils', () => {
sourceMap,
['libs/lib-a.generators.@nx/angular:component.option1', 'dummy2'],
['libs/lib-a.generators.@nx/angular:component.option2', 'dummy'],
[
'libs/lib-a.generators.@nx/angular:component.option3.nested',
'dummy2',
]
['libs/lib-a.generators.@nx/angular:component.option3', 'dummy2']
);
});
});
Expand Down Expand Up @@ -842,6 +948,14 @@ function assertCorrectKeysInSourceMap(
...tuples: [string, string][]
) {
tuples.forEach(([key, value]) => {
expect(sourceMap.get(key).plugin).toEqual(value);
if (!sourceMap.has(key)) {
throw new Error(`Expected sourceMap to contain key ${key}`);
}
try {
expect(sourceMap.get(key).plugin).toEqual(value);
} catch (error) {
// Enhancing the error message with the problematic key
throw new Error(`Assertion failed for key '${key}': \n ${error.message}`);
}
});
}

0 comments on commit 7bc3d4e

Please sign in to comment.