fix(ngcc): avoid error due to circular dependency in EsmDependencyHost
(#34512)
Previously, there was circular dependency between `ngcc/src/utils.ts`, `ngcc/src/dependencies/dependency_host.ts` and `ngcc/src/dependencies/esm_dependency_host.ts`. More specifically, `utils.ts` would [import from `esm_dependency_host.ts`][1], which would [import from `dependency_host.ts`][2], which would in turn [import from `utils.ts`][3]. This might be fine in some environments/module formats, but it can cause unclear errors in the transpiled CommonJS/UMD format (given how Node.js handles [cycles in module resolution][4]). (An example error can be found [here][5].) This commit fixes the problem by moving the code that depends on `EsmDependencyHost` out of `utils.ts` and into a dedicated file under `dependencies/`. It also converts the `createDtsDependencyHost()` function to a class for consistency with the rest of the `DependencyHost`s. [1]: https://github.com/angular/angular/blob/18d89c9c8/packages/compiler-cli/ngcc/src/utils.ts#L10 [2]: https://github.com/angular/angular/blob/18d89c9c8/packages/compiler-cli/ngcc/src/dependencies/esm_dependency_host.ts#L10 [3]: https://github.com/angular/angular/blob/18d89c9c8/packages/compiler-cli/ngcc/src/dependencies/dependency_host.ts#L9 [4]: https://nodejs.org/api/modules.html#modules_cycles [5]: https://circleci.com/gh/angular/angular/577581 PR Close #34512
This commit is contained in:

committed by
Alex Rickabaugh

parent
c38195f59e
commit
07ea6cf582
@ -12,10 +12,10 @@ import {FileSystem, absoluteFrom, getFileSystem, relativeFrom} from '../../../sr
|
||||
import {runInEachFileSystem} from '../../../src/ngtsc/file_system/testing';
|
||||
import {DependencyInfo} from '../../src/dependencies/dependency_host';
|
||||
import {DependencyResolver, SortedEntryPointsInfo} from '../../src/dependencies/dependency_resolver';
|
||||
import {DtsDependencyHost} from '../../src/dependencies/dts_dependency_host';
|
||||
import {EsmDependencyHost} from '../../src/dependencies/esm_dependency_host';
|
||||
import {ModuleResolver} from '../../src/dependencies/module_resolver';
|
||||
import {EntryPoint} from '../../src/packages/entry_point';
|
||||
import {createDtsDependencyHost} from '../../src/utils';
|
||||
import {MockLogger} from '../helpers/mock_logger';
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ runInEachFileSystem(() => {
|
||||
fs = getFileSystem();
|
||||
moduleResolver = new ModuleResolver(fs);
|
||||
host = new EsmDependencyHost(fs, moduleResolver);
|
||||
dtsHost = createDtsDependencyHost(fs);
|
||||
dtsHost = new DtsDependencyHost(fs);
|
||||
resolver = new DependencyResolver(fs, new MockLogger(), {esm5: host, esm2015: host}, dtsHost);
|
||||
});
|
||||
|
||||
@ -324,7 +324,7 @@ runInEachFileSystem(() => {
|
||||
it('should use the appropriate DependencyHost for each entry-point', () => {
|
||||
const esm5Host = new EsmDependencyHost(fs, moduleResolver);
|
||||
const esm2015Host = new EsmDependencyHost(fs, moduleResolver);
|
||||
const dtsHost = createDtsDependencyHost(fs);
|
||||
const dtsHost = new DtsDependencyHost(fs);
|
||||
resolver = new DependencyResolver(
|
||||
fs, new MockLogger(), {esm5: esm5Host, esm2015: esm2015Host}, dtsHost);
|
||||
spyOn(esm5Host, 'collectDependencies')
|
||||
|
Reference in New Issue
Block a user